diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2016-10-04 15:17:08 (GMT) |
---|---|---|
committer | Serhiy Storchaka <storchaka@gmail.com> | 2016-10-04 15:17:08 (GMT) |
commit | ab8b75a56e771eb410f74a8432bc88e5937398cf (patch) | |
tree | e73545300807fffbe09c968fa02882d44736ac0b /Objects/codeobject.c | |
parent | 317d350f9c535fff36f15e4d3b8adb3be222eebd (diff) | |
download | cpython-ab8b75a56e771eb410f74a8432bc88e5937398cf.zip cpython-ab8b75a56e771eb410f74a8432bc88e5937398cf.tar.gz cpython-ab8b75a56e771eb410f74a8432bc88e5937398cf.tar.bz2 |
Issue #28350: String constants with null character no longer interned.
Diffstat (limited to 'Objects/codeobject.c')
-rw-r--r-- | Objects/codeobject.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/Objects/codeobject.c b/Objects/codeobject.c index 827fafa..b7c4059 100644 --- a/Objects/codeobject.c +++ b/Objects/codeobject.c @@ -8,17 +8,20 @@ /* all_name_chars(s): true iff all chars in s are valid NAME_CHARS */ static int -all_name_chars(unsigned char *s) +all_name_chars(PyObject *o) { static char ok_name_char[256]; - static unsigned char *name_chars = (unsigned char *)NAME_CHARS; + static const unsigned char *name_chars = (unsigned char *)NAME_CHARS; + const unsigned char *s, *e; if (ok_name_char[*name_chars] == 0) { - unsigned char *p; + const unsigned char *p; for (p = name_chars; *p; p++) ok_name_char[*p] = 1; } - while (*s) { + s = (unsigned char *)PyString_AS_STRING(o); + e = s + PyString_GET_SIZE(o); + while (s != e) { if (ok_name_char[*s++] == 0) return 0; } @@ -49,7 +52,7 @@ intern_string_constants(PyObject *tuple) for (i = PyTuple_GET_SIZE(tuple); --i >= 0; ) { PyObject *v = PyTuple_GET_ITEM(tuple, i); if (PyString_CheckExact(v)) { - if (all_name_chars((unsigned char *)PyString_AS_STRING(v))) { + if (all_name_chars(v)) { PyObject *w = v; PyString_InternInPlace(&v); if (w != v) { |