summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Heimes <christian@cheimes.de>2013-07-26 16:00:12 (GMT)
committerChristian Heimes <christian@cheimes.de>2013-07-26 16:00:12 (GMT)
commit8cda5e60932b5808e6f6af4cfdc1428f1c915555 (patch)
treeef77380420b86338601eb6e738fb880a9cc49c65
parentebf4204e840e80c9b84a4c85d048128d816c6c02 (diff)
downloadcpython-8cda5e60932b5808e6f6af4cfdc1428f1c915555.zip
cpython-8cda5e60932b5808e6f6af4cfdc1428f1c915555.tar.gz
cpython-8cda5e60932b5808e6f6af4cfdc1428f1c915555.tar.bz2
Coverity: model PyLong_From*() functions
-rw-r--r--Misc/coverity_model.c35
1 files changed, 30 insertions, 5 deletions
diff --git a/Misc/coverity_model.c b/Misc/coverity_model.c
index 288b630..57f3aeb 100644
--- a/Misc/coverity_model.c
+++ b/Misc/coverity_model.c
@@ -19,8 +19,10 @@
/* 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.