cpython (3.2): Fix zip_import.c's read_directory() to use appropriate types for the values
http://hg.python.org/cpython/rev/c5a09a96f533 changeset: 74690:c5a09a96f533 branch: 3.2 parent: 74685:e858bb04f7e7 user: Gregory P. Smith <greg@krypto.org> date: Mon Jan 30 15:17:33 2012 -0800 summary: Fix zip_import.c's read_directory() to use appropriate types for the values being read from the header vs the values being used by fseek and ftell (Py_ssize_t for those) and how they are computed. Py_ssize_t is used for actual file offsets so that files greater than 2gigs could be supported. Updates the Py_BuildValue format string to match (including several existing wrong 'i's that should have been 'l's). files: Modules/zipimport.c | 9 +++++---- 1 files changed, 5 insertions(+), 4 deletions(-) diff --git a/Modules/zipimport.c b/Modules/zipimport.c --- a/Modules/zipimport.c +++ b/Modules/zipimport.c @@ -714,15 +714,16 @@ PyObject *files = NULL; FILE *fp; unsigned short flags; - long compress, crc, data_size, file_size, file_offset, date, time; - long header_offset, name_size, header_size, header_position; + short compress, time, date, name_size; + long crc, data_size, file_size, header_size; + Py_ssize_t file_offset, header_position, header_offset; long i, l, count; size_t length; Py_UNICODE path[MAXPATHLEN + 5]; char name[MAXPATHLEN + 5]; PyObject *nameobj = NULL; char *p, endof_central_dir[22]; - long arc_offset; /* offset from beginning of file to start of zip-archive */ + Py_ssize_t arc_offset; /* Absolute offset to start of the zip-archive. */ PyObject *pathobj; const char *charset; int bootstrap; @@ -832,7 +833,7 @@ pathobj = PyUnicode_FromUnicode(path, Py_UNICODE_strlen(path)); if (pathobj == NULL) goto error; - t = Py_BuildValue("Niiiiiii", pathobj, compress, data_size, + t = Py_BuildValue("Nhllnhhl", pathobj, compress, data_size, file_size, file_offset, time, date, crc); if (t == NULL) goto error; -- Repository URL: http://hg.python.org/cpython
participants (1)
-
gregory.p.smith