mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 07:31:38 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			132 lines
		
	
	
	
		
			2.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			132 lines
		
	
	
	
		
			2.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/* 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
 | 
						|
#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;
 | 
						|
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 *get_small_int(sdigit ival)
 | 
						|
{
 | 
						|
    /* Never returns NULL */
 | 
						|
    PyObject *p;
 | 
						|
    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.
 | 
						|
 */
 | 
						|
 | 
						|
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;
 | 
						|
}
 | 
						|
 |