Commit 7605936d authored by Neal Norwitz's avatar Neal Norwitz

Handle PyString_FromInternedString() failing (unlikely, but possible).

Klocwork #325

(I'm not backporting this, but if someone wants to, feel free.)
parent 7fd9607b
...@@ -221,8 +221,8 @@ PySymtable_Build(mod_ty mod, const char *filename, PyFutureFeatures *future) ...@@ -221,8 +221,8 @@ PySymtable_Build(mod_ty mod, const char *filename, PyFutureFeatures *future)
return st; return st;
st->st_filename = filename; st->st_filename = filename;
st->st_future = future; st->st_future = future;
if (!symtable_enter_block(st, GET_IDENTIFIER(top), ModuleBlock, if (!GET_IDENTIFIER(top) ||
(void *)mod, 0)) { !symtable_enter_block(st, top, ModuleBlock, (void *)mod, 0)) {
PySymtable_Free(st); PySymtable_Free(st);
return NULL; return NULL;
} }
...@@ -1123,12 +1123,13 @@ symtable_visit_expr(struct symtable *st, expr_ty e) ...@@ -1123,12 +1123,13 @@ symtable_visit_expr(struct symtable *st, expr_ty e)
VISIT(st, expr, e->v.UnaryOp.operand); VISIT(st, expr, e->v.UnaryOp.operand);
break; break;
case Lambda_kind: { case Lambda_kind: {
if (!symtable_add_def(st, GET_IDENTIFIER(lambda), DEF_LOCAL)) if (!GET_IDENTIFIER(lambda) ||
!symtable_add_def(st, lambda, DEF_LOCAL))
return 0; return 0;
if (e->v.Lambda.args->defaults) if (e->v.Lambda.args->defaults)
VISIT_SEQ(st, expr, e->v.Lambda.args->defaults); VISIT_SEQ(st, expr, e->v.Lambda.args->defaults);
/* XXX how to get line numbers for expressions */ /* XXX how to get line numbers for expressions */
if (!symtable_enter_block(st, GET_IDENTIFIER(lambda), if (!symtable_enter_block(st, lambda,
FunctionBlock, (void *)e, 0)) FunctionBlock, (void *)e, 0))
return 0; return 0;
VISIT_IN_BLOCK(st, arguments, e->v.Lambda.args, (void*)e); VISIT_IN_BLOCK(st, arguments, e->v.Lambda.args, (void*)e);
...@@ -1404,8 +1405,8 @@ symtable_visit_genexp(struct symtable *st, expr_ty e) ...@@ -1404,8 +1405,8 @@ symtable_visit_genexp(struct symtable *st, expr_ty e)
/* Outermost iterator is evaluated in current scope */ /* Outermost iterator is evaluated in current scope */
VISIT(st, expr, outermost->iter); VISIT(st, expr, outermost->iter);
/* Create generator scope for the rest */ /* Create generator scope for the rest */
if (!symtable_enter_block(st, GET_IDENTIFIER(genexpr), if (!GET_IDENTIFIER(genexpr) ||
FunctionBlock, (void *)e, 0)) { !symtable_enter_block(st, genexpr, FunctionBlock, (void *)e, 0)) {
return 0; return 0;
} }
st->st_cur->ste_generator = 1; st->st_cur->ste_generator = 1;
...@@ -1419,7 +1420,5 @@ symtable_visit_genexp(struct symtable *st, expr_ty e) ...@@ -1419,7 +1420,5 @@ symtable_visit_genexp(struct symtable *st, expr_ty e)
VISIT_SEQ_TAIL_IN_BLOCK(st, comprehension, VISIT_SEQ_TAIL_IN_BLOCK(st, comprehension,
e->v.GeneratorExp.generators, 1, (void*)e); e->v.GeneratorExp.generators, 1, (void*)e);
VISIT_IN_BLOCK(st, expr, e->v.GeneratorExp.elt, (void*)e); VISIT_IN_BLOCK(st, expr, e->v.GeneratorExp.elt, (void*)e);
if (!symtable_exit_block(st, (void *)e)) return symtable_exit_block(st, (void *)e);
return 0;
return 1;
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment