Thomas Klausner | 58fa277 | 2017-12-04 15:16:11 +0100 | [diff] [blame] | 1 | # Soon |
| 2 | |
Thomas Klausner | 58fa277 | 2017-12-04 15:16:11 +0100 | [diff] [blame] | 3 | * 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 Klausner | 58fa277 | 2017-12-04 15:16:11 +0100 | [diff] [blame] | 9 | - replace `make distcheck` |
Dieter Baron | 8302c12 | 2017-12-10 13:53:31 +0100 | [diff] [blame] | 10 | |
Thomas Klausner | 58fa277 | 2017-12-04 15:16:11 +0100 | [diff] [blame] | 11 | * 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 Klausner | 58fa277 | 2017-12-04 15:16:11 +0100 | [diff] [blame] | 24 | * 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 Klausner | e724c51 | 2016-02-17 12:48:50 +0100 | [diff] [blame] | 30 | |
Dieter Baron | 8302c12 | 2017-12-10 13:53:31 +0100 | [diff] [blame] | 31 | ## macOS / iOS framework |
| 32 | |
| 33 | * get cmake to optionally build frameworks |
| 34 | |
Thomas Klausner | e724c51 | 2016-02-17 12:48:50 +0100 | [diff] [blame] | 35 | ## Prefixes |
| 36 | |
| 37 | For example for adding extractors for self-extracting zip archives. |
| 38 | ````c |
| 39 | zip_set_archive_prefix(struct zip *za, const zip_uint8_t *data, zip_uint64_t length); |
| 40 | const zip_uint8_t *zip_get_archive_prefix(struct zip *za, zip_uint64_t *lengthp); |
| 41 | ```` |
| 42 | |
Thomas Klausner | 58fa277 | 2017-12-04 15:16:11 +0100 | [diff] [blame] | 43 | ## Compression |
Dieter Baron | a114fb8 | 2017-03-24 12:09:09 +0100 | [diff] [blame] | 44 | |
Thomas Klausner | cc5b86f | 2017-03-30 15:48:45 +0200 | [diff] [blame] | 45 | * add lzma support |
Dieter Baron | a114fb8 | 2017-03-24 12:09:09 +0100 | [diff] [blame] | 46 | |
Thomas Klausner | 58fa277 | 2017-12-04 15:16:11 +0100 | [diff] [blame] | 47 | ## API Issues |
Thomas Klausner | e724c51 | 2016-02-17 12:48:50 +0100 | [diff] [blame] | 48 | |
| 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 Klausner | 58fa277 | 2017-12-04 15:16:11 +0100 | [diff] [blame] | 56 | ## Features |
Thomas Klausner | e724c51 | 2016-02-17 12:48:50 +0100 | [diff] [blame] | 57 | |
Thomas Klausner | 796c596 | 2016-12-02 15:01:14 +0100 | [diff] [blame] | 58 | * consistently use `_zip_crypto_clear()` for passwords |
Thomas Klausner | cc5b86f | 2017-03-30 15:48:45 +0200 | [diff] [blame] | 59 | * support setting extra fields from `zip_source` |
Thomas Klausner | e724c51 | 2016-02-17 12:48:50 +0100 | [diff] [blame] | 60 | * introduce layers of extra fields: |
| 61 | * original |
Thomas Klausner | cc5b86f | 2017-03-30 15:48:45 +0200 | [diff] [blame] | 62 | * from `zip_source` |
Thomas Klausner | e724c51 | 2016-02-17 12:48:50 +0100 | [diff] [blame] | 63 | * 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 Klausner | e724c51 | 2016-02-17 12:48:50 +0100 | [diff] [blame] | 72 | * add append-only mode writing file to disk incrementally to keep memory usage low |
| 73 | * `zip_file_set_mtime()`: support InfoZIP time stamps |
Thomas Klausner | cc5b86f | 2017-03-30 15:48:45 +0200 | [diff] [blame] | 74 | * `zipcmp`: support comparing more features: |
| 75 | * version needed/made by |
| 76 | * general purpose bit flags |
Thomas Klausner | e724c51 | 2016-02-17 12:48:50 +0100 | [diff] [blame] | 77 | * 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 Klausner | cede37a | 2017-11-13 11:43:21 +0100 | [diff] [blame] | 84 | * add `zip_abort()` to allow aborting `zip_close()` (can be called from progress callback) |
Thomas Klausner | e724c51 | 2016-02-17 12:48:50 +0100 | [diff] [blame] | 85 | * 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 Klausner | 58fa277 | 2017-12-04 15:16:11 +0100 | [diff] [blame] | 96 | ## Bugs |
Thomas Klausner | e724c51 | 2016-02-17 12:48:50 +0100 | [diff] [blame] | 97 | |
| 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 Klausner | e724c51 | 2016-02-17 12:48:50 +0100 | [diff] [blame] | 101 | * 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 Klausner | 58fa277 | 2017-12-04 15:16:11 +0100 | [diff] [blame] | 108 | ## Cleanup |
Thomas Klausner | e724c51 | 2016-02-17 12:48:50 +0100 | [diff] [blame] | 109 | |
Thomas Klausner | 5253ecd | 2017-08-29 10:36:39 +0200 | [diff] [blame] | 110 | * go over cdir parser and rename various offset/size variables to make it clearer |
Thomas Klausner | e724c51 | 2016-02-17 12:48:50 +0100 | [diff] [blame] | 111 | * use bool |
| 112 | * use `ZIP_SOURCE_SUPPORTS_{READABLE,SEEKABLE,WRITABLE}` |
| 113 | * use `zip_source_seek_compute_offset()` |
Thomas Klausner | e724c51 | 2016-02-17 12:48:50 +0100 | [diff] [blame] | 114 | * get rid of `zip_get_{compression,encryption}_implementation()` |
| 115 | * use `zip_*int*_t` internally |
| 116 | |
Thomas Klausner | 58fa277 | 2017-12-04 15:16:11 +0100 | [diff] [blame] | 117 | ## Analysis |
Thomas Klausner | e724c51 | 2016-02-17 12:48:50 +0100 | [diff] [blame] | 118 | |
| 119 | * pass through coverity |
| 120 | |
Thomas Klausner | 58fa277 | 2017-12-04 15:16:11 +0100 | [diff] [blame] | 121 | ## Infrastructure |
Thomas Klausner | e724c51 | 2016-02-17 12:48:50 +0100 | [diff] [blame] | 122 | |
Thomas Klausner | a91897d | 2017-12-06 19:36:34 +0100 | [diff] [blame] | 123 | * rewrite make_zip_errors.sh in cmake |
| 124 | * rewrite make_zip_err_str.sh in cmake |
Thomas Klausner | 58fa277 | 2017-12-04 15:16:11 +0100 | [diff] [blame] | 125 | * configure appveyor for Windows builds of libzip |
Thomas Klausner | e724c51 | 2016-02-17 12:48:50 +0100 | [diff] [blame] | 126 | |
Thomas Klausner | 58fa277 | 2017-12-04 15:16:11 +0100 | [diff] [blame] | 127 | ## Test Case Issues |
Thomas Klausner | e724c51 | 2016-02-17 12:48:50 +0100 | [diff] [blame] | 128 | |
Thomas Klausner | 58fa277 | 2017-12-04 15:16:11 +0100 | [diff] [blame] | 129 | * 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 Klausner | 5253ecd | 2017-08-29 10:36:39 +0200 | [diff] [blame] | 134 | * 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 Klausner | e724c51 | 2016-02-17 12:48:50 +0100 | [diff] [blame] | 136 | * 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 Klausner | 58fa277 | 2017-12-04 15:16:11 +0100 | [diff] [blame] | 190 | ## Unsorted |
Thomas Klausner | e724c51 | 2016-02-17 12:48:50 +0100 | [diff] [blame] | 191 | |
| 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 Klausner | e724c51 | 2016-02-17 12:48:50 +0100 | [diff] [blame] | 195 | * 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 |