Posts Tagged ‘ bug

feof() не знает о конце файла

May 16, 08 by TracKer

Интересной и, кстати сказать, очень неожиданной новостью для меня стало то, что feof() на самом деле не знает о конце файла, прочитали ли мы последний символ/байт или все еще готовы читать дальше.

Собственно поподробнее.

Писал я маленький скрипт, ориентированный на использование бинарных файлов. В общем-то все было уже готово, однако в самый последний момент было обнаружено, что по непонятной причине в буфере к прочитанным данным почему-то приплюсовывается дополнительно 10 байт данных (забитых нулями). Я не мог понять почему fread() читает за пределами файла, а feof() не находит его конец, прочитывая последний байт. Провозился 4 часа, потом решил поискать… И нашел.

Принцип работы с функцией feof() следующий:  необходимо дочитать до конца файла, а потом прочитать еще один или более символов/байт за пределами файла, и только после этого feof() поймет что файл всетаки кончился.

Оказывается об этом люди знали еще в 2005 году, однако никакого намека в мануале PHP найти не удалось. Есть даже заявление на исправление ошибки в баг-трейсе, однако по комментарию одного из разработчиков становится понятно, что это скорее фича языка, чем баг.

Особенно эта фича рулит при работе с бинарными файлами, где каждый байт на счету. :)

Будте внимательны, фичи на каждом шагу! ;)

Blogowar и int unsigned

February 26, 08 by TracKer

Похоже в блоговаре случился глюк с Унцем :) А именно ошибка переполнения буфера, которая дала блогу “Заработок в интернете и Affiliate Marketing” 4 миллиарда унца :)

blogowar-bug-first.jpg

Следующим похоже будет “Человек-Хэмингуэй“. :) Проверим.

blogowag-bug-next.jpg

З.Ы. Восстановил свой пароль, методом поиска в ящике письма о регистрации… :)

UPDATE: Свершилось :)

blogowar-bug-done.jpg