Skip to content

Commit 322cfd1

Browse files
Return a memoryview from _imp.find_frozen().
1 parent 79c1035 commit 322cfd1

File tree

1 file changed

+17
-7
lines changed

1 file changed

+17
-7
lines changed

Python/import.c

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2079,7 +2079,8 @@ _imp_find_frozen_impl(PyObject *module, PyObject *name)
20792079
return NULL;
20802080
}
20812081

2082-
PyObject *data = PyBytes_FromStringAndSize(info.data, info.size);
2082+
PyObject *data = PyMemoryView_FromMemory((char *)info.data, info.size,
2083+
PyBUF_READ);
20832084
if (data == NULL) {
20842085
return NULL;
20852086
}
@@ -2116,15 +2117,15 @@ _imp_get_frozen_object_impl(PyObject *module, PyObject *name,
21162117
PyObject *dataobj)
21172118
/*[clinic end generated code: output=54368a673a35e745 input=034bdb88f6460b7b]*/
21182119
{
2119-
struct frozen_info info;
2120+
struct frozen_info info = {};
21202121
if (PyBytes_Check(dataobj)) {
2121-
info.nameobj = name;
21222122
info.data = PyBytes_AS_STRING(dataobj);
21232123
info.size = PyBytes_Size(dataobj);
2124-
if (info.size == 0) {
2125-
set_frozen_error(FROZEN_INVALID, name);
2126-
return NULL;
2127-
}
2124+
}
2125+
else if (PyMemoryView_Check(dataobj)) {
2126+
Py_buffer *buf = PyMemoryView_GET_BUFFER(dataobj);
2127+
info.data = (const char *)buf->buf;
2128+
info.size = buf->len;
21282129
}
21292130
else if (dataobj != Py_None) {
21302131
_PyArg_BadArgument("get_frozen_object", "argument 2", "bytes", dataobj);
@@ -2137,6 +2138,15 @@ _imp_get_frozen_object_impl(PyObject *module, PyObject *name,
21372138
return NULL;
21382139
}
21392140
}
2141+
2142+
if (info.nameobj == NULL) {
2143+
info.nameobj = name;
2144+
}
2145+
if (info.size == 0) {
2146+
set_frozen_error(FROZEN_INVALID, name);
2147+
return NULL;
2148+
}
2149+
21402150
return unmarshal_frozen_code(&info);
21412151
}
21422152

0 commit comments

Comments
 (0)