From 4c81ba8015238a343593468aa5173440fd392e32 Mon Sep 17 00:00:00 2001 From: Damien George Date: Tue, 13 Jan 2015 16:21:23 +0000 Subject: py: Never intern data of large string/bytes object; add relevant tests. Previously to this patch all constant string/bytes objects were interned by the compiler, and this lead to crashes when the qstr was too long (noticeable now that qstr length storage defaults to 1 byte). With this patch, long string/bytes objects are never interned, and are referenced directly as constant objects within generated code using load_const_obj. --- py/qstr.c | 1 + 1 file changed, 1 insertion(+) (limited to 'py/qstr.c') diff --git a/py/qstr.c b/py/qstr.c index c244738a5e..2553872b16 100644 --- a/py/qstr.c +++ b/py/qstr.c @@ -148,6 +148,7 @@ qstr qstr_from_str(const char *str) { } qstr qstr_from_strn(const char *str, mp_uint_t len) { + assert(len < (1 << (8 * MICROPY_QSTR_BYTES_IN_LEN))); qstr q = qstr_find_strn(str, len); if (q == 0) { mp_uint_t hash = qstr_compute_hash((const byte*)str, len); -- cgit v1.2.3