blob: 939879bc570ea4a242d7474742204fc77a7fe8d8 [file] [log] [blame] [view]
Thomas Klausner58fa2772017-12-04 15:16:11 +01001# Soon
2
Thomas Klausner58fa2772017-12-04 15:16:11 +01003* review guidelines/community standards
4 - (Linux Foundation Core Infrastructure Initiative Best Practices)[https://bestpractices.coreinfrastructure.org/]
5 - (Readme Maturity Level)[https://github.com/LappleApple/feedmereadmes/blob/master/README-maturity-model.md]
6 - (Github Community Profile)[https://github.com/nih-at/libzip/community]
7
8* migration to CMake
Thomas Klausner58fa2772017-12-04 15:16:11 +01009 - replace `make distcheck`
Dieter Baron8302c122017-12-10 13:53:31 +010010
Thomas Klausner58fa2772017-12-04 15:16:11 +010011* randomness test: replace `zip_random()` instead of `open()`
12
13* run Coverity tests automatically via github/travis
14
15* switch to newer fcrypt sources, see https://github.com/BrianGladman/AES/issues/19
16
17* add HISTORY section to man pages (semi-automatically)
18 - check out `zip.h` from different releases
19 - compare signatures
20 - create HISTORY sections
21
22* improve man page formatting of tagged lists on webpage (`<dl>`)
23
Thomas Klausner58fa2772017-12-04 15:16:11 +010024* test error cases with special source
25 - tell it which command should fail
26 - use it both as source for `zip_add` and `zip_open_from_source`
27
28
29# Later
Thomas Klausnere724c512016-02-17 12:48:50 +010030
Dieter Baron8302c122017-12-10 13:53:31 +010031## macOS / iOS framework
32
33* get cmake to optionally build frameworks
34
Thomas Klausnere724c512016-02-17 12:48:50 +010035## Prefixes
36
37For example for adding extractors for self-extracting zip archives.
38````c
39zip_set_archive_prefix(struct zip *za, const zip_uint8_t *data, zip_uint64_t length);
40const zip_uint8_t *zip_get_archive_prefix(struct zip *za, zip_uint64_t *lengthp);
41````
42
Thomas Klausner58fa2772017-12-04 15:16:11 +010043## Compression
Dieter Barona114fb82017-03-24 12:09:09 +010044
Thomas Klausnercc5b86f2017-03-30 15:48:45 +020045* add lzma support
Dieter Barona114fb82017-03-24 12:09:09 +010046
Thomas Klausner58fa2772017-12-04 15:16:11 +010047## API Issues
Thomas Klausnere724c512016-02-17 12:48:50 +010048
49* `zip_get_archive_comment` has `int *lenp` argument. Cleaner would be `zip_uint32_t *`.
50 rename and fix. which other functions for naming consistency?
51* rename remaining `zip_XXX_{file,archive}_*` to `zip_{file,archive}_XXX_*`?
52* compression/crypt implementations: how to set error code on failure
53* compression/crypt error messages a la `ZIP_ER_ZLIB` (no detailed info passing)
54* check arguments for every entry point into libzip
55
Thomas Klausner58fa2772017-12-04 15:16:11 +010056## Features
Thomas Klausnere724c512016-02-17 12:48:50 +010057
Thomas Klausner796c5962016-12-02 15:01:14 +010058* consistently use `_zip_crypto_clear()` for passwords
Thomas Klausnercc5b86f2017-03-30 15:48:45 +020059* support setting extra fields from `zip_source`
Thomas Klausnere724c512016-02-17 12:48:50 +010060 * introduce layers of extra fields:
61 * original
Thomas Klausnercc5b86f2017-03-30 15:48:45 +020062 * from `zip_source`
Thomas Klausnere724c512016-02-17 12:48:50 +010063 * manually set
64 * when querying extra fields, search all of them in reverse order
65 * add whiteout (deleted) flag
66 * allow invalid data flag, used when computing extra field size before writing data
67 * new command `ZIP_SOURCE_EXTRA_FIELDS`
68 * no support for multiple copies of same extra field
69* delete all extra fields during `zip_replace()`
70* function to copy file from one archive to another
71* set `O_CLOEXEC` flag after fopen and mkstemp
Thomas Klausnere724c512016-02-17 12:48:50 +010072* add append-only mode writing file to disk incrementally to keep memory usage low
73* `zip_file_set_mtime()`: support InfoZIP time stamps
Thomas Klausnercc5b86f2017-03-30 15:48:45 +020074* `zipcmp`: support comparing more features:
75 * version needed/made by
76 * general purpose bit flags
Thomas Klausnere724c512016-02-17 12:48:50 +010077* support streaming output (creating new archive to e.g. stdout)
78* add functions to:
79 * read/set ASCII file flag? (more general options?)
80* `zip_commit()` (to finish changes without closing archive)
81* add custom compression function support
82* `zip_fseek()`
83* `zip_source_zip()`: allow rewinding
Thomas Klausnercede37a2017-11-13 11:43:21 +010084* add `zip_abort()` to allow aborting `zip_close()` (can be called from progress callback)
Thomas Klausnere724c512016-02-17 12:48:50 +010085* zipcmp: add option for file content comparison
86* zipcmp: compare bit flags if paranoid
87* zipcmp: compare external attributes/opsys if paranoid
88* zipcmp: compare last_mod if paranoid (or with separate flag?)
89* consistency
90 . for stored files, test compressed = uncompressed
91 . data descriptor
92 . local headers come before central dir
93
94* support for old compression methods?????
95
Thomas Klausner58fa2772017-12-04 15:16:11 +010096## Bugs
Thomas Klausnere724c512016-02-17 12:48:50 +010097
98* support InfoZIP encryption header extension (copy data descriptor for encrypted files)
99* ensure that nentries is small enough not to cause overflow (size_t for entry, uint64 for CD on disk)
100* fix OpenSUSE i686 regression failures
Thomas Klausnere724c512016-02-17 12:48:50 +0100101* check for limits imposed by format (central dir size, file size, extra fields, ...)
102* `_zip_u2d_time()`: handle `localtime(3)` failure
103* POSIX: `zip_open()`: check whether file can be created and fail if not
104* fix inconsistent usage of valid flags (not checked in many places)
105* `cdr == NULL` -> `ER_NOENT` vs. `idx > cdir->nentry` -> `ER_INVAL` inconsistent (still there?)
106
107
Thomas Klausner58fa2772017-12-04 15:16:11 +0100108## Cleanup
Thomas Klausnere724c512016-02-17 12:48:50 +0100109
Thomas Klausner5253ecd2017-08-29 10:36:39 +0200110* go over cdir parser and rename various offset/size variables to make it clearer
Thomas Klausnere724c512016-02-17 12:48:50 +0100111* use bool
112* use `ZIP_SOURCE_SUPPORTS_{READABLE,SEEKABLE,WRITABLE}`
113* use `zip_source_seek_compute_offset()`
Thomas Klausnere724c512016-02-17 12:48:50 +0100114* get rid of `zip_get_{compression,encryption}_implementation()`
115* use `zip_*int*_t` internally
116
Thomas Klausner58fa2772017-12-04 15:16:11 +0100117## Analysis
Thomas Klausnere724c512016-02-17 12:48:50 +0100118
119* pass through coverity
120
Thomas Klausner58fa2772017-12-04 15:16:11 +0100121## Infrastructure
Thomas Klausnere724c512016-02-17 12:48:50 +0100122
Thomas Klausnera91897d2017-12-06 19:36:34 +0100123* rewrite make_zip_errors.sh in cmake
124* rewrite make_zip_err_str.sh in cmake
Thomas Klausner58fa2772017-12-04 15:16:11 +0100125* configure appveyor for Windows builds of libzip
Thomas Klausnere724c512016-02-17 12:48:50 +0100126
Thomas Klausner58fa2772017-12-04 15:16:11 +0100127## Test Case Issues
Thomas Klausnere724c512016-02-17 12:48:50 +0100128
Thomas Klausner58fa2772017-12-04 15:16:11 +0100129* consider testing for malloc/realloc failures (see `ckmame/regress/malloc.c`)
130* Winzip AES support
131 * test cases decryption: <=20, >20, stat for both
132 * test cases encryption: no password, default password, file-specific password, 128/192/256, <=20, >20
133 * support testing on macOS
Thomas Klausner5253ecd2017-08-29 10:36:39 +0200134* add test cases for lots of files (including too many)
135* add test cases for holes (between files, between files and cdir, between cdir and eocd, + zip64 where appropriate)
Thomas Klausnere724c512016-02-17 12:48:50 +0100136* unchange on added file
137* test seek in `zip_source_crc()`
138* test cases for `set_extra*`, `delete_extra*`, `*extra_field*`
139* test cases for in memory archives
140 * add
141 * delete
142 * delete all
143 * modify
144* use gcov output to increase test coverage
145* merge most tools into ziptool
146* add test case to change values for newly added files (name, compression method, comment, mtime, . . .)
147* `zip_open()` file less than `EOCDLEN` bytes long
148* test calls against old API
149* run regression tests also from CMake framework
150* rename file to dir/ and vice versa (fails)
151* fix comment test to be newline insensitive
152* check if http://bugs.python.org/issue20078 provides ideas for new tests
153
154* (add, replace)
155 * add to empty zip
156 * add to existing zip
157 * add w/ existing file name [E]
158 * replace ok
159 * replace w/ illegal index [E]
160 * replace w/ deleted name [E]
161 * unchange added/replaced file
162* (close)
163 * copy zip file
164 * open copy
165 * rename, delete, replace, add w/ new name, add w/ deleted name
166 * close
167 * zipcmp copy expected
168 * remove copy
169* (error_get)
170* (error_get_sys_type)
171* (error_to_str)
172* (extra_fields)
173* (file_error_get)
174* (file_strerror)
175* (replace)
176* (source_buffer)
177* (source_file)
178* (source_filep)
179* (source_free)
180* (source_function)
181* (source_zip)
182* (strerror)
183* (unchange)
184* (unchange_all)
185* open(ZIP_RDONLY)
186* I/O abstraction layer
187 * zip_open_from_source
188* read two zip entries interleaved
189
Thomas Klausner58fa2772017-12-04 15:16:11 +0100190## Unsorted
Thomas Klausnere724c512016-02-17 12:48:50 +0100191
192* `zip_source_file()`: don't allow write if start/len specify a part of the file
193* script to check if all exported symbols are marked with `ZIP_EXTERN`, add to make distcheck
194
Thomas Klausnere724c512016-02-17 12:48:50 +0100195* document: `zip_source_write()`: length can't be > `ZIP_INT64_MAX`
196* document: `ZIP_SOURCE_CLOSE` implementation can't return error
197* keep error codes in man pages in sync
198* document error codes in new man pages