[voikko] libvoikko 2.2.2rc1 (oli: voikkospell: Segmentation fault)

Harri Pitkänen hatapitk at iki.fi
Fri Oct 30 20:02:13 EET 2009


On Friday 30 October 2009, Teemu Likonen wrote:
> Teemu Likonen kirjoitti 30.10.2009 klo 12.32:
> > Kun voikkospell-ohjelmalle tarjoaa alla olevan merkkijonon, se sanoo
> > "Segmentation fault".
> 
> Taisin löytää täsmällisemmän logiikan kaatumiseen. Libvoikko taitaa
> hylätä merkkijonot, jotka ovat pituudeltaan 256 tavua tai enemmän.
> Segfault tulee silloin, kun merkkijono pituus on _merkkeinä_ laskettuna
> alle tuon rajan mutta _tavuina_ yli.

Juuri tästä oli kyse. En tosin tiedä, miten ongelma olisi syntynyt juuri 
revisioiden 2821 ja 2822 välillä, mutta on melko uskottavaa, että noihin 
aikoihin se on tapahtunut.

Bugi itsessään on vanha. Merkistökoodausmuunnoksessa icon-kutsua varten 
varattiin puskuri, joka kyllä oli riittävän suuri, mutta iconville väitettiin 
sen olevan vain 255 tavua pitkä. Tällöin yli 255 tavua UTF-8-koodattuna 
olevien merkkijonojen muunnos jäi kesken. Aikaisemmin kuitenkin aiemmat 
tarkistukset ovat estäneet tällaisten merkkijonojen pääsemisen edes näin 
pitkälle.

Päätin julkaista uuden version libvoikosta ongelman korjaamiseksi. On 
kuitenkin huomattava, että käytännössä bugi ei koske ohjelmia, jotka käyttävät 
libvoikon cstr-funktioita UTF-8-merkistöllä. Näissä merkkijonon pituus 
tarkistetaan jo aikaisemmin tavuina syötteenä saadusta UTF-8-esityksestä. 
Openoffice.org-voikko, mozvoikko, tmispell ja enchant toimivat kaikki näin, 
joten bugi on lähinnä merkityksellinen niille, jotka ovat käyttäneet 
libvoikkoa, sen mukana tulevia testiohjelmia tai Python-rajapintaa omissa 
sovelluksissaan.

Bugi on korjattu versiossa 2.2.2rc1, joka löytyy täältä:

  http://www.puimula.org/htp/testing/libvoikko-2.2.2rc1.tar.gz

Aion julkaista tuon joskus ensi viikolla, mutta odotan kuitenkin muutaman 
päivän, jos joku haluaa vielä sitä testailla.

Harri



More information about the voikko mailing list