SOURCES: gzip-segfault.patch (NEW)

Jakub Bogusz qboosh w pld-linux.org
Czw, 7 Sie 2003, 10:53:57 CEST


On Wed, Aug 06, 2003 at 05:23:07PM +0200, Mariusz Mazur wrote:
> On Wednesday 06 of August 2003 16:57, Jakub Bogusz wrote:
> > Skąd ten patch?
> >
> > Błąd występuje nie tylko na alphie (program wychodzi sobie poza tablicę
> > i próbuje czytać - na pewno w kodzie ogólnym w C, nie jestem na 100%
> > pewien co do fragmentu asemblerowego dla x86 i m68k - na x86 chyba też),
> > ale się nie objawia.
> >
> > W RH problem obeszli przez zwiększenie tablicy.
> > Ten patch wygląda nieco lepiej, ale powoduje tworzenie pliku większego
> > o kilkadziesiąt bajtów...
> > Z kolei sprawdzanie przed każdym odczytem to pogorszenie wydajności.
> 
> Dlatego też został on zaaplikowany tylko na alphie, gdyż właśnie tam powoduje 
> wywalanie (na ppc też, ale tylko przy skompilowaniu w trybie debug). Na 
> innych arch się nie wywala, więc założyłem, że działa poprawnie. Jeśli nie, 
> to trzeba wykomentować ifarch.

Z -DDEBUG wywala się na wszystkich. Tylko na x86 trzeba wyłączyć
wersję asm, bo w niej nie ma assertów takich jak w wersji C (ale
wygląda, że też wyjeżdża za tablicę; być może kod m68k tego nie robi,
ale PLD na m68k nie ma). To, że nie ma SEGV, wynika tylko z wyrównania
segmentu danych.

Do tego _być może_ (bez dokładnej analizy kodu nie mogę tego stwierdzić,
a kod jest cokolwiek pokręcony) istnieje jakieś niewielkie
prawdopodobieństwo stworzenia błędnego pliku .gz (zależy co będzie w tym
fragmencie pamięci poza tablicą).

Tak więc błąd musi być poprawiony na wszystkich architekturach, a nie
tylko tam, gdzie objawia się SEGV.

> A sam patch jest z debiana.

Przejrzałem raporty - oni też nie do końca wiedzieli o co chodzi,
a patch jest raczej objawowy (stąd pogorszenie kompresji dla niektórych
plików - tych, przy których występowało wyjechanie poza tablicę).

Ale jeśli nie będzie lepszego, to trzeba zaaplikować ten.
Nie mogę znaleźć, czy gzip jest trzymany w publicznie dostępnym
repozytorium (żeby poszukać poprawki).


-- 
Jakub Bogusz    http://cyber.cs.net.pl/~qboosh/



Więcej informacji o liście dyskusyjnej pld-devel-pl