]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
fix potential refleak in PyFloat_AsDouble (closes #23590)
authorBenjamin Peterson <benjamin@python.org>
Fri, 6 Mar 2015 14:08:44 +0000 (09:08 -0500)
committerBenjamin Peterson <benjamin@python.org>
Fri, 6 Mar 2015 14:08:44 +0000 (09:08 -0500)
Lib/test/test_float.py
Objects/floatobject.c

index e1e1f0423ea25efcdb10defff5a33535c58787b2..bd2d6c355ff33e31f1fff94bffacca778dd49a1d 100644 (file)
@@ -6,6 +6,7 @@ from test import support
 import math
 from math import isinf, isnan, copysign, ldexp
 import operator
+import time
 import random, fractions
 
 INF = float("inf")
@@ -129,6 +130,11 @@ class GeneralFloatCases(unittest.TestCase):
         self.assertRaises(TypeError, float, Foo4(42))
         self.assertAlmostEqual(float(FooStr('8')), 9.)
 
+        class Foo5:
+            def __float__(self):
+                return ""
+        self.assertRaises(TypeError, time.sleep, Foo5())
+
     def test_is_integer(self):
         self.assertFalse((1.1).is_integer())
         self.assertTrue((1.).is_integer())
index 33e30cafda3bd342905372085e7d0860904f2778..1dca94790641fbc3ef0dbbd148567f3b621fb7e6 100644 (file)
@@ -220,6 +220,7 @@ PyFloat_AsDouble(PyObject *op)
     if (fo == NULL)
         return -1;
     if (!PyFloat_Check(fo)) {
+        Py_DECREF(fo);
         PyErr_SetString(PyExc_TypeError,
                         "nb_float should return float object");
         return -1;