]> granicus.if.org Git - python/commitdiff
SF patch# 1766592 by Paul Colomiets.
authorGuido van Rossum <guido@python.org>
Fri, 3 Aug 2007 18:40:49 +0000 (18:40 +0000)
committerGuido van Rossum <guido@python.org>
Fri, 3 Aug 2007 18:40:49 +0000 (18:40 +0000)
Fix test_zipimport.

Lib/doctest.py
Lib/test/test_zipimport.py
Modules/zipimport.c
Python/import.c

index 3f139fc55538357b5a94ffcd3dc00017d48232ee..bc30a1a14aeca7647612b2f39e97902731c8ecf6 100644 (file)
@@ -209,7 +209,7 @@ def _load_testfile(filename, package, module_relative):
         filename = _module_relative_path(package, filename)
         if hasattr(package, '__loader__'):
             if hasattr(package.__loader__, 'get_data'):
-                return package.__loader__.get_data(filename), filename
+                return package.__loader__.get_data(filename).decode('utf-8'), filename
     return open(filename, encoding="utf-8").read(), filename
 
 def _indent(s, indent=4):
index 8daac4b49921e6450a6a189eac9f183f6ec5ad1c..bae2172d9c7ab6bda9a888d5d5651a0ee7cc5126 100644 (file)
@@ -153,18 +153,16 @@ class UncompressedZipImportTestCase(ImportHooksBaseTestCase):
 
     def testBadMagic(self):
         # make pyc magic word invalid, forcing loading from .py
-        m0 = ord(test_pyc[0])
-        m0 ^= 0x04  # flip an arbitrary bit
-        badmagic_pyc = chr(m0) + test_pyc[1:]
+        badmagic_pyc = bytes(test_pyc)
+        badmagic_pyc[0] ^= 0x04  # flip an arbitrary bit
         files = {TESTMOD + ".py": (NOW, test_src),
                  TESTMOD + pyc_ext: (NOW, badmagic_pyc)}
         self.doTest(".py", files, TESTMOD)
 
     def testBadMagic2(self):
         # make pyc magic word invalid, causing an ImportError
-        m0 = ord(test_pyc[0])
-        m0 ^= 0x04  # flip an arbitrary bit
-        badmagic_pyc = chr(m0) + test_pyc[1:]
+        badmagic_pyc = bytes(test_pyc)
+        badmagic_pyc[0] ^= 0x04  # flip an arbitrary bit
         files = {TESTMOD + pyc_ext: (NOW, badmagic_pyc)}
         try:
             self.doTest(".py", files, TESTMOD)
@@ -174,10 +172,9 @@ class UncompressedZipImportTestCase(ImportHooksBaseTestCase):
             self.fail("expected ImportError; import from bad pyc")
 
     def testBadMTime(self):
-        t3 = ord(test_pyc[7])
-        t3 ^= 0x02  # flip the second bit -- not the first as that one
-                    # isn't stored in the .py's mtime in the zip archive.
-        badtime_pyc = test_pyc[:7] + chr(t3) + test_pyc[8:]
+        badtime_pyc = bytes(test_pyc)
+        badtime_pyc[7] ^= 0x02  # flip the second bit -- not the first as that one
+                                # isn't stored in the .py's mtime in the zip archive.
         files = {TESTMOD + ".py": (NOW, test_src),
                  TESTMOD + pyc_ext: (NOW, badtime_pyc)}
         self.doTest(".py", files, TESTMOD)
@@ -232,7 +229,7 @@ class UncompressedZipImportTestCase(ImportHooksBaseTestCase):
         z.compression = self.compression
         try:
             name = "testdata.dat"
-            data = "".join([chr(x) for x in range(256)]) * 500
+            data = bytes(x for x in range(256))
             z.writestr(name, data)
             z.close()
             zi = zipimport.zipimporter(TEMP_ZIP)
@@ -246,7 +243,7 @@ class UncompressedZipImportTestCase(ImportHooksBaseTestCase):
         src = """if 1:  # indent hack
         def get_file():
             return __file__
-        if __loader__.get_data("some.data") != "some data":
+        if __loader__.get_data("some.data") != b"some data":
             raise AssertionError, "bad data"\n"""
         pyc = make_pyc(compile(src, "<???>", "exec"), NOW)
         files = {TESTMOD + pyc_ext: (NOW, pyc),
index bf913f3d7fbbf51d4b8f021faae53bef1bcb2a43..fc93011eb79ff8ab2ec9db18db1932e15319744c 100644 (file)
@@ -475,8 +475,12 @@ zipimporter_get_source(PyObject *obj, PyObject *args)
                strcpy(path + len, ".py");
 
        toc_entry = PyDict_GetItemString(self->files, path);
-       if (toc_entry != NULL)
-               return get_data(PyString_AsString(self->archive), toc_entry);
+       if (toc_entry != NULL) {
+               PyObject *bytes = get_data(PyString_AsString(self->archive), toc_entry);
+               PyObject *res = PyUnicode_FromString(PyBytes_AsString(bytes));
+               Py_XDECREF(bytes);
+               return res;
+       }
 
        /* we have the module, but no source */
        Py_INCREF(Py_None);
@@ -857,8 +861,10 @@ get_data(char *archive, PyObject *toc_entry)
        }
        buf[data_size] = '\0';
 
-       if (compress == 0)  /* data is not compressed */
+       if (compress == 0) {  /* data is not compressed */
+               raw_data = PyBytes_FromStringAndSize(buf, data_size);
                return raw_data;
+       }
 
        /* Decompress with zlib */
        decompress = get_decompress_func();
@@ -896,8 +902,8 @@ static PyObject *
 unmarshal_code(char *pathname, PyObject *data, time_t mtime)
 {
        PyObject *code;
-       char *buf = PyString_AsString(data);
-       Py_ssize_t size = PyString_Size(data);
+       char *buf = PyBytes_AsString(data);
+       Py_ssize_t size = PyBytes_Size(data);
 
        if (size <= 9) {
                PyErr_SetString(ZipImportError,
@@ -942,14 +948,16 @@ unmarshal_code(char *pathname, PyObject *data, time_t mtime)
 static PyObject *
 normalize_line_endings(PyObject *source)
 {
-       char *buf, *q, *p = PyString_AsString(source);
+       char *buf, *q, *p = PyBytes_AsString(source);
        PyObject *fixed_source;
+       int len = 0;
 
-       if (!p)
-               return NULL;
+       if (!p) {
+               return PyBytes_FromStringAndSize("\n\0", 2);
+       }
 
        /* one char extra for trailing \n and one for terminating \0 */
-       buf = (char *)PyMem_Malloc(PyString_Size(source) + 2);
+       buf = (char *)PyMem_Malloc(PyBytes_Size(source) + 2);
        if (buf == NULL) {
                PyErr_SetString(PyExc_MemoryError,
                                "zipimport: no memory to allocate "
@@ -965,10 +973,11 @@ normalize_line_endings(PyObject *source)
                }
                else
                        *q++ = *p;
+               len++;
        }
        *q++ = '\n';  /* add trailing \n */
        *q = '\0';
-       fixed_source = PyString_FromString(buf);
+       fixed_source = PyBytes_FromStringAndSize(buf, len + 2);
        PyMem_Free(buf);
        return fixed_source;
 }
@@ -984,7 +993,7 @@ compile_source(char *pathname, PyObject *source)
        if (fixed_source == NULL)
                return NULL;
 
-       code = Py_CompileString(PyString_AsString(fixed_source), pathname,
+       code = Py_CompileString(PyBytes_AsString(fixed_source), pathname,
                                Py_file_input);
        Py_DECREF(fixed_source);
        return code;
index 25c768fea45cd7f4a04e9ca8417aa3bc53266741..bb40b685a5735e288b59b50ebf5ec21d016535cb 100644 (file)
@@ -2620,7 +2620,7 @@ imp_get_magic(PyObject *self, PyObject *noargs)
        buf[2] = (char) ((pyc_magic >> 16) & 0xff);
        buf[3] = (char) ((pyc_magic >> 24) & 0xff);
 
-       return PyString_FromStringAndSize(buf, 4);
+       return PyBytes_FromStringAndSize(buf, 4);
 }
 
 static PyObject *