Сегодня сделали фикс приложения, которое работало 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
Комментариев нет:
Отправить комментарий