]> granicus.if.org Git - python/commitdiff
Coverity: model PyLong_From*() functions
authorChristian Heimes <christian@cheimes.de>
Fri, 26 Jul 2013 16:00:12 +0000 (18:00 +0200)
committerChristian Heimes <christian@cheimes.de>
Fri, 26 Jul 2013 16:00:12 +0000 (18:00 +0200)
Misc/coverity_model.c

index 288b6302474749a6eddee37c86283c0c8b8aa507..57f3aeb11adfdb45d11b21abb9a2fa95798e14ca 100644 (file)
 /* dummy definitions, in most cases struct fields aren't required. */
 
 #define NULL (void *)0
+#define assert(op) /* empty */
 typedef int sdigit;
 typedef long Py_ssize_t;
+typedef long long PY_LONG_LONG;
 typedef unsigned short wchar_t;
 typedef struct {} PyObject;
 typedef struct {} grammar;
@@ -37,17 +39,40 @@ void Py_FatalError(const char *msg) {
 /* Objects/longobject.c
  * NEGATIVE_RETURNS false positive */
 
-static PyObject small_ints[257 + 5];
-
 static PyObject *get_small_int(sdigit ival)
 {
+    /* Never returns NULL */
     PyObject *p;
-    if (((ival + 5) >= 0) && ((ival + 5) < 257 + 5)) {
-        return &small_ints[ival + 5];
-    }
+    assert(p != NULL);
     return p;
 }
 
+PyObject *PyLong_FromLong(long ival)
+{
+    PyObject *p;
+    int maybe;
+
+    if ((ival >= -5) && (ival < 257 + 5)) {
+        p = get_small_int(ival);
+        assert(p != NULL);
+        return p;
+    }
+    if (maybe)
+        return p;
+    else
+        return NULL;
+}
+
+PyObject *PyLong_FromLongLong(PY_LONG_LONG ival)
+{
+    return PyLong_FromLong((long)ival);
+}
+
+PyObject *PyLong_FromSsize_t(Py_ssize_t ival)
+{
+    return PyLong_FromLong((long)ival);
+}
+
 /* tainted sinks
  *
  * Coverity considers argv, environ, read() data etc as tained.