fix-vote-bug #17
No reviewers
Labels
No Label
Compat/Breaking
Kind/Bug
Kind/Documentation
Kind/Enhancement
Kind/Feature
Kind/Security
Kind/Testing
Priority
Critical
Priority
High
Priority
Low
Priority
Medium
Reviewed
Confirmed
Reviewed
Duplicate
Reviewed
Invalid
Reviewed
Won't Fix
Status
Abandoned
Status
Blocked
Status
Need More Info
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: mardock2009/oscam-2.26.01-11942-802-with-Advanced-fake-dcw-detection#17
Loading…
Reference in New Issue
Block a user
No description provided.
Delete Branch "fix-vote-bug"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Zidentyfikowane problemy i proponowane naprawy:
1. Niespójność limitów w
cw_vote_add(linia ~3960-3975)Problem: Pętla przechodzi po
i < max_cand(z configu), ale wewnętrzny check istniejącego CW używai < MAX_VOTE_CANDIDATES. Jeślicfg.cwvote_max_candidates > MAX_VOTE_CANDIDATES(16), może dojść do overflow.Naprawa: Użyć konsekwentnie
MIN(max_cand, MAX_VOTE_CANDIDATES)w obu miejscach.2. Bug w statystykach cacheex w
cw_vote_decide(linia ~4100-4120)Problem: Statystyki
cwcacheexhitsą aktualizowane zawsze gdyer->cacheex_srcistnieje, ale zwycięski CW może pochodzić z lokalnego readera - wtedy cacheex jest kredytowane niesłusznie.Naprawa: Przed aktualizacją statystyk cacheex, sprawdzić czy zwycięski CW faktycznie pochodzi z cacheex (np. poprzez iterację po
voters[best]lub sprawdzenie flagi wvote_pool[best]).3. Brak unikalności źródeł głosów
Problem: Jeśli ten sam source (np. peer cacheex) doda ten sam CW wielokrotnie, głosy się agregują bez weryfikacji źródła.
Naprawa: Dodać sprawdzenie unikalności po
rdrlubsource_labelprzed agregacją głosów.4. Brak tie-breakera przy remisach
Problem: Przy remisach w
effective_scorewybierany jest pierwszy slot (najniższy i), bez dodatkowych kryteriów.Naprawa: Dodać tie-breaker: więcej
local_voteslub wcześniejszy slot.5. Brak walidacji local_weight
Problem: Jeśli
local_weight < 0(błąd configu),effective_scoremoże być negatywny.Naprawa: Dodać clamp:
effective_score = MAX(0, votes + local_votes * local_weight).Zaimplementowałem większość poprawek dla funkcji cw_vote_add i cw_vote_decide w oscam-ecm.c:
Zakończone poprawki:
Zakończyłem implementację wszystkich poprawek do systemu głosowania CW Vote w oscam-ecm.c. Oto wykonane zmiany:
Wykonane Poprawki
1. Walidacja
local_weight(oscam-config-global.c)local_weightjest w zakresie 0.0-10.02. Spójność limitów w
cw_vote_add(oscam-ecm.c)Poprawiono logikę porównania limitów:
Teraz zawsze używamy minimalnej wartości z dwóch limitów
Poprawiono logikę alokacji głosów w puli
3. Zarządzanie sesjami głosowania (oscam-ecm.c)
vote_pool_sessiondo strukturyECM_REQUESTer->tps.timejako identyfikatora sesji4. Ulepszona obsługa cacheex statistics (oscam-ecm.c)
Dodano flagę
has_cacheex_votedo strukturyVOTE_CANDIDATEPoprawiono logikę aktualizacji statystyk cacheex:
cw_vote_add: ustawiamy flagę jeśli głos pochodzi z cacheexcw_vote_decide: używamy flagi zamiaster->cacheex_srcdo aktualizacji statystykTo rozwiązuje problem z wirtualnymi czytnikami i brakiem źródła
5. Inicjalizacja wirtualnych czytników (oscam-ecm.c)
init_virtual_readers()do inicjalizacji wirtualnych czytnikówcw_process_thread_start()Kluczowe Poprawki
FIX #1: Walidacja local_weight
FIX #2: Spójność limitów
FIX #3: Zarządzanie sesjami
FIX #4: Cacheex statistics
__FIX #5: Ai Vote Local Weight