Следите за границей
Несколько дней не мог найти блуждающую багу в программе на python: файл базы pdb (Pilot Database) при определённых условиях сохранялся неправильно. Везде, где только можно, вставил отладочные сообщений и assert'ы,- вроде всё правильно,- но не работает. Пришлось вооружаться HEX-редактором:
в поле ID записывается номер текущей записи открытым текстом,- 1 байт на разряд. До 999 записи всё хорошо, в 1000-й записи последний ноль залезает в следующую запись и все последующие становятся нечитабельны. Естественно, в описании формата написано, что ID длиной всего 3 байта:
Так что переполнения бывают даже у питонов ;-)
Ошибка была в готовой библиотеке peepdb.py, исправленную версию выложил на github.
Ссылки по теме:
в поле ID записывается номер текущей записи открытым текстом,- 1 байт на разряд. До 999 записи всё хорошо, в 1000-й записи последний ноль залезает в следующую запись и все последующие становятся нечитабельны. Естественно, в описании формата написано, что ID длиной всего 3 байта:
struct pdb_rec_header { /* 8 bytes total */
....
char uniqueID[3];
....
}
Так что переполнения бывают даже у питонов ;-)
Ошибка была в готовой библиотеке peepdb.py, исправленную версию выложил на github.
Ссылки по теме:
Комментарии
Отправить комментарий