Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Flate-декомпрессор на Python. Где ошибка? Ошибка в данных или в коде? 
:(
    Опции темы
LShadow77
Дата 17.10.2011, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 17.10.2011

Репутация: нет
Всего: нет



Здравствуйте!
Понадобилось конвертировать один PDF-файл в fb2. Поскольку ни один из перепробованных мною 
конверторов не справился с задачей должным образом, решил написать свой скрипт на Python.
Т.к. данные потоков моего PDF-документа сжаты по алгоритму zlib/Flate (фильтр /FlateDecode), то 
пришлось реализовать собственный декомпрессор.

Естественно, в целях отладки, стал декодировать различные данные, как из потоков PDF, так и из 
ZIP-архивов. И всё работало до тех пор, пока не натолкнулся на следующий фрагмент из 39 байт
(собственно данные тут выделены, первые 2 байта 48 89 - заголовок zlib):
user posted image
Ошибка декомпрессии! Вот отладочный лог:
Код

Hdr=1,IsLast=0
output('q\rq\r447 0')
DistCode=16
Len=3,Dist=359
output('\x00\x00\x00')
output('\x00\x00\x00\x03T')
DistCode=14
Len=103,Dist=175
output('\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
output('\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\r/Im0 Do\r\rQ')
DistCode=16
Len=3,Dist=257
output('\x00\x00\x00')
output('\x00\x00\x00\x10\x00')

Hdr=2,IsLast=0
nLit=261,nDist=3,nCLen=6
---- Unexpected end of data ----


Здесь видно, что первые 9 байт декодировались нормально (строка "q\rq\r447 0", что похоже на 
истину), а вот дальше следует код Length/Distance. После декодирования получилось, что длина 
повторившейся последовательности равна 3, вот расстояние до неё аж 359, при том, что "скользящее
окно" заполнено только на 9 байт! Здесь явно не порядок! Ну а в конце, данные неожиданно 
закончились без маркера конца 256.

Вопрос: где ошибка?
В PDF-файле? Но ведь он спокойно открывается. И этот поток каким-то образом прочитывается (проверял).
В коде декомпрессора? Но я уже перепроверил всё что можно. Декодировал больше сотни разных 
данных, - всё работает как часы! Сбой - только на этом куске.

Вот, собственно, бинарник:
BadFile.dat
BadFile.dat

Если есть на форуме спецы по сжатию, то очень надеюсь на помощь, а то скоро крыша поедет!
А если у вас есть собственная реализация алгоритма Inflate, то попробуйте декодировать прилагаемый файл и отпишитесь о результате.

Заранее спасибо!



PM MAIL   Вверх
LShadow77
Дата 14.11.2011, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 17.10.2011

Репутация: нет
Всего: нет



И так, за три недели моего вынужденного отсутствия было 907 посещений и 0 ответов! Ну неужели нет никого, кто экспериментировал с flate-компрессией? Очень странно!

PM MAIL   Вверх
LShadow77
Дата 14.12.2011, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 17.10.2011

Репутация: нет
Всего: нет



Не уж-то таки никому не интересно, а?!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Форматы файлов и данных | Следующая тема »


 




[ Время генерации скрипта: 0.1021 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.