diff options
author | Guido van Rossum <guido@python.org> | 2007-08-03 18:40:49 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 2007-08-03 18:40:49 (GMT) |
commit | ad8d30092ccebad0f940fe0ed3ff25a18c25dddf (patch) | |
tree | 368f9ee7089ab4932a273b56e8e8de9bf502afab | |
parent | 6afaeb757af0dbd8508a0f2352ade61e41bec84c (diff) | |
download | cpython-ad8d30092ccebad0f940fe0ed3ff25a18c25dddf.zip cpython-ad8d30092ccebad0f940fe0ed3ff25a18c25dddf.tar.gz cpython-ad8d30092ccebad0f940fe0ed3ff25a18c25dddf.tar.bz2 |
SF patch# 1766592 by Paul Colomiets.
Fix test_zipimport.
-rw-r--r-- | Lib/doctest.py | 2 | ||||
-rw-r--r-- | Lib/test/test_zipimport.py | 21 | ||||
-rw-r--r-- | Modules/zipimport.c | 31 | ||||
-rw-r--r-- | Python/import.c | 2 |
4 files changed, 31 insertions, 25 deletions
diff --git a/Lib/doctest.py b/Lib/doctest.py index 3f139fc..bc30a1a 100644 --- a/Lib/doctest.py +++ b/Lib/doctest.py @@ -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): diff --git a/Lib/test/test_zipimport.py b/Lib/test/test_zipimport.py index 8daac4b..bae2172 100644 --- a/Lib/test/test_zipimport.py +++ b/Lib/test/test_zipimport.py @@ -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), diff --git a/Modules/zipimport.c b/Modules/zipimport.c index bf913f3..fc93011 100644 --- a/Modules/zipimport.c +++ b/Modules/zipimport.c @@ -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; diff --git a/Python/import.c b/Python/import.c index 25c768f..bb40b68 100644 --- a/Python/import.c +++ b/Python/import.c @@ -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 * |