[Python-checkins] cpython (3.3): Issue #16404: Add checks for return value of PyLong_FromLong() in

serhiy.storchaka python-checkins at python.org
Tue Dec 17 14:15:20 CET 2013


http://hg.python.org/cpython/rev/928c0acf7c09
changeset:   88025:928c0acf7c09
branch:      3.3
parent:      88022:90a7277a3187
user:        Serhiy Storchaka <storchaka at gmail.com>
date:        Tue Dec 17 15:11:24 2013 +0200
summary:
  Issue #16404: Add checks for return value of PyLong_FromLong() in
sys.getwindowsversion() and ossaudiodev.setparameters().
Reported by Ned Batchelder.

files:
  Modules/ossaudiodev.c |  9 +--------
  Python/sysmodule.c    |  4 ++++
  2 files changed, 5 insertions(+), 8 deletions(-)


diff --git a/Modules/ossaudiodev.c b/Modules/ossaudiodev.c
--- a/Modules/ossaudiodev.c
+++ b/Modules/ossaudiodev.c
@@ -561,7 +561,6 @@
 {
     int wanted_fmt, wanted_channels, wanted_rate, strict=0;
     int fmt, channels, rate;
-    PyObject * rv;                    /* return tuple (fmt, channels, rate) */
 
     if (!_is_fd_valid(self->fd))
         return NULL;
@@ -606,13 +605,7 @@
 
     /* Construct the return value: a (fmt, channels, rate) tuple that
        tells what the audio hardware was actually set to. */
-    rv = PyTuple_New(3);
-    if (rv == NULL)
-        return NULL;
-    PyTuple_SET_ITEM(rv, 0, PyLong_FromLong(fmt));
-    PyTuple_SET_ITEM(rv, 1, PyLong_FromLong(channels));
-    PyTuple_SET_ITEM(rv, 2, PyLong_FromLong(rate));
-    return rv;
+    return Py_BuildValue("(iii)", fmt, channels, rate);
 }
 
 static int
diff --git a/Python/sysmodule.c b/Python/sysmodule.c
--- a/Python/sysmodule.c
+++ b/Python/sysmodule.c
@@ -747,6 +747,10 @@
     PyStructSequence_SET_ITEM(version, pos++, PyLong_FromLong(ver.wSuiteMask));
     PyStructSequence_SET_ITEM(version, pos++, PyLong_FromLong(ver.wProductType));
 
+    if (PyErr_Occurred()) {
+        Py_DECREF(version);
+        return NULL;
+    }
     return version;
 }
 

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list