kopia lustrzana https://github.com/micropython/micropython
py/objstringio.c: Fix segfault in stringio_write.
Fixes issue #10402: printing to io.StringIO subclass leads to seg fault. stringio_write function does not check o_in is type_stringio. This checks for proper type and raises TypeError if it isn't. Signed-off-by: Carlos Gil Gonzalez <carlosgilglez@gmail.com>pull/10417/head
rodzic
699477d12d
commit
89d8f887e0
|
@ -77,6 +77,13 @@ STATIC void stringio_copy_on_write(mp_obj_stringio_t *o) {
|
||||||
|
|
||||||
STATIC mp_uint_t stringio_write(mp_obj_t o_in, const void *buf, mp_uint_t size, int *errcode) {
|
STATIC mp_uint_t stringio_write(mp_obj_t o_in, const void *buf, mp_uint_t size, int *errcode) {
|
||||||
(void)errcode;
|
(void)errcode;
|
||||||
|
|
||||||
|
if (!mp_obj_is_type(o_in, &mp_type_stringio)) {
|
||||||
|
|
||||||
|
if (!mp_obj_is_type(o_in, &mp_type_bytesio)) {
|
||||||
|
mp_raise_TypeError(MP_ERROR_TEXT("expecting a StringIO or BytesIO object"));
|
||||||
|
}
|
||||||
|
}
|
||||||
mp_obj_stringio_t *o = MP_OBJ_TO_PTR(o_in);
|
mp_obj_stringio_t *o = MP_OBJ_TO_PTR(o_in);
|
||||||
check_stringio_is_open(o);
|
check_stringio_is_open(o);
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
import sys
|
||||||
|
|
||||||
|
sys.path[0] = ".frozen" # avoid local dir io import
|
||||||
|
|
||||||
|
import io
|
||||||
|
|
||||||
|
|
||||||
|
class TestStream(io.StringIO):
|
||||||
|
def __init_(self, alloc_size):
|
||||||
|
super().__init__(alloc_size)
|
||||||
|
|
||||||
|
|
||||||
|
class ByteStream(io.BytesIO):
|
||||||
|
def __init_(self, alloc_size):
|
||||||
|
super().__init__(alloc_size)
|
||||||
|
|
||||||
|
|
||||||
|
test_stringio = TestStream(100)
|
||||||
|
|
||||||
|
test_bytesio = ByteStream(100)
|
||||||
|
|
||||||
|
try:
|
||||||
|
print("hello", file=test_stringio)
|
||||||
|
except Exception as e:
|
||||||
|
print(e)
|
||||||
|
|
||||||
|
|
||||||
|
try:
|
||||||
|
print("hello", file=test_bytesio)
|
||||||
|
except Exception as e:
|
||||||
|
print(e)
|
|
@ -0,0 +1,2 @@
|
||||||
|
expecting a StringIO or BytesIO object
|
||||||
|
expecting a StringIO or BytesIO object
|
Ładowanie…
Reference in New Issue