Polska programistka załatała 20-letni błąd w linuxowej aplikacji

Bartłomiej LisSkomentuj
Polska programistka załatała 20-letni błąd w linuxowej aplikacji

Historia błędu rozwiązanego przez polską programistkę pokazuje, że nawet stabilne i długo rozwijane oprogramowanie może skrywać nieoczywiste problemy. Pokazuje też siłę oprogramowania open-source.



Kamila Szewczyk natrafiła na problem podczas codziennej pracy w systemie Linux. Okazało się, że przyczyną był fragment kodu pamiętający jeszcze początki XXI wieku.

Jeden plik PDF, który ujawnił błąd

Programistka korzystała z niszowego menedżera okien Enlightenment E16, który powstał w 1997 roku. Podczas przygotowywania slajdów otworzyła dokument PDF w czytniku Atril. Wtedy system nagle się zawiesił. Jak szybko zdiagnozowała, problem był w pełni powtarzalny. Każda próba otwarcia tego samego pliku prowadziła do identycznego efektu – mimo, że inne działały. To pozwoliło rozpocząć dokładną analizę błędu.



Źródłem problemu okazała się długość nazwy pliku. Menedżer okien automatycznie wykorzystuje nazwę dokumentu jako tytuł okna. W przypadku tego PDFa była ona wyjątkowo długa i nie mieściła się w dostępnej przestrzeni. Program próbował skrócić tekst, zastępując środkową część wielokropkiem. Do obliczenia liczby znaków do usunięcia wykorzystano algorytm Newtona. Rozwiązanie było sprytne, ale brakowało jednego zabezpieczenia.

Kod nie posiadał ograniczenia liczby iteracji. W określonych warunkach algorytm wpadał w nieskończoną pętlę, próbując dopasować długość tekstu. W efekcie pulpit przestawał reagować, mimo że program formalnie nadal działał.

Błąd ukryty przez lata

Najbardziej zaskakujące jest to, jak długo problem pozostawał niezauważony. Błąd istniał w kodzie od 2006 roku i ujawniał się tylko w specyficznych warunkach. Wystarczył jednak jeden nietypowy tytuł pliku, aby wywołać awarię.

Programistka przeanalizowała działanie aplikacji, korzystając z narzędzi debugujących. Dzięki temu udało się ustalić, że algorytm oscyluje między dwiema wartościami i nigdy nie dochodzi do rozwiązania. To właśnie powodowało zawieszenie interfejsu.

Trzy poprawki i koniec problemu

Rozwiązanie okazało się stosunkowo proste. Programistka wprowadziła limit 32 iteracji, który zapobiega nieskończonej pętli. Dodatkowo zabezpieczyła kod przed ujemnymi wartościami oraz potencjalnym dzieleniem przez zero.


Zmiany były niewielkie, ale skuteczne. Dzięki nim menedżer okien przestał się zawieszać, a poprawka trafiła do oficjalnego kodu projektu. Użytkownicy mogą teraz korzystać z programu bez ryzyka podobnej awarii.

Ta historia pokazuje siłę oprogramowania open source. Nawet pojedynczy użytkownik może znaleźć i naprawić błąd, który ukrywał się niemal 20 lat. Historia i poprawki zostały opisane na blogu Kamili Szewczyk: iczelia.net

Źródło: iczelia.net

Bartlomiej LisNa co dzień administrator systemów, z pasją zgłębiający świat nowych technologii. Po godzinach zajmuje się grafiką cyfrową, ale także bardziej tradycyjną sztuką: malarstwem, fotografią analogową.