Следите за границей

Несколько дней не мог найти блуждающую багу в программе на python: файл базы pdb (Pilot Database) при определённых условиях сохранялся неправильно. Везде, где только можно, вставил отладочные сообщений и assert'ы,- вроде всё правильно,- но не работает. Пришлось вооружаться HEX-редактором:

в поле ID записывается номер текущей записи открытым текстом,- 1 байт на разряд. До 999 записи всё хорошо, в 1000-й записи последний ноль залезает в следующую запись и все последующие становятся нечитабельны. Естественно, в описании формата написано, что ID длиной всего 3 байта:


struct pdb_rec_header { /* 8 bytes total */
....
char uniqueID[3];
....
}


Так что переполнения бывают даже у питонов ;-)

Ошибка была в готовой библиотеке peepdb.py, исправленную версию выложил на github.

Ссылки по теме: