]> granicus.if.org Git - python/commitdiff
Fix zipimport.c's read_directory() to use appropriate types for the values
authorGregory P. Smith <greg@krypto.org>
Mon, 30 Jan 2012 23:55:29 +0000 (15:55 -0800)
committerGregory P. Smith <greg@krypto.org>
Mon, 30 Jan 2012 23:55:29 +0000 (15:55 -0800)
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).

1  2 
Modules/zipimport.c

index 68929ba8d4f1c551af385f2376638bdf474d9b30,d8c3d8ab29967d4c66836e49684adf1250650de9..f822f92d85779e8a28afc477390485eb338ad2b5
@@@ -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;
  
                      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;