четверг, 28 октября 2010 г.

5-тилетний bugfix

Сегодня сделали фикс приложения, которое работало 5 лет без сбоев. Проявление - исключение на ровном месте с падением приложения при обработке одного файла (без подобной реакции на других).

Фикс был быстрый, без головной боли и глубокой отладки. Но сам примечательный факт был в том, что автор понимал проблему, сделал что-то для её решения, но все равно неправильно.

Код:

...
    LPBYTE OUTBUFF = NULL;
    DWORD BUFFSIZE = 0;
...
        int pgp_res = m_pgp.EncodeBuff2Buff(
            ( LPCVOID ) ( LPCTSTR ) post_data.c_str(),
            ( DWORD ) post_data.length(),
            OUTBUFF,
            BUFFSIZE,
            ( LPCTSTR ) query_mts_cfg().query_crypto_public_key().c_str() ); 
...
            std::string s;
            // мы будем рассматривать буфер как строку, а PGPEncode
            // естественно не ограничивает буфер нулевым
            // символом, поэтому строку из буфера надо
            // ограничивать насильно
            s = std::string( ( char* ) OUTBUFF );
            s = s.substr( 0, BUFFSIZE );

Отправлено на говнокод.

Highlight сгенерирован с помощью tohtml.com

Комментариев нет: