[Python-checkins] cpython (3.2): Fix zip_import.c's read_directory() to use appropriate types for the values

gregory.p.smith python-checkins at python.org
Tue Jan 31 00:55:40 CET 2012


http://hg.python.org/cpython/rev/c5a09a96f533
changeset:   74690:c5a09a96f533
branch:      3.2
parent:      74685:e858bb04f7e7
user:        Gregory P. Smith <greg at 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


More information about the Python-checkins mailing list