diff options
author | Christian Heimes <christian@cheimes.de> | 2013-07-26 16:00:12 (GMT) |
---|---|---|
committer | Christian Heimes <christian@cheimes.de> | 2013-07-26 16:00:12 (GMT) |
commit | 8cda5e60932b5808e6f6af4cfdc1428f1c915555 (patch) | |
tree | ef77380420b86338601eb6e738fb880a9cc49c65 /Misc | |
parent | ebf4204e840e80c9b84a4c85d048128d816c6c02 (diff) | |
download | cpython-8cda5e60932b5808e6f6af4cfdc1428f1c915555.zip cpython-8cda5e60932b5808e6f6af4cfdc1428f1c915555.tar.gz cpython-8cda5e60932b5808e6f6af4cfdc1428f1c915555.tar.bz2 |
Coverity: model PyLong_From*() functions
Diffstat (limited to 'Misc')
-rw-r--r-- | Misc/coverity_model.c | 35 |
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. |