/* Coverity Scan model * * This is a modeling file for Coverity Scan. Modeling helps to avoid false * positives. * * - A model file can't import any header files. * - Therefore only some built-in primitives like int, char and void are * available but not wchar_t, NULL etc. * - Modeling doesn't need full structs and typedefs. Rudimentary structs * and similar types are sufficient. * - An uninitialized local pointer is not an error. It signifies that the * variable could be either NULL or have some data. * * Coverity Scan doesn't pick up modifications automatically. The model file * must be uploaded by an admin in the analysis settings of * http://scan.coverity.com/projects/200 */ /* dummy definitions, in most cases struct fields aren't required. */ #define NULL (void *)0 typedef int sdigit; typedef long Py_ssize_t; typedef unsigned short wchar_t; typedef struct {} PyObject; typedef struct {} grammar; typedef struct {} DIR; typedef struct {} RFILE; /* Python/pythonrun.c * resourece leak false positive */ void Py_FatalError(const char *msg) { __coverity_panic__(); } /* Objects/longobject.c * NEGATIVE_RETURNS false positive */ static PyObject small_ints[257 + 5]; static PyObject *get_small_int(sdigit ival) { PyObject *p; if (((ival + 5) >= 0) && ((ival + 5) < 257 + 5)) { return &small_ints[ival + 5]; } return p; } /* tainted sinks * * Coverity considers argv, environ, read() data etc as tained. */ PyObject *PyErr_SetFromErrnoWithFilename(PyObject *exc, const char *filename) { __coverity_tainted_data_sink__(filename); return NULL; } /* Python/fileutils.c */ wchar_t *_Py_char2wchar(const char* arg, size_t *size) { wchar_t *w; __coverity_tainted_data_sink__(arg); __coverity_tainted_data_sink__(size); return w; } /* Parser/pgenmain.c */ grammar *getgrammar(char *filename) { grammar *g; __coverity_tainted_data_sink__(filename); return g; } /* Python/marshal.c */ static Py_ssize_t r_string(char *s, Py_ssize_t n, RFILE *p) { __coverity_tainted_string_argument__(s); return 0; } static long r_long(RFILE *p) { long l; unsigned char buffer[4]; r_string((char *)buffer, 4, p); __coverity_tainted_string_sanitize_content__(buffer); l = (long)buffer; return l; } /* Coverity doesn't understand that fdopendir() may take ownership of fd. */ DIR *fdopendir(int fd) { DIR *d; if (d) { __coverity_close__(fd); } return d; }