[voikko] rpmlint: "shared-lib-calls-exit /usr/lib64/libvoikko.so.1.9.0"

Harri Pitkänen hatapitk at iki.fi
Wed Sep 16 16:47:21 EEST 2009


On Wednesday 16 September 2009, Ville-Pekka Vainio wrote:
> Rpmlint Fedorassa varoittaa nyt siitä, että
> morphology/malaga/basic.cpp:n malaga_throw-funktiossa kutsutaan exitiä.
> Periaatteessa "oikeaoppisempi" tapa olisi kai palauttaa jotain
> virhekoodia ylöspäin. Toisaalta en pidä tätä mitenkään vakavana asiana,
> koska sitä ennen yritetään käsitellä virhettä ja rpmlintissäkin se on
> merkitty varoitukseksi eikä virheeksi. En tunne Voikon koodia niin
> tarkkaan, että minulla olisi tähän mitään hyvää ratkaisuajatusta, mutta
> ajattelin kuitenkin ottaa asian esille. Libmalagan osalta samaa
> varoitusta ei tule, joten oletettavasti siellä on hoidettu
> virhetilanteet jotenkin muuten.

Libmalaga toimii täsmälleen samalla tavalla. Ilmeisesti rpmlint ei jostain 
syystä vain osaa löytää tuota samaa virhettä sieltä.

Kieltämättä exitin kutsuminen jaetusta kirjastosta on väärin. Mutta koska tämä 
on vanha malagasta peritty ongelma, en aio vielä tähän versioon tehdä asialle 
mitään.

Tuo malaga_throw-funktio on muuten alkuperäisessä malagassa nimeltään throw. 
Sen avulla on toteutettu eräänlainen poikkeuksiin perustuva virheiden 
käsittely, jota C-kielessä ei valmiiksi ole. Koska libvoikko on C++-kielinen, 
olisi oikeampi ratkaisu heittää tässä aito C++-poikkeus.

Tuo koodi muuten toimii niin, että exitiä kutsutaan vain silloin, jos virhe 
tapahtuu TRY-END_TRY-käsittelyn ulkopuolella. Jos vastaavasti C++-ohjelmassa 
heitettäisiin poikkeus ilman ympärillä try-catch-rakennetta, johtaisi tämäkin 
ohjelman päättämiseen. Eli virheen käsittelyn muuttaminen C++-tyyliseksi ei 
oikeastaan muuta mitään, vaikka se tuon varoituksen korjaakin.

Harri



More information about the voikko mailing list