[BulmaGés] Bug en bulmacont

Leopold Palomo Avellaneda leo en alaxarxa.net
Mar Ene 29 00:25:53 CET 2008


Bones,

haciendo mas pruebas hemos descubierto que si intentas hacer un balance en 
bulmacont peta de forma contundente. Haciendo un bt me encuentro que:

#0  0x00002b04fb1d5713 in QString::operator== () from /usr/lib/libQtCore.so.4
#1  0x000000000046e4ab in QString::operator!= ()
#2  0x000000000046c2fc in Arbol::actualizahojas ()
#3  0x000000000055a964 in BalanceView::presentarSyS ()
#4  0x000000000055c87c in BalanceView::presentar ()
#5  0x000000000055ca0f in BalanceView::accept ()


y mirando el código de la función: bulmacont/src/arbol.cpp

void Arbol::actualizahojas ( cursor2 *cuenta )
{
    _depura ( "Arbol::actualizahojas", 0 );
    unsigned int i = 0;
    bool actualizado;
    tipohoja *hojaraiz;

    QString cuentapadre = cuenta->valor ( "codigo" ).left ( 2 );
    do {
        hojaraiz = raiz[i];
        i++;
    } while ( i < 70 && cuentapadre != hojaraiz->codigo );
    actualizado = false;

el error está en el while. Nadie te garantiza que primero compare que y sea 
menor qie 70 y luego que cuentapadre != hojaraiz->codigo. Puede pasar que se 
intente acceder a hojaraiz->codigo con el índice i=70 i claro, peta.

La solución subida es:
....
 bool actualizado, condition = true;
.....
do {
        hojaraiz = raiz[i];
        if(i <70)
          i++;
        else
          condition = false;
        if(condition)
          if(cuentapadre != hojaraiz->codigo)
            condition = false;
    } while ( condition );


Leo


-- 
--
Linux User 152692
PGP: 0xF944807E
Catalonia
------------ próxima parte ------------
Se ha borrado un mensaje que no está en formato texto plano...
Nombre     : no disponible
Tipo       : application/pgp-signature
Tamaño     : 189 bytes
Descripción: This is a digitally signed message part.
Url        : http://llistes.bulma.net/pipermail/bulmages/attachments/20080129/f0859e74/attachment-0001.pgp 


Más información sobre la lista de distribución BulmaGes