Comments 34
В сырцах кути есть чудесный QZipReader
хорошо, когда у человека есть время и желание разбираться в чужих багах
Тут скорее не время и желание) а время и потребность. Так как без этого пришлось бы писать с нуля зип/анзип либу (проект требует этого).
Это основная фишка Open Source, ты можешь использовать чужой код, но если он окажется с багами — то тебе придется их исправлять. В итоге всем профит — код оттестирован еще одним разработчиком и выявленные баги исправлены.
Мужик!
Проведена отличная работа.
Мне бы наверное было лень :) Хотя, надо признать, что для нужд текущего своего проекта мне пришлось исправить уже около 10 багов в трех библиотеках, которые я использую)
Мне бы наверное было лень :) Хотя, надо признать, что для нужд текущего своего проекта мне пришлось исправить уже около 10 багов в трех библиотеках, которые я использую)
«cам Qt поддерживает методы qCompress и qDecompress для упаковки.»
ничего он не поддерживает, просто у класса QByteArray есть возможность работы со сжатыми файлами, и по дефолту он работает с zlib бибилтекой. В самом Qt ничего нет для сжати и распаковки, но есть интерфейс.
doc.trolltech.com/4.6/qbytearray.html#qCompress
doc.trolltech.com/4.6/3rdparty.html#data-compression-library-version-1-2-3
Естественно это реализует только алгоритм сжатия, саи формат файлов уже тут не затрагивается.
ничего он не поддерживает, просто у класса QByteArray есть возможность работы со сжатыми файлами, и по дефолту он работает с zlib бибилтекой. В самом Qt ничего нет для сжати и распаковки, но есть интерфейс.
doc.trolltech.com/4.6/qbytearray.html#qCompress
doc.trolltech.com/4.6/3rdparty.html#data-compression-library-version-1-2-3
Естественно это реализует только алгоритм сжатия, саи формат файлов уже тут не затрагивается.
Молодец.
А вообще, с зипом много вещей интересных бывает.
В свое время напоролся на косяк, что java.util.zip весьма странно работает с именами файлов в юникодной кодировке. Через этот пакет можно заархивировать и обратно, а вот WinZip уже обламывается на разорхивировании этих файлов. Долго гуглил/читал спеку ZIP — оказывается, там вообще мрак — юникод-имена могут хранится несколькими способами — в зависимости от архиватора.
К чему это я? А, ну так, на всякий случай — вдруг кто столкнется — ссыль на баг
в sun-oracle багтрекере
Также это исправлено в Apache Commons Compress.
А вообще, с зипом много вещей интересных бывает.
В свое время напоролся на косяк, что java.util.zip весьма странно работает с именами файлов в юникодной кодировке. Через этот пакет можно заархивировать и обратно, а вот WinZip уже обламывается на разорхивировании этих файлов. Долго гуглил/читал спеку ZIP — оказывается, там вообще мрак — юникод-имена могут хранится несколькими способами — в зависимости от архиватора.
К чему это я? А, ну так, на всякий случай — вдруг кто столкнется — ссыль на баг
в sun-oracle багтрекере
Также это исправлено в Apache Commons Compress.
Перед прочтеним до конца именно о кодировке и подумал, но конец оказался совсем иным ;)
а можно поподробнее про кодировку? а то есть подозрение, что автор статьи (и я в том числе, как входящий в ту же команду разработки) с этим столкнется
Если не забуду — сдеру завтра резолюцию по багу, если сильно интересно. Там, правда, java-specific. Как с этим в других языках не могу сказать.
Будем рады ;) Интересно поглядеть. Да и вообще можно сделать цикл статей «История одного бага». Т.к. баги бывают разные, интересные, иногда даже веселые. А самое интересное — его исправление. Автору большой респект!
Да, интересно, неважно что java, я думаю суть везде одна и таже. Ждем статью, спасибо!
Про кодировку я думаю не стокнемся, я чесно тебе скажу, не копал в эиу сторону, но QuaZIP вроде вполне прилично сам все гонит в нужную кодировку еще до создания архива. Да и не думаю что в этом приложении нам прям-таки необходимы будут русскоязычные имена файлов.
Кстати не знаю как в QuaZIP, но в minizip есть одна очень досадная недоработка — он не проверяет пароль на правильность, а сразу пытается распаковать архив с заданным паролем.
Не знаю ни Qt, ни C, ничего не понимаю в зипах и шестнадцатиричных кодах. Но было безумно интересно читать. Очень славный стиль изложения.
SDaB ZIP пришлось отбросить сразу, не смотря на то, что это отличная библиотека, ее код распространяется только под лицензией GPL, мне же нужно было встроить функционал в проприетарное приложение. К счастью QuaZIP оказался с двумя лицензиями GPL и LGPL.
Вот если бы вы и свою программу под GPL опубликовали, то возможно и ваши баги (а у кого их нет?) кто-нибудь пофиксил бы. Как и вы сейчас. А так — это вы фиксите чужие баги. За что вам конечно спасибо, и от меня как от косвенного пользователя.
Вот если бы вы и свою программу под GPL опубликовали, то возможно и ваши баги (а у кого их нет?) кто-нибудь пофиксил бы. Как и вы сейчас. А так — это вы фиксите чужие баги. За что вам конечно спасибо, и от меня как от косвенного пользователя.
Если бы это была моя программа, и писал бы я ее для себя, то я безусловно бы ее под GPL опубликовал, но, очевидно, что помимо любви к программированию, у меня как и у любого другого человека или животного, есть здоровая любовь к процессу приема пищи, по этому, писать приходится часто, то, что просят, и под той лицензией, под которой говорят.
Zip-формат как будто специально создан для того, чтобы возникла уйма разных, неудобных, и часто глючных и непрозрачных реализаций.
Когда мне таки пришлось работать с ним, я плюнул на все, взял в зубы zlib и реализовал формат-обертку сам. И нисколько не пожалел.
Когда мне таки пришлось работать с ним, я плюнул на все, взял в зубы zlib и реализовал формат-обертку сам. И нисколько не пожалел.
Интересная статья, спасибо.
А в minizip вы патчик тоже скинули?
А в minizip вы патчик тоже скинули?
А толку-то, если такое шифрование ни от чего по сути не защищает?
Использовали б уже WinZip«овский AES, там ничего сложного нет, и документация открыта (и поддерживается всеми нормальными реализацями)
Использовали б уже WinZip«овский AES, там ничего сложного нет, и документация открыта (и поддерживается всеми нормальными реализацями)
Sign up to leave a comment.
История одного бага или как я ZIP паролил