From: Gregory P. Smith Date: Mon, 30 Jan 2012 23:55:29 +0000 (-0800) Subject: Fix zipimport.c's read_directory() to use appropriate types for the values X-Git-Tag: v3.3.0a1~273^2~2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=cc6abd56b8197bac713ea8d70ac621e78f5aadd8;p=python Fix zipimport.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). Updates the Py_BuildValue format string to match (including several existing wrong 'i's that should have been 'l's). --- cc6abd56b8197bac713ea8d70ac621e78f5aadd8 diff --cc Modules/zipimport.c index 68929ba8d4,d8c3d8ab29..f822f92d85 --- a/Modules/zipimport.c +++ b/Modules/zipimport.c @@@ -728,15 -713,18 +728,16 @@@ read_directory(PyObject *archive 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]; + long l, count; + Py_ssize_t i; 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; + PyObject *path; const char *charset; int bootstrap; @@@ -832,10 -828,12 +833,10 @@@ PY_MAJOR_VERSION, PY_MINOR_VERSION); goto error; } - Py_UNICODE_strncpy(path + length + 1, PyUnicode_AS_UNICODE(nameobj), MAXPATHLEN - length - 1); - - pathobj = PyUnicode_FromUnicode(path, Py_UNICODE_strlen(path)); - if (pathobj == NULL) + path = PyUnicode_FromFormat("%U%c%U", archive, SEP, nameobj); + if (path == NULL) goto error; - t = Py_BuildValue("Niiiiiii", path, compress, data_size, - t = Py_BuildValue("Nhllnhhl", pathobj, compress, data_size, ++ t = Py_BuildValue("Nhllnhhl", path, compress, data_size, file_size, file_offset, time, date, crc); if (t == NULL) goto error;