Commit ab32066e authored by Gregory P. Smith's avatar Gregory P. Smith

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).
parent 2652d257
...@@ -714,15 +714,16 @@ read_directory(PyObject *archive_obj) ...@@ -714,15 +714,16 @@ read_directory(PyObject *archive_obj)
PyObject *files = NULL; PyObject *files = NULL;
FILE *fp; FILE *fp;
unsigned short flags; unsigned short flags;
long compress, crc, data_size, file_size, file_offset, date, time; short compress, time, date, name_size;
long header_offset, name_size, header_size, header_position; long crc, data_size, file_size, header_size;
Py_ssize_t file_offset, header_position, header_offset;
long i, l, count; long i, l, count;
size_t length; size_t length;
Py_UNICODE path[MAXPATHLEN + 5]; Py_UNICODE path[MAXPATHLEN + 5];
char name[MAXPATHLEN + 5]; char name[MAXPATHLEN + 5];
PyObject *nameobj = NULL; PyObject *nameobj = NULL;
char *p, endof_central_dir[22]; 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; PyObject *pathobj;
const char *charset; const char *charset;
int bootstrap; int bootstrap;
...@@ -832,7 +833,7 @@ read_directory(PyObject *archive_obj) ...@@ -832,7 +833,7 @@ read_directory(PyObject *archive_obj)
pathobj = PyUnicode_FromUnicode(path, Py_UNICODE_strlen(path)); pathobj = PyUnicode_FromUnicode(path, Py_UNICODE_strlen(path));
if (pathobj == NULL) if (pathobj == NULL)
goto error; 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); file_size, file_offset, time, date, crc);
if (t == NULL) if (t == NULL)
goto error; goto error;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment