diff Python/symtable.c @ 80141:6964a9b6c1ea 3.3

check return value of _PyUnicode_AsString
author Benjamin Peterson <benjamin@python.org>
date Wed, 31 Oct 2012 19:01:42 -0400
parents 5b64fefbc16b
children ab02cd145f56 fbfaef0a9c00
line wrap: on
line diff
--- a/Python/symtable.c	Wed Oct 31 14:22:25 2012 -0400
+++ b/Python/symtable.c	Wed Oct 31 19:01:42 2012 -0400
@@ -1202,12 +1202,14 @@
         asdl_seq *seq = s->v.Global.names;
         for (i = 0; i < asdl_seq_LEN(seq); i++) {
             identifier name = (identifier)asdl_seq_GET(seq, i);
-            char *c_name = _PyUnicode_AsString(name);
             long cur = symtable_lookup(st, name);
             if (cur < 0)
                 return 0;
             if (cur & (DEF_LOCAL | USE)) {
                 char buf[256];
+                char *c_name = _PyUnicode_AsString(name);
+                if (!c_name)
+                    return 0;
                 if (cur & DEF_LOCAL)
                     PyOS_snprintf(buf, sizeof(buf),
                                   GLOBAL_AFTER_ASSIGN,
@@ -1229,12 +1231,14 @@
         asdl_seq *seq = s->v.Nonlocal.names;
         for (i = 0; i < asdl_seq_LEN(seq); i++) {
             identifier name = (identifier)asdl_seq_GET(seq, i);
-            char *c_name = _PyUnicode_AsString(name);
             long cur = symtable_lookup(st, name);
             if (cur < 0)
                 return 0;
             if (cur & (DEF_LOCAL | USE)) {
                 char buf[256];
+                char *c_name = _PyUnicode_AsString(name);
+                if (!c_name)
+                    return 0;
                 if (cur & DEF_LOCAL)
                     PyOS_snprintf(buf, sizeof(buf),
                                   NONLOCAL_AFTER_ASSIGN,