Fixing Bugs in the Archive::Zip Perl Module
Title: Fixing Bugs in the Archive::Zip Perl Module
Name: Alan Haggai Alavi
Grant Manager: Ricardo Signes
Duration: 3 months
Started: August, 2008
Perl programs often need to manipulate .zip files. Archive::Zip (http://search.cpan.org/dist/Archive-Zip/) is a Perl module that allows a Perl program to manage Zip archive files without calling an external utility.
The Archive::Zip module, however, has some bugs which prevent it from generating fully-portable .zip files, that are handled correctly by all .zip file readers and manipulators. The project's main aim is to address the outstanding bug reports (http://rt.cpan.org/Public/Dist/Display.html?Name=Archive-Zip), by using
pyconstruct (http://pyconstruct.wikispaces.com/), which is a flexible framework for defining dissectors for binary formats in a declarative way.
A version of Archive::Zip Perl module that will manipulate .zip files and a re-usable .zip file deconstructor.
Archive::Zip is a Perl module that allows a program to create, manipulate, read and write Zip archive files without calling an external utility. This programmatic approach is more robust than other approaches of calling external utilities, as their output is not easily parsable.
The aim of the project is to fix the existing Archive::Zip module. I will use the pyconstruct tool to compare the structure of .zip files produced by Archive::Zip with those produced by other utilities. pyconstruct will be used for the dissection. It is a generic analyser for file formats and protocols based on the concept of defining data structures in a declarative manner, rather than procedural code. Once I build the .zip file dissector, I will be able to compare Archive::Zip's outputs with those of other .zip archivers. Then I will be able to understand what Archive::Zip is doing wrong, and how to improve it.
The Archive::Zip Perl module will not depend on pyconstruct for its operation. pyconstruct will be used only for the comparison of binary .zip files.
Some of the currently outstanding bugs that will be fixed are:
- #22933: Properly extract symbolic links (http://rt.cpan.org/Public/Bug/Display.html?id=22933)
- #19502: Incomplete file (http://rt.cpan.org/Public/Bug/Display.html?id=19502)
Reproducing bugs is the major issue that can occur during the project. If I am not able to reproduce a bug, I will contact the bug reporter and get more details on how the bug had occurred.
In case of a setback, that is, inherent problem in Archive::Zip that cannot be solved, I will be able to deliver a .zip file parser in Perl. This parser will dump verbose information which will enable users to understand why certain .zip files are not fully-portable. This
knowledge will help in creating a new Zip archive module which solves the inherent problems of Archive::Zip Perl module.
The project will take 3 months. I can begin work immediately.
I am doing my final year in Computer Science and Engineering at College of Engineering Chengannur, Kerala, India ( http://cec.ihrd.ac.in ). I am a member of the college website team. At college, I am the FLOSS Cell Chairman and have conducted classes and seminars on Free Software at my college as well as a nearby school. I am an active participant of technical events at college. I program in C/C++, PHP, Visual Basic and build web-sites for fun and profit. It has been a year and a half since I have fully converted to the GNU/Linux Operating System. At one period, I wrote some articles on GNU/Linux (http://slashmedia.wordpress.com). While having neglected doing that recently, I hope to revive that site soon. Currently I am maintaining a personal website at: http://drchost.com/~haggai/.
I have recently become interested in Perl. I have done a Webmin clone in Perl as part of college project. It helped me understand some basic Perl. I use the Vim editor for all programming.
I have the approval of Archive::Zip Perl module maintainers: Adam Kennedy and Shlomi Fish