diff Python/ceval.c @ 16453:2e3dd62ceac5 legacy-trunk

SF patch 103596 by Nick Mathewson: rause UnboundLocalError for uninitialized free variables
author Jeremy Hylton <jeremy@alum.mit.edu>
date Mon, 05 Feb 2001 17:23:16 +0000
parents 80c0b280a4f9
children 4652723ea655
line wrap: on
line diff
--- a/Python/ceval.c	Mon Feb 05 13:47:13 2001 +0000
+++ b/Python/ceval.c	Mon Feb 05 17:23:16 2001 +0000
@@ -1646,6 +1646,22 @@
 		case LOAD_DEREF:
 			x = freevars[oparg];
 			w = PyCell_Get(x);
+			if (w == NULL) {
+				if (oparg < f->f_ncells)
+					v = PyTuple_GetItem(co->co_cellvars,
+							       oparg);
+				else
+				       v = PyTuple_GetItem(
+						      co->co_freevars,
+						      oparg - f->f_ncells);
+
+				format_exc_check_arg(
+					PyExc_UnboundLocalError,
+					UNBOUNDLOCAL_ERROR_MSG,
+					v);
+				err = -1;
+				break;
+			}
 			Py_INCREF(w);
 			PUSH(w);
 			break;