6.8 KiB
Executable File
Soon
-
review guidelines/community standards
- (Linux Foundation Core Infrastructure Initiative Best Practices)[https://bestpractices.coreinfrastructure.org/]
- (Readme Maturity Level)[https://github.com/LappleApple/feedmereadmes/blob/master/README-maturity-model.md]
- (Github Community Profile)[https://github.com/nih-at/libzip/community]
-
test different crypto backends with TravisCI.
-
test for zipcmp reading directory (requires fts)
-
improve man page formatting of tagged lists on webpage (
<dl>) -
test error cases with special source
- tell it which command should fail
- use it both as source for
zip_addandzip_open_from_source ziptool_regress:-e error_spec: source containing zip fails depending onerror_specadd_with_error name content error_spec: add content to archive, where source fails depending onerror_specadd_file_with_error name file_to_add offset len error_spec: add file to archive, len bytes starting from offset, where source fails depending onerror_spec
error_spec:- source command that fails
- error code that source returns
- conditions that must be met for error to trigger
- Nth call of command
- read/write: total byte count so far
- state of source (opened, EOF reached, ...)
Later
macOS / iOS framework
- get cmake to optionally build frameworks
Prefixes
For example for adding extractors for self-extracting zip archives.
zip_set_archive_prefix(struct zip *za, const zip_uint8_t *data, zip_uint64_t length);
const zip_uint8_t *zip_get_archive_prefix(struct zip *za, zip_uint64_t *lengthp);
Compression
- add lzma support
API Issues
zip_get_archive_commenthasint *lenpargument. Cleaner would bezip_uint32_t *. rename and fix. which other functions for naming consistency?- rename remaining
zip_XXX_{file,archive}_*tozip_{file,archive}_XXX_*? - compression/crypt implementations: how to set error code on failure
- compression/crypt error messages a la
ZIP_ER_ZLIB(no detailed info passing)
Features
- add seek support for AES-encrypted files
- consistently use
_zip_crypto_clear()for passwords - support setting extra fields from
zip_source- introduce layers of extra fields:
- original
- from
zip_source - manually set
- when querying extra fields, search all of them in reverse order
- add whiteout (deleted) flag
- allow invalid data flag, used when computing extra field size before writing data
- new command
ZIP_SOURCE_EXTRA_FIELDS - no support for multiple copies of same extra field
- introduce layers of extra fields:
- delete all extra fields during
zip_replace() - function to copy file from one archive to another
- set
O_CLOEXECflag after fopen and mkstemp zip_file_set_mtime(): support InfoZIP time stamps- support streaming output (creating new archive to e.g. stdout)
- add function to read/set ASCII file flag
zip_commit()(to finish changes without closing archive)- add custom compression function support
zip_source_zip(): allow rewinding- add
zip_abort()to allow abortingzip_close()(can be called from progress callback) zipcmp: add option for file content comparisonzipcmp: add more paranoid checks:- external attributes/opsys
- last_mod
- version needed/made by
- general purpose bit flags
- add more consistency checks:
- for stored files, test compressed = uncompressed
- data descriptor
- local headers come before central dir
- support for old compression methods?
Bugs
- support InfoZIP encryption header extension (copy data descriptor for encrypted files)
- ensure that nentries is small enough not to cause overflow (size_t for entry, uint64 for CD on disk)
- check for limits imposed by format (central dir size, file size, extra fields, ...)
_zip_u2d_time(): handlelocaltime(3)failure- POSIX:
zip_open(): check whether file can be created and fail if not - fix inconsistent usage of valid flags (not checked in many places)
cdr == NULL->ER_NOENTvs.idx > cdir->nentry->ER_INVALinconsistent (still there?)
Cleanup
- drop _LIBZIP suffixes in cmake defines (no longer needed since they no longer appear in zipconf.h)
- go over cdir parser and rename various offset/size variables to make it clearer
- use bool
- use
ZIP_SOURCE_SUPPORTS_{READABLE,SEEKABLE,WRITABLE} - use
zip_source_seek_compute_offset() - get rid of
zip_get_{compression,encryption}_implementation() - use
zip_*int*_tinternally
Infrastructure
- rewrite
make_zip_errors.shin cmake - rewrite
make_zip_err_str.shin cmake - configure appveyor for Windows builds of libzip
Test Case Issues
-
add test case for clone with files > 4k
-
consider testing for malloc/realloc failures
-
Winzip AES support
- test cases decryption: <=20, >20, stat for both
- test cases encryption: no password, default password, file-specific password, 128/192/256, <=20, >20
- support testing on macOS
-
add test cases for lots of files (including too many)
-
add test cases for holes (between files, between files and cdir, between cdir and eocd, + zip64 where appropriate)
-
unchange on added file
-
test seek in
zip_source_crc() -
test cases for
set_extra*,delete_extra*,*extra_field* -
test cases for in memory archives
- add
- delete
- delete all
- modify
-
use gcov output to increase test coverage
-
add test case to change values for newly added files (name, compression method, comment, mtime, . . .)
-
zip_open()file less thanEOCDLENbytes long -
test calls against old API
-
run regression tests also from CMake framework
-
rename file to dir/ and vice versa (fails)
-
fix comment test to be newline insensitive
-
check if http://bugs.python.org/issue20078 provides ideas for new tests
-
(
add,replace)- add to empty zip
- add to existing zip
- add w/ existing file name [E]
- replace ok
- replace w/ illegal index [E]
- replace w/ deleted name [E]
- unchange added/replaced file
-
(
close)- copy zip file
- open copy
- rename, delete, replace, add w/ new name, add w/ deleted name
- close
- zipcmp copy expected
- remove copy
-
(`error_get)
-
(
error_get_sys_type) -
(
error_to_str) -
(
extra_fields) -
(
file_error_get) -
(
file_strerror) -
(
replace) -
(
source_buffer) -
(
source_file) -
(
source_filep) -
(
source_free) -
(
source_function) -
(
source_zip) -
(
strerror) -
(
unchange) -
(
unchange_all) -
open(ZIP_RDONLY) -
I/O abstraction layer
zip_open_from_source
-
read two zip entries interleaved
Unsorted
-
zip_source_file(): don't allow write if start/len specify a part of the file -
script to check if all exported symbols are marked with
ZIP_EXTERN, add to make distcheck -
document:
zip_source_write(): length can't be >ZIP_INT64_MAX -
document:
ZIP_SOURCE_CLOSEimplementation can't return error -
keep error codes in man pages in sync
-
document error codes in new man pages