diff Python/exceptions.c @ 13453:d6198e703602 legacy-trunk

EnvironmentError__init__(): The two case clauses were missing `break's. This first missing break caused a memory leak when case 3 fell through case 2 in the following example: import os os.chmod('/missing', 0600)
author Barry Warsaw <barry@python.org>
date Sun, 09 Jul 2000 04:56:25 +0000
parents 3e07a7315af5
children 67fd19d74528
line wrap: on
line diff
--- a/Python/exceptions.c	Sun Jul 09 04:36:04 2000 +0000
+++ b/Python/exceptions.c	Sun Jul 09 04:56:25 2000 +0000
@@ -440,8 +440,10 @@
 
     switch (PySequence_Length(args)) {
     case 3:
-	/* open() errors give third argument which is the filename.  But so
-	 * common in-place unpacking doesn't break, e.g.:
+	/* Where a function has a single filename, such as open() or some
+	 * of the os module functions, PyErr_SetFromErrnoWithFilename() is
+	 * called, giving a third argument which is the filename.  But, so
+	 * that old code using in-place unpacking doesn't break, e.g.:
 	 * 
 	 * except IOError, (errno, strerror):
 	 * 
@@ -465,9 +467,12 @@
 	subslice = PySequence_GetSlice(args, 0, 2);
 	if (!subslice || PyObject_SetAttrString(self, "args", subslice))
 	    goto finally;
+	break;
 
     case 2:
-	/* common case: PyErr_SetFromErrno() */
+	/* Used when PyErr_SetFromErrno() is called and no filename
+	 * argument is given.
+	 */
 	item0 = PySequence_GetItem(args, 0);
 	item1 = PySequence_GetItem(args, 1);
 	if (!item0 || !item1)
@@ -478,6 +483,7 @@
 	{
 	    goto finally;
 	}
+	break;
     }
 
     Py_INCREF(Py_None);