17db96d56Sopenharmony_ci/* Coverity Scan model 27db96d56Sopenharmony_ci * 37db96d56Sopenharmony_ci * This is a modeling file for Coverity Scan. Modeling helps to avoid false 47db96d56Sopenharmony_ci * positives. 57db96d56Sopenharmony_ci * 67db96d56Sopenharmony_ci * - A model file can't import any header files. 77db96d56Sopenharmony_ci * - Therefore only some built-in primitives like int, char and void are 87db96d56Sopenharmony_ci * available but not wchar_t, NULL etc. 97db96d56Sopenharmony_ci * - Modeling doesn't need full structs and typedefs. Rudimentary structs 107db96d56Sopenharmony_ci * and similar types are sufficient. 117db96d56Sopenharmony_ci * - An uninitialized local pointer is not an error. It signifies that the 127db96d56Sopenharmony_ci * variable could be either NULL or have some data. 137db96d56Sopenharmony_ci * 147db96d56Sopenharmony_ci * Coverity Scan doesn't pick up modifications automatically. The model file 157db96d56Sopenharmony_ci * must be uploaded by an admin in the analysis settings of 167db96d56Sopenharmony_ci * http://scan.coverity.com/projects/200 177db96d56Sopenharmony_ci */ 187db96d56Sopenharmony_ci 197db96d56Sopenharmony_ci/* dummy definitions, in most cases struct fields aren't required. */ 207db96d56Sopenharmony_ci 217db96d56Sopenharmony_ci#define NULL (void *)0 227db96d56Sopenharmony_ci#define assert(op) /* empty */ 237db96d56Sopenharmony_citypedef int sdigit; 247db96d56Sopenharmony_citypedef long Py_ssize_t; 257db96d56Sopenharmony_citypedef unsigned short wchar_t; 267db96d56Sopenharmony_citypedef struct {} PyObject; 277db96d56Sopenharmony_citypedef struct {} grammar; 287db96d56Sopenharmony_citypedef struct {} DIR; 297db96d56Sopenharmony_citypedef struct {} RFILE; 307db96d56Sopenharmony_ci 317db96d56Sopenharmony_ci/* Python/pythonrun.c 327db96d56Sopenharmony_ci * resource leak false positive */ 337db96d56Sopenharmony_ci 347db96d56Sopenharmony_civoid Py_FatalError(const char *msg) { 357db96d56Sopenharmony_ci __coverity_panic__(); 367db96d56Sopenharmony_ci} 377db96d56Sopenharmony_ci 387db96d56Sopenharmony_ci/* Objects/longobject.c 397db96d56Sopenharmony_ci * NEGATIVE_RETURNS false positive */ 407db96d56Sopenharmony_ci 417db96d56Sopenharmony_cistatic PyObject *get_small_int(sdigit ival) 427db96d56Sopenharmony_ci{ 437db96d56Sopenharmony_ci /* Never returns NULL */ 447db96d56Sopenharmony_ci PyObject *p; 457db96d56Sopenharmony_ci assert(p != NULL); 467db96d56Sopenharmony_ci return p; 477db96d56Sopenharmony_ci} 487db96d56Sopenharmony_ci 497db96d56Sopenharmony_ciPyObject *PyLong_FromLong(long ival) 507db96d56Sopenharmony_ci{ 517db96d56Sopenharmony_ci PyObject *p; 527db96d56Sopenharmony_ci int maybe; 537db96d56Sopenharmony_ci 547db96d56Sopenharmony_ci if ((ival >= -5) && (ival < 257 + 5)) { 557db96d56Sopenharmony_ci p = get_small_int(ival); 567db96d56Sopenharmony_ci assert(p != NULL); 577db96d56Sopenharmony_ci return p; 587db96d56Sopenharmony_ci } 597db96d56Sopenharmony_ci if (maybe) 607db96d56Sopenharmony_ci return p; 617db96d56Sopenharmony_ci else 627db96d56Sopenharmony_ci return NULL; 637db96d56Sopenharmony_ci} 647db96d56Sopenharmony_ci 657db96d56Sopenharmony_ciPyObject *PyLong_FromLongLong(long long ival) 667db96d56Sopenharmony_ci{ 677db96d56Sopenharmony_ci return PyLong_FromLong((long)ival); 687db96d56Sopenharmony_ci} 697db96d56Sopenharmony_ci 707db96d56Sopenharmony_ciPyObject *PyLong_FromSsize_t(Py_ssize_t ival) 717db96d56Sopenharmony_ci{ 727db96d56Sopenharmony_ci return PyLong_FromLong((long)ival); 737db96d56Sopenharmony_ci} 747db96d56Sopenharmony_ci 757db96d56Sopenharmony_ci/* tainted sinks 767db96d56Sopenharmony_ci * 777db96d56Sopenharmony_ci * Coverity considers argv, environ, read() data etc as tained. 787db96d56Sopenharmony_ci */ 797db96d56Sopenharmony_ci 807db96d56Sopenharmony_ciPyObject *PyErr_SetFromErrnoWithFilename(PyObject *exc, const char *filename) 817db96d56Sopenharmony_ci{ 827db96d56Sopenharmony_ci __coverity_tainted_data_sink__(filename); 837db96d56Sopenharmony_ci return NULL; 847db96d56Sopenharmony_ci} 857db96d56Sopenharmony_ci 867db96d56Sopenharmony_ci/* Python/fileutils.c */ 877db96d56Sopenharmony_ciwchar_t *Py_DecodeLocale(const char* arg, size_t *size) 887db96d56Sopenharmony_ci{ 897db96d56Sopenharmony_ci wchar_t *w; 907db96d56Sopenharmony_ci __coverity_tainted_data_sink__(arg); 917db96d56Sopenharmony_ci __coverity_tainted_data_sink__(size); 927db96d56Sopenharmony_ci return w; 937db96d56Sopenharmony_ci} 947db96d56Sopenharmony_ci 957db96d56Sopenharmony_ci/* Python/marshal.c */ 967db96d56Sopenharmony_ci 977db96d56Sopenharmony_cistatic Py_ssize_t r_string(char *s, Py_ssize_t n, RFILE *p) 987db96d56Sopenharmony_ci{ 997db96d56Sopenharmony_ci __coverity_tainted_string_argument__(s); 1007db96d56Sopenharmony_ci return 0; 1017db96d56Sopenharmony_ci} 1027db96d56Sopenharmony_ci 1037db96d56Sopenharmony_cistatic long r_long(RFILE *p) 1047db96d56Sopenharmony_ci{ 1057db96d56Sopenharmony_ci long l; 1067db96d56Sopenharmony_ci unsigned char buffer[4]; 1077db96d56Sopenharmony_ci 1087db96d56Sopenharmony_ci r_string((char *)buffer, 4, p); 1097db96d56Sopenharmony_ci __coverity_tainted_string_sanitize_content__(buffer); 1107db96d56Sopenharmony_ci l = (long)buffer; 1117db96d56Sopenharmony_ci return l; 1127db96d56Sopenharmony_ci} 1137db96d56Sopenharmony_ci 1147db96d56Sopenharmony_ci/* Coverity doesn't understand that fdopendir() may take ownership of fd. */ 1157db96d56Sopenharmony_ci 1167db96d56Sopenharmony_ciDIR *fdopendir(int fd) 1177db96d56Sopenharmony_ci{ 1187db96d56Sopenharmony_ci DIR *d; 1197db96d56Sopenharmony_ci if (d) { 1207db96d56Sopenharmony_ci __coverity_close__(fd); 1217db96d56Sopenharmony_ci } 1227db96d56Sopenharmony_ci return d; 1237db96d56Sopenharmony_ci} 1247db96d56Sopenharmony_ci 1257db96d56Sopenharmony_ci/* Modules/_datetime.c 1267db96d56Sopenharmony_ci * 1277db96d56Sopenharmony_ci * Coverity thinks that the input values for these function come from a 1287db96d56Sopenharmony_ci * tainted source PyDateTime_DATE_GET_* macros use bit shifting. 1297db96d56Sopenharmony_ci */ 1307db96d56Sopenharmony_cistatic PyObject * 1317db96d56Sopenharmony_cibuild_struct_time(int y, int m, int d, int hh, int mm, int ss, int dstflag) 1327db96d56Sopenharmony_ci{ 1337db96d56Sopenharmony_ci PyObject *result; 1347db96d56Sopenharmony_ci 1357db96d56Sopenharmony_ci __coverity_tainted_data_sanitize__(y); 1367db96d56Sopenharmony_ci __coverity_tainted_data_sanitize__(m); 1377db96d56Sopenharmony_ci __coverity_tainted_data_sanitize__(d); 1387db96d56Sopenharmony_ci __coverity_tainted_data_sanitize__(hh); 1397db96d56Sopenharmony_ci __coverity_tainted_data_sanitize__(mm); 1407db96d56Sopenharmony_ci __coverity_tainted_data_sanitize__(ss); 1417db96d56Sopenharmony_ci __coverity_tainted_data_sanitize__(dstflag); 1427db96d56Sopenharmony_ci 1437db96d56Sopenharmony_ci return result; 1447db96d56Sopenharmony_ci} 1457db96d56Sopenharmony_ci 1467db96d56Sopenharmony_cistatic int 1477db96d56Sopenharmony_ciymd_to_ord(int year, int month, int day) 1487db96d56Sopenharmony_ci{ 1497db96d56Sopenharmony_ci int ord = 0; 1507db96d56Sopenharmony_ci 1517db96d56Sopenharmony_ci __coverity_tainted_data_sanitize__(year); 1527db96d56Sopenharmony_ci __coverity_tainted_data_sanitize__(month); 1537db96d56Sopenharmony_ci __coverity_tainted_data_sanitize__(day); 1547db96d56Sopenharmony_ci 1557db96d56Sopenharmony_ci return ord; 1567db96d56Sopenharmony_ci} 1577db96d56Sopenharmony_ci 1587db96d56Sopenharmony_cistatic int 1597db96d56Sopenharmony_cinormalize_date(int *year, int *month, int *day) 1607db96d56Sopenharmony_ci{ 1617db96d56Sopenharmony_ci __coverity_tainted_data_sanitize__(*year); 1627db96d56Sopenharmony_ci __coverity_tainted_data_sanitize__(*month); 1637db96d56Sopenharmony_ci __coverity_tainted_data_sanitize__(*day); 1647db96d56Sopenharmony_ci 1657db96d56Sopenharmony_ci return 0; 1667db96d56Sopenharmony_ci} 1677db96d56Sopenharmony_ci 1687db96d56Sopenharmony_cistatic int 1697db96d56Sopenharmony_ciweekday(int year, int month, int day) 1707db96d56Sopenharmony_ci{ 1717db96d56Sopenharmony_ci int w = 0; 1727db96d56Sopenharmony_ci 1737db96d56Sopenharmony_ci __coverity_tainted_data_sanitize__(year); 1747db96d56Sopenharmony_ci __coverity_tainted_data_sanitize__(month); 1757db96d56Sopenharmony_ci __coverity_tainted_data_sanitize__(day); 1767db96d56Sopenharmony_ci 1777db96d56Sopenharmony_ci return w; 1787db96d56Sopenharmony_ci} 1797db96d56Sopenharmony_ci 180