1/* Module definition and import implementation */ 2 3#include "Python.h" 4 5#include "pycore_import.h" // _PyImport_BootstrapImp() 6#include "pycore_initconfig.h" // _PyStatus_OK() 7#include "pycore_interp.h" // _PyInterpreterState_ClearModules() 8#include "pycore_namespace.h" // _PyNamespace_Type 9#include "pycore_pyerrors.h" // _PyErr_SetString() 10#include "pycore_pyhash.h" // _Py_KeyedHash() 11#include "pycore_pylifecycle.h" 12#include "pycore_pymem.h" // _PyMem_SetDefaultAllocator() 13#include "pycore_pystate.h" // _PyInterpreterState_GET() 14#include "pycore_sysmodule.h" // _PySys_Audit() 15#include "marshal.h" // PyMarshal_ReadObjectFromString() 16#include "importdl.h" // _PyImport_DynLoadFiletab 17#include "pydtrace.h" // PyDTrace_IMPORT_FIND_LOAD_START_ENABLED() 18#include <stdbool.h> // bool 19 20#ifdef HAVE_FCNTL_H 21#include <fcntl.h> 22#endif 23#ifdef __cplusplus 24extern "C" { 25#endif 26 27/* Forward references */ 28static PyObject *import_add_module(PyThreadState *tstate, PyObject *name); 29 30/* See _PyImport_FixupExtensionObject() below */ 31static PyObject *extensions = NULL; 32 33/* This table is defined in config.c: */ 34extern struct _inittab _PyImport_Inittab[]; 35 36struct _inittab *PyImport_Inittab = _PyImport_Inittab; 37static struct _inittab *inittab_copy = NULL; 38 39/*[clinic input] 40module _imp 41[clinic start generated code]*/ 42/*[clinic end generated code: output=da39a3ee5e6b4b0d input=9c332475d8686284]*/ 43 44#include "clinic/import.c.h" 45 46/* Initialize things */ 47 48PyStatus 49_PyImportZip_Init(PyThreadState *tstate) 50{ 51 PyObject *path_hooks, *zipimport; 52 int err = 0; 53 54 path_hooks = PySys_GetObject("path_hooks"); 55 if (path_hooks == NULL) { 56 _PyErr_SetString(tstate, PyExc_RuntimeError, 57 "unable to get sys.path_hooks"); 58 goto error; 59 } 60 61 int verbose = _PyInterpreterState_GetConfig(tstate->interp)->verbose; 62 if (verbose) { 63 PySys_WriteStderr("# installing zipimport hook\n"); 64 } 65 66 zipimport = PyImport_ImportModule("zipimport"); 67 if (zipimport == NULL) { 68 _PyErr_Clear(tstate); /* No zip import module -- okay */ 69 if (verbose) { 70 PySys_WriteStderr("# can't import zipimport\n"); 71 } 72 } 73 else { 74 PyObject *zipimporter = PyObject_GetAttr(zipimport, &_Py_ID(zipimporter)); 75 Py_DECREF(zipimport); 76 if (zipimporter == NULL) { 77 _PyErr_Clear(tstate); /* No zipimporter object -- okay */ 78 if (verbose) { 79 PySys_WriteStderr("# can't import zipimport.zipimporter\n"); 80 } 81 } 82 else { 83 /* sys.path_hooks.insert(0, zipimporter) */ 84 err = PyList_Insert(path_hooks, 0, zipimporter); 85 Py_DECREF(zipimporter); 86 if (err < 0) { 87 goto error; 88 } 89 if (verbose) { 90 PySys_WriteStderr("# installed zipimport hook\n"); 91 } 92 } 93 } 94 95 return _PyStatus_OK(); 96 97 error: 98 PyErr_Print(); 99 return _PyStatus_ERR("initializing zipimport failed"); 100} 101 102/* Locking primitives to prevent parallel imports of the same module 103 in different threads to return with a partially loaded module. 104 These calls are serialized by the global interpreter lock. */ 105 106static PyThread_type_lock import_lock = NULL; 107static unsigned long import_lock_thread = PYTHREAD_INVALID_THREAD_ID; 108static int import_lock_level = 0; 109 110void 111_PyImport_AcquireLock(void) 112{ 113 unsigned long me = PyThread_get_thread_ident(); 114 if (me == PYTHREAD_INVALID_THREAD_ID) 115 return; /* Too bad */ 116 if (import_lock == NULL) { 117 import_lock = PyThread_allocate_lock(); 118 if (import_lock == NULL) 119 return; /* Nothing much we can do. */ 120 } 121 if (import_lock_thread == me) { 122 import_lock_level++; 123 return; 124 } 125 if (import_lock_thread != PYTHREAD_INVALID_THREAD_ID || 126 !PyThread_acquire_lock(import_lock, 0)) 127 { 128 PyThreadState *tstate = PyEval_SaveThread(); 129 PyThread_acquire_lock(import_lock, WAIT_LOCK); 130 PyEval_RestoreThread(tstate); 131 } 132 assert(import_lock_level == 0); 133 import_lock_thread = me; 134 import_lock_level = 1; 135} 136 137int 138_PyImport_ReleaseLock(void) 139{ 140 unsigned long me = PyThread_get_thread_ident(); 141 if (me == PYTHREAD_INVALID_THREAD_ID || import_lock == NULL) 142 return 0; /* Too bad */ 143 if (import_lock_thread != me) 144 return -1; 145 import_lock_level--; 146 assert(import_lock_level >= 0); 147 if (import_lock_level == 0) { 148 import_lock_thread = PYTHREAD_INVALID_THREAD_ID; 149 PyThread_release_lock(import_lock); 150 } 151 return 1; 152} 153 154#ifdef HAVE_FORK 155/* This function is called from PyOS_AfterFork_Child() to ensure that newly 156 created child processes do not share locks with the parent. 157 We now acquire the import lock around fork() calls but on some platforms 158 (Solaris 9 and earlier? see isue7242) that still left us with problems. */ 159PyStatus 160_PyImport_ReInitLock(void) 161{ 162 if (import_lock != NULL) { 163 if (_PyThread_at_fork_reinit(&import_lock) < 0) { 164 return _PyStatus_ERR("failed to create a new lock"); 165 } 166 } 167 168 if (import_lock_level > 1) { 169 /* Forked as a side effect of import */ 170 unsigned long me = PyThread_get_thread_ident(); 171 PyThread_acquire_lock(import_lock, WAIT_LOCK); 172 import_lock_thread = me; 173 import_lock_level--; 174 } else { 175 import_lock_thread = PYTHREAD_INVALID_THREAD_ID; 176 import_lock_level = 0; 177 } 178 return _PyStatus_OK(); 179} 180#endif 181 182/*[clinic input] 183_imp.lock_held 184 185Return True if the import lock is currently held, else False. 186 187On platforms without threads, return False. 188[clinic start generated code]*/ 189 190static PyObject * 191_imp_lock_held_impl(PyObject *module) 192/*[clinic end generated code: output=8b89384b5e1963fc input=9b088f9b217d9bdf]*/ 193{ 194 return PyBool_FromLong(import_lock_thread != PYTHREAD_INVALID_THREAD_ID); 195} 196 197/*[clinic input] 198_imp.acquire_lock 199 200Acquires the interpreter's import lock for the current thread. 201 202This lock should be used by import hooks to ensure thread-safety when importing 203modules. On platforms without threads, this function does nothing. 204[clinic start generated code]*/ 205 206static PyObject * 207_imp_acquire_lock_impl(PyObject *module) 208/*[clinic end generated code: output=1aff58cb0ee1b026 input=4a2d4381866d5fdc]*/ 209{ 210 _PyImport_AcquireLock(); 211 Py_RETURN_NONE; 212} 213 214/*[clinic input] 215_imp.release_lock 216 217Release the interpreter's import lock. 218 219On platforms without threads, this function does nothing. 220[clinic start generated code]*/ 221 222static PyObject * 223_imp_release_lock_impl(PyObject *module) 224/*[clinic end generated code: output=7faab6d0be178b0a input=934fb11516dd778b]*/ 225{ 226 if (_PyImport_ReleaseLock() < 0) { 227 PyErr_SetString(PyExc_RuntimeError, 228 "not holding the import lock"); 229 return NULL; 230 } 231 Py_RETURN_NONE; 232} 233 234void 235_PyImport_Fini(void) 236{ 237 Py_CLEAR(extensions); 238 if (import_lock != NULL) { 239 PyThread_free_lock(import_lock); 240 import_lock = NULL; 241 } 242} 243 244void 245_PyImport_Fini2(void) 246{ 247 /* Use the same memory allocator than PyImport_ExtendInittab(). */ 248 PyMemAllocatorEx old_alloc; 249 _PyMem_SetDefaultAllocator(PYMEM_DOMAIN_RAW, &old_alloc); 250 251 // Reset PyImport_Inittab 252 PyImport_Inittab = _PyImport_Inittab; 253 254 /* Free memory allocated by PyImport_ExtendInittab() */ 255 PyMem_RawFree(inittab_copy); 256 inittab_copy = NULL; 257 258 PyMem_SetAllocator(PYMEM_DOMAIN_RAW, &old_alloc); 259} 260 261/* Helper for sys */ 262 263PyObject * 264PyImport_GetModuleDict(void) 265{ 266 PyInterpreterState *interp = _PyInterpreterState_GET(); 267 if (interp->modules == NULL) { 268 Py_FatalError("interpreter has no modules dictionary"); 269 } 270 return interp->modules; 271} 272 273/* In some corner cases it is important to be sure that the import 274 machinery has been initialized (or not cleaned up yet). For 275 example, see issue #4236 and PyModule_Create2(). */ 276 277int 278_PyImport_IsInitialized(PyInterpreterState *interp) 279{ 280 if (interp->modules == NULL) 281 return 0; 282 return 1; 283} 284 285PyObject * 286_PyImport_GetModuleId(_Py_Identifier *nameid) 287{ 288 PyObject *name = _PyUnicode_FromId(nameid); /* borrowed */ 289 if (name == NULL) { 290 return NULL; 291 } 292 return PyImport_GetModule(name); 293} 294 295int 296_PyImport_SetModule(PyObject *name, PyObject *m) 297{ 298 PyInterpreterState *interp = _PyInterpreterState_GET(); 299 PyObject *modules = interp->modules; 300 return PyObject_SetItem(modules, name, m); 301} 302 303int 304_PyImport_SetModuleString(const char *name, PyObject *m) 305{ 306 PyInterpreterState *interp = _PyInterpreterState_GET(); 307 PyObject *modules = interp->modules; 308 return PyMapping_SetItemString(modules, name, m); 309} 310 311static PyObject * 312import_get_module(PyThreadState *tstate, PyObject *name) 313{ 314 PyObject *modules = tstate->interp->modules; 315 if (modules == NULL) { 316 _PyErr_SetString(tstate, PyExc_RuntimeError, 317 "unable to get sys.modules"); 318 return NULL; 319 } 320 321 PyObject *m; 322 Py_INCREF(modules); 323 if (PyDict_CheckExact(modules)) { 324 m = PyDict_GetItemWithError(modules, name); /* borrowed */ 325 Py_XINCREF(m); 326 } 327 else { 328 m = PyObject_GetItem(modules, name); 329 if (m == NULL && _PyErr_ExceptionMatches(tstate, PyExc_KeyError)) { 330 _PyErr_Clear(tstate); 331 } 332 } 333 Py_DECREF(modules); 334 return m; 335} 336 337 338static int 339import_ensure_initialized(PyInterpreterState *interp, PyObject *mod, PyObject *name) 340{ 341 PyObject *spec; 342 343 /* Optimization: only call _bootstrap._lock_unlock_module() if 344 __spec__._initializing is true. 345 NOTE: because of this, initializing must be set *before* 346 stuffing the new module in sys.modules. 347 */ 348 spec = PyObject_GetAttr(mod, &_Py_ID(__spec__)); 349 int busy = _PyModuleSpec_IsInitializing(spec); 350 Py_XDECREF(spec); 351 if (busy) { 352 /* Wait until module is done importing. */ 353 PyObject *value = _PyObject_CallMethodOneArg( 354 interp->importlib, &_Py_ID(_lock_unlock_module), name); 355 if (value == NULL) { 356 return -1; 357 } 358 Py_DECREF(value); 359 } 360 return 0; 361} 362 363 364/* Helper for pythonrun.c -- return magic number and tag. */ 365 366long 367PyImport_GetMagicNumber(void) 368{ 369 long res; 370 PyInterpreterState *interp = _PyInterpreterState_GET(); 371 PyObject *external, *pyc_magic; 372 373 external = PyObject_GetAttrString(interp->importlib, "_bootstrap_external"); 374 if (external == NULL) 375 return -1; 376 pyc_magic = PyObject_GetAttrString(external, "_RAW_MAGIC_NUMBER"); 377 Py_DECREF(external); 378 if (pyc_magic == NULL) 379 return -1; 380 res = PyLong_AsLong(pyc_magic); 381 Py_DECREF(pyc_magic); 382 return res; 383} 384 385 386extern const char * _PySys_ImplCacheTag; 387 388const char * 389PyImport_GetMagicTag(void) 390{ 391 return _PySys_ImplCacheTag; 392} 393 394 395/* Magic for extension modules (built-in as well as dynamically 396 loaded). To prevent initializing an extension module more than 397 once, we keep a static dictionary 'extensions' keyed by the tuple 398 (module name, module name) (for built-in modules) or by 399 (filename, module name) (for dynamically loaded modules), containing these 400 modules. A copy of the module's dictionary is stored by calling 401 _PyImport_FixupExtensionObject() immediately after the module initialization 402 function succeeds. A copy can be retrieved from there by calling 403 import_find_extension(). 404 405 Modules which do support multiple initialization set their m_size 406 field to a non-negative number (indicating the size of the 407 module-specific state). They are still recorded in the extensions 408 dictionary, to avoid loading shared libraries twice. 409*/ 410 411int 412_PyImport_FixupExtensionObject(PyObject *mod, PyObject *name, 413 PyObject *filename, PyObject *modules) 414{ 415 if (mod == NULL || !PyModule_Check(mod)) { 416 PyErr_BadInternalCall(); 417 return -1; 418 } 419 420 struct PyModuleDef *def = PyModule_GetDef(mod); 421 if (!def) { 422 PyErr_BadInternalCall(); 423 return -1; 424 } 425 426 PyThreadState *tstate = _PyThreadState_GET(); 427 if (PyObject_SetItem(modules, name, mod) < 0) { 428 return -1; 429 } 430 if (_PyState_AddModule(tstate, mod, def) < 0) { 431 PyMapping_DelItem(modules, name); 432 return -1; 433 } 434 435 // bpo-44050: Extensions and def->m_base.m_copy can be updated 436 // when the extension module doesn't support sub-interpreters. 437 if (_Py_IsMainInterpreter(tstate->interp) || def->m_size == -1) { 438 if (def->m_size == -1) { 439 if (def->m_base.m_copy) { 440 /* Somebody already imported the module, 441 likely under a different name. 442 XXX this should really not happen. */ 443 Py_CLEAR(def->m_base.m_copy); 444 } 445 PyObject *dict = PyModule_GetDict(mod); 446 if (dict == NULL) { 447 return -1; 448 } 449 def->m_base.m_copy = PyDict_Copy(dict); 450 if (def->m_base.m_copy == NULL) { 451 return -1; 452 } 453 } 454 455 if (extensions == NULL) { 456 extensions = PyDict_New(); 457 if (extensions == NULL) { 458 return -1; 459 } 460 } 461 462 PyObject *key = PyTuple_Pack(2, filename, name); 463 if (key == NULL) { 464 return -1; 465 } 466 int res = PyDict_SetItem(extensions, key, (PyObject *)def); 467 Py_DECREF(key); 468 if (res < 0) { 469 return -1; 470 } 471 } 472 473 return 0; 474} 475 476int 477_PyImport_FixupBuiltin(PyObject *mod, const char *name, PyObject *modules) 478{ 479 int res; 480 PyObject *nameobj; 481 nameobj = PyUnicode_InternFromString(name); 482 if (nameobj == NULL) 483 return -1; 484 res = _PyImport_FixupExtensionObject(mod, nameobj, nameobj, modules); 485 Py_DECREF(nameobj); 486 return res; 487} 488 489static PyObject * 490import_find_extension(PyThreadState *tstate, PyObject *name, 491 PyObject *filename) 492{ 493 if (extensions == NULL) { 494 return NULL; 495 } 496 497 PyObject *key = PyTuple_Pack(2, filename, name); 498 if (key == NULL) { 499 return NULL; 500 } 501 PyModuleDef* def = (PyModuleDef *)PyDict_GetItemWithError(extensions, key); 502 Py_DECREF(key); 503 if (def == NULL) { 504 return NULL; 505 } 506 507 PyObject *mod, *mdict; 508 PyObject *modules = tstate->interp->modules; 509 510 if (def->m_size == -1) { 511 /* Module does not support repeated initialization */ 512 if (def->m_base.m_copy == NULL) 513 return NULL; 514 mod = import_add_module(tstate, name); 515 if (mod == NULL) 516 return NULL; 517 mdict = PyModule_GetDict(mod); 518 if (mdict == NULL) { 519 Py_DECREF(mod); 520 return NULL; 521 } 522 if (PyDict_Update(mdict, def->m_base.m_copy)) { 523 Py_DECREF(mod); 524 return NULL; 525 } 526 } 527 else { 528 if (def->m_base.m_init == NULL) 529 return NULL; 530 mod = _PyImport_InitFunc_TrampolineCall(def->m_base.m_init); 531 if (mod == NULL) 532 return NULL; 533 if (PyObject_SetItem(modules, name, mod) == -1) { 534 Py_DECREF(mod); 535 return NULL; 536 } 537 } 538 if (_PyState_AddModule(tstate, mod, def) < 0) { 539 PyMapping_DelItem(modules, name); 540 Py_DECREF(mod); 541 return NULL; 542 } 543 544 int verbose = _PyInterpreterState_GetConfig(tstate->interp)->verbose; 545 if (verbose) { 546 PySys_FormatStderr("import %U # previously loaded (%R)\n", 547 name, filename); 548 } 549 return mod; 550} 551 552 553/* Get the module object corresponding to a module name. 554 First check the modules dictionary if there's one there, 555 if not, create a new one and insert it in the modules dictionary. */ 556 557static PyObject * 558import_add_module(PyThreadState *tstate, PyObject *name) 559{ 560 PyObject *modules = tstate->interp->modules; 561 if (modules == NULL) { 562 _PyErr_SetString(tstate, PyExc_RuntimeError, 563 "no import module dictionary"); 564 return NULL; 565 } 566 567 PyObject *m; 568 if (PyDict_CheckExact(modules)) { 569 m = PyDict_GetItemWithError(modules, name); 570 Py_XINCREF(m); 571 } 572 else { 573 m = PyObject_GetItem(modules, name); 574 // For backward-compatibility we copy the behavior 575 // of PyDict_GetItemWithError(). 576 if (_PyErr_ExceptionMatches(tstate, PyExc_KeyError)) { 577 _PyErr_Clear(tstate); 578 } 579 } 580 if (_PyErr_Occurred(tstate)) { 581 return NULL; 582 } 583 if (m != NULL && PyModule_Check(m)) { 584 return m; 585 } 586 Py_XDECREF(m); 587 m = PyModule_NewObject(name); 588 if (m == NULL) 589 return NULL; 590 if (PyObject_SetItem(modules, name, m) != 0) { 591 Py_DECREF(m); 592 return NULL; 593 } 594 595 return m; 596} 597 598PyObject * 599PyImport_AddModuleObject(PyObject *name) 600{ 601 PyThreadState *tstate = _PyThreadState_GET(); 602 PyObject *mod = import_add_module(tstate, name); 603 if (mod) { 604 PyObject *ref = PyWeakref_NewRef(mod, NULL); 605 Py_DECREF(mod); 606 if (ref == NULL) { 607 return NULL; 608 } 609 mod = PyWeakref_GetObject(ref); 610 Py_DECREF(ref); 611 } 612 return mod; /* borrowed reference */ 613} 614 615 616PyObject * 617PyImport_AddModule(const char *name) 618{ 619 PyObject *nameobj = PyUnicode_FromString(name); 620 if (nameobj == NULL) { 621 return NULL; 622 } 623 PyObject *module = PyImport_AddModuleObject(nameobj); 624 Py_DECREF(nameobj); 625 return module; 626} 627 628 629/* Remove name from sys.modules, if it's there. 630 * Can be called with an exception raised. 631 * If fail to remove name a new exception will be chained with the old 632 * exception, otherwise the old exception is preserved. 633 */ 634static void 635remove_module(PyThreadState *tstate, PyObject *name) 636{ 637 PyObject *type, *value, *traceback; 638 _PyErr_Fetch(tstate, &type, &value, &traceback); 639 640 PyObject *modules = tstate->interp->modules; 641 if (PyDict_CheckExact(modules)) { 642 PyObject *mod = _PyDict_Pop(modules, name, Py_None); 643 Py_XDECREF(mod); 644 } 645 else if (PyMapping_DelItem(modules, name) < 0) { 646 if (_PyErr_ExceptionMatches(tstate, PyExc_KeyError)) { 647 _PyErr_Clear(tstate); 648 } 649 } 650 651 _PyErr_ChainExceptions(type, value, traceback); 652} 653 654 655/* Execute a code object in a module and return the module object 656 * WITH INCREMENTED REFERENCE COUNT. If an error occurs, name is 657 * removed from sys.modules, to avoid leaving damaged module objects 658 * in sys.modules. The caller may wish to restore the original 659 * module object (if any) in this case; PyImport_ReloadModule is an 660 * example. 661 * 662 * Note that PyImport_ExecCodeModuleWithPathnames() is the preferred, richer 663 * interface. The other two exist primarily for backward compatibility. 664 */ 665PyObject * 666PyImport_ExecCodeModule(const char *name, PyObject *co) 667{ 668 return PyImport_ExecCodeModuleWithPathnames( 669 name, co, (char *)NULL, (char *)NULL); 670} 671 672PyObject * 673PyImport_ExecCodeModuleEx(const char *name, PyObject *co, const char *pathname) 674{ 675 return PyImport_ExecCodeModuleWithPathnames( 676 name, co, pathname, (char *)NULL); 677} 678 679PyObject * 680PyImport_ExecCodeModuleWithPathnames(const char *name, PyObject *co, 681 const char *pathname, 682 const char *cpathname) 683{ 684 PyObject *m = NULL; 685 PyObject *nameobj, *pathobj = NULL, *cpathobj = NULL, *external= NULL; 686 687 nameobj = PyUnicode_FromString(name); 688 if (nameobj == NULL) 689 return NULL; 690 691 if (cpathname != NULL) { 692 cpathobj = PyUnicode_DecodeFSDefault(cpathname); 693 if (cpathobj == NULL) 694 goto error; 695 } 696 else 697 cpathobj = NULL; 698 699 if (pathname != NULL) { 700 pathobj = PyUnicode_DecodeFSDefault(pathname); 701 if (pathobj == NULL) 702 goto error; 703 } 704 else if (cpathobj != NULL) { 705 PyInterpreterState *interp = _PyInterpreterState_GET(); 706 707 if (interp == NULL) { 708 Py_FatalError("no current interpreter"); 709 } 710 711 external= PyObject_GetAttrString(interp->importlib, 712 "_bootstrap_external"); 713 if (external != NULL) { 714 pathobj = _PyObject_CallMethodOneArg( 715 external, &_Py_ID(_get_sourcefile), cpathobj); 716 Py_DECREF(external); 717 } 718 if (pathobj == NULL) 719 PyErr_Clear(); 720 } 721 else 722 pathobj = NULL; 723 724 m = PyImport_ExecCodeModuleObject(nameobj, co, pathobj, cpathobj); 725error: 726 Py_DECREF(nameobj); 727 Py_XDECREF(pathobj); 728 Py_XDECREF(cpathobj); 729 return m; 730} 731 732static PyObject * 733module_dict_for_exec(PyThreadState *tstate, PyObject *name) 734{ 735 PyObject *m, *d; 736 737 m = import_add_module(tstate, name); 738 if (m == NULL) 739 return NULL; 740 /* If the module is being reloaded, we get the old module back 741 and re-use its dict to exec the new code. */ 742 d = PyModule_GetDict(m); 743 int r = PyDict_Contains(d, &_Py_ID(__builtins__)); 744 if (r == 0) { 745 r = PyDict_SetItem(d, &_Py_ID(__builtins__), PyEval_GetBuiltins()); 746 } 747 if (r < 0) { 748 remove_module(tstate, name); 749 Py_DECREF(m); 750 return NULL; 751 } 752 753 Py_INCREF(d); 754 Py_DECREF(m); 755 return d; 756} 757 758static PyObject * 759exec_code_in_module(PyThreadState *tstate, PyObject *name, 760 PyObject *module_dict, PyObject *code_object) 761{ 762 PyObject *v, *m; 763 764 v = PyEval_EvalCode(code_object, module_dict, module_dict); 765 if (v == NULL) { 766 remove_module(tstate, name); 767 return NULL; 768 } 769 Py_DECREF(v); 770 771 m = import_get_module(tstate, name); 772 if (m == NULL && !_PyErr_Occurred(tstate)) { 773 _PyErr_Format(tstate, PyExc_ImportError, 774 "Loaded module %R not found in sys.modules", 775 name); 776 } 777 778 return m; 779} 780 781PyObject* 782PyImport_ExecCodeModuleObject(PyObject *name, PyObject *co, PyObject *pathname, 783 PyObject *cpathname) 784{ 785 PyThreadState *tstate = _PyThreadState_GET(); 786 PyObject *d, *external, *res; 787 788 d = module_dict_for_exec(tstate, name); 789 if (d == NULL) { 790 return NULL; 791 } 792 793 if (pathname == NULL) { 794 pathname = ((PyCodeObject *)co)->co_filename; 795 } 796 external = PyObject_GetAttrString(tstate->interp->importlib, 797 "_bootstrap_external"); 798 if (external == NULL) { 799 Py_DECREF(d); 800 return NULL; 801 } 802 res = PyObject_CallMethodObjArgs(external, &_Py_ID(_fix_up_module), 803 d, name, pathname, cpathname, NULL); 804 Py_DECREF(external); 805 if (res != NULL) { 806 Py_DECREF(res); 807 res = exec_code_in_module(tstate, name, d, co); 808 } 809 Py_DECREF(d); 810 return res; 811} 812 813 814static void 815update_code_filenames(PyCodeObject *co, PyObject *oldname, PyObject *newname) 816{ 817 PyObject *constants, *tmp; 818 Py_ssize_t i, n; 819 820 if (PyUnicode_Compare(co->co_filename, oldname)) 821 return; 822 823 Py_INCREF(newname); 824 Py_XSETREF(co->co_filename, newname); 825 826 constants = co->co_consts; 827 n = PyTuple_GET_SIZE(constants); 828 for (i = 0; i < n; i++) { 829 tmp = PyTuple_GET_ITEM(constants, i); 830 if (PyCode_Check(tmp)) 831 update_code_filenames((PyCodeObject *)tmp, 832 oldname, newname); 833 } 834} 835 836static void 837update_compiled_module(PyCodeObject *co, PyObject *newname) 838{ 839 PyObject *oldname; 840 841 if (PyUnicode_Compare(co->co_filename, newname) == 0) 842 return; 843 844 oldname = co->co_filename; 845 Py_INCREF(oldname); 846 update_code_filenames(co, oldname, newname); 847 Py_DECREF(oldname); 848} 849 850/*[clinic input] 851_imp._fix_co_filename 852 853 code: object(type="PyCodeObject *", subclass_of="&PyCode_Type") 854 Code object to change. 855 856 path: unicode 857 File path to use. 858 / 859 860Changes code.co_filename to specify the passed-in file path. 861[clinic start generated code]*/ 862 863static PyObject * 864_imp__fix_co_filename_impl(PyObject *module, PyCodeObject *code, 865 PyObject *path) 866/*[clinic end generated code: output=1d002f100235587d input=895ba50e78b82f05]*/ 867 868{ 869 update_compiled_module(code, path); 870 871 Py_RETURN_NONE; 872} 873 874 875/* Helper to test for built-in module */ 876 877static int 878is_builtin(PyObject *name) 879{ 880 int i; 881 for (i = 0; PyImport_Inittab[i].name != NULL; i++) { 882 if (_PyUnicode_EqualToASCIIString(name, PyImport_Inittab[i].name)) { 883 if (PyImport_Inittab[i].initfunc == NULL) 884 return -1; 885 else 886 return 1; 887 } 888 } 889 return 0; 890} 891 892 893/* Return a finder object for a sys.path/pkg.__path__ item 'p', 894 possibly by fetching it from the path_importer_cache dict. If it 895 wasn't yet cached, traverse path_hooks until a hook is found 896 that can handle the path item. Return None if no hook could; 897 this tells our caller that the path based finder could not find 898 a finder for this path item. Cache the result in 899 path_importer_cache. */ 900 901static PyObject * 902get_path_importer(PyThreadState *tstate, PyObject *path_importer_cache, 903 PyObject *path_hooks, PyObject *p) 904{ 905 PyObject *importer; 906 Py_ssize_t j, nhooks; 907 908 /* These conditions are the caller's responsibility: */ 909 assert(PyList_Check(path_hooks)); 910 assert(PyDict_Check(path_importer_cache)); 911 912 nhooks = PyList_Size(path_hooks); 913 if (nhooks < 0) 914 return NULL; /* Shouldn't happen */ 915 916 importer = PyDict_GetItemWithError(path_importer_cache, p); 917 if (importer != NULL || _PyErr_Occurred(tstate)) { 918 Py_XINCREF(importer); 919 return importer; 920 } 921 922 /* set path_importer_cache[p] to None to avoid recursion */ 923 if (PyDict_SetItem(path_importer_cache, p, Py_None) != 0) 924 return NULL; 925 926 for (j = 0; j < nhooks; j++) { 927 PyObject *hook = PyList_GetItem(path_hooks, j); 928 if (hook == NULL) 929 return NULL; 930 importer = PyObject_CallOneArg(hook, p); 931 if (importer != NULL) 932 break; 933 934 if (!_PyErr_ExceptionMatches(tstate, PyExc_ImportError)) { 935 return NULL; 936 } 937 _PyErr_Clear(tstate); 938 } 939 if (importer == NULL) { 940 Py_RETURN_NONE; 941 } 942 if (PyDict_SetItem(path_importer_cache, p, importer) < 0) { 943 Py_DECREF(importer); 944 return NULL; 945 } 946 return importer; 947} 948 949PyObject * 950PyImport_GetImporter(PyObject *path) 951{ 952 PyThreadState *tstate = _PyThreadState_GET(); 953 PyObject *path_importer_cache = PySys_GetObject("path_importer_cache"); 954 PyObject *path_hooks = PySys_GetObject("path_hooks"); 955 if (path_importer_cache == NULL || path_hooks == NULL) { 956 return NULL; 957 } 958 return get_path_importer(tstate, path_importer_cache, path_hooks, path); 959} 960 961#if defined(__EMSCRIPTEN__) && defined(PY_CALL_TRAMPOLINE) 962#include <emscripten.h> 963EM_JS(PyObject*, _PyImport_InitFunc_TrampolineCall, (PyModInitFunction func), { 964 return wasmTable.get(func)(); 965}); 966#endif // __EMSCRIPTEN__ && PY_CALL_TRAMPOLINE 967 968static PyObject* 969create_builtin(PyThreadState *tstate, PyObject *name, PyObject *spec) 970{ 971 PyObject *mod = import_find_extension(tstate, name, name); 972 if (mod || _PyErr_Occurred(tstate)) { 973 return mod; 974 } 975 976 PyObject *modules = tstate->interp->modules; 977 for (struct _inittab *p = PyImport_Inittab; p->name != NULL; p++) { 978 if (_PyUnicode_EqualToASCIIString(name, p->name)) { 979 if (p->initfunc == NULL) { 980 /* Cannot re-init internal module ("sys" or "builtins") */ 981 mod = PyImport_AddModuleObject(name); 982 return Py_XNewRef(mod); 983 } 984 mod = _PyImport_InitFunc_TrampolineCall(*p->initfunc); 985 if (mod == NULL) { 986 return NULL; 987 } 988 989 if (PyObject_TypeCheck(mod, &PyModuleDef_Type)) { 990 return PyModule_FromDefAndSpec((PyModuleDef*)mod, spec); 991 } 992 else { 993 /* Remember pointer to module init function. */ 994 PyModuleDef *def = PyModule_GetDef(mod); 995 if (def == NULL) { 996 return NULL; 997 } 998 999 def->m_base.m_init = p->initfunc; 1000 if (_PyImport_FixupExtensionObject(mod, name, name, 1001 modules) < 0) { 1002 return NULL; 1003 } 1004 return mod; 1005 } 1006 } 1007 } 1008 1009 // not found 1010 Py_RETURN_NONE; 1011} 1012 1013 1014 1015/*[clinic input] 1016_imp.create_builtin 1017 1018 spec: object 1019 / 1020 1021Create an extension module. 1022[clinic start generated code]*/ 1023 1024static PyObject * 1025_imp_create_builtin(PyObject *module, PyObject *spec) 1026/*[clinic end generated code: output=ace7ff22271e6f39 input=37f966f890384e47]*/ 1027{ 1028 PyThreadState *tstate = _PyThreadState_GET(); 1029 1030 PyObject *name = PyObject_GetAttrString(spec, "name"); 1031 if (name == NULL) { 1032 return NULL; 1033 } 1034 1035 PyObject *mod = create_builtin(tstate, name, spec); 1036 Py_DECREF(name); 1037 return mod; 1038} 1039 1040 1041/* Return true if the name is an alias. In that case, "alias" is set 1042 to the original module name. If it is an alias but the original 1043 module isn't known then "alias" is set to NULL while true is returned. */ 1044static bool 1045resolve_module_alias(const char *name, const struct _module_alias *aliases, 1046 const char **alias) 1047{ 1048 const struct _module_alias *entry; 1049 for (entry = aliases; ; entry++) { 1050 if (entry->name == NULL) { 1051 /* It isn't an alias. */ 1052 return false; 1053 } 1054 if (strcmp(name, entry->name) == 0) { 1055 if (alias != NULL) { 1056 *alias = entry->orig; 1057 } 1058 return true; 1059 } 1060 } 1061} 1062 1063 1064/* Frozen modules */ 1065 1066static bool 1067use_frozen(void) 1068{ 1069 PyInterpreterState *interp = _PyInterpreterState_GET(); 1070 int override = interp->override_frozen_modules; 1071 if (override > 0) { 1072 return true; 1073 } 1074 else if (override < 0) { 1075 return false; 1076 } 1077 else { 1078 return interp->config.use_frozen_modules; 1079 } 1080} 1081 1082static PyObject * 1083list_frozen_module_names(void) 1084{ 1085 PyObject *names = PyList_New(0); 1086 if (names == NULL) { 1087 return NULL; 1088 } 1089 bool enabled = use_frozen(); 1090 const struct _frozen *p; 1091#define ADD_MODULE(name) \ 1092 do { \ 1093 PyObject *nameobj = PyUnicode_FromString(name); \ 1094 if (nameobj == NULL) { \ 1095 goto error; \ 1096 } \ 1097 int res = PyList_Append(names, nameobj); \ 1098 Py_DECREF(nameobj); \ 1099 if (res != 0) { \ 1100 goto error; \ 1101 } \ 1102 } while(0) 1103 // We always use the bootstrap modules. 1104 for (p = _PyImport_FrozenBootstrap; ; p++) { 1105 if (p->name == NULL) { 1106 break; 1107 } 1108 ADD_MODULE(p->name); 1109 } 1110 // Frozen stdlib modules may be disabled. 1111 for (p = _PyImport_FrozenStdlib; ; p++) { 1112 if (p->name == NULL) { 1113 break; 1114 } 1115 if (enabled) { 1116 ADD_MODULE(p->name); 1117 } 1118 } 1119 for (p = _PyImport_FrozenTest; ; p++) { 1120 if (p->name == NULL) { 1121 break; 1122 } 1123 if (enabled) { 1124 ADD_MODULE(p->name); 1125 } 1126 } 1127#undef ADD_MODULE 1128 // Add any custom modules. 1129 if (PyImport_FrozenModules != NULL) { 1130 for (p = PyImport_FrozenModules; ; p++) { 1131 if (p->name == NULL) { 1132 break; 1133 } 1134 PyObject *nameobj = PyUnicode_FromString(p->name); 1135 if (nameobj == NULL) { 1136 goto error; 1137 } 1138 int found = PySequence_Contains(names, nameobj); 1139 if (found < 0) { 1140 Py_DECREF(nameobj); 1141 goto error; 1142 } 1143 else if (found) { 1144 Py_DECREF(nameobj); 1145 } 1146 else { 1147 int res = PyList_Append(names, nameobj); 1148 Py_DECREF(nameobj); 1149 if (res != 0) { 1150 goto error; 1151 } 1152 } 1153 } 1154 } 1155 return names; 1156 1157error: 1158 Py_DECREF(names); 1159 return NULL; 1160} 1161 1162typedef enum { 1163 FROZEN_OKAY, 1164 FROZEN_BAD_NAME, // The given module name wasn't valid. 1165 FROZEN_NOT_FOUND, // It wasn't in PyImport_FrozenModules. 1166 FROZEN_DISABLED, // -X frozen_modules=off (and not essential) 1167 FROZEN_EXCLUDED, /* The PyImport_FrozenModules entry has NULL "code" 1168 (module is present but marked as unimportable, stops search). */ 1169 FROZEN_INVALID, /* The PyImport_FrozenModules entry is bogus 1170 (eg. does not contain executable code). */ 1171} frozen_status; 1172 1173static inline void 1174set_frozen_error(frozen_status status, PyObject *modname) 1175{ 1176 const char *err = NULL; 1177 switch (status) { 1178 case FROZEN_BAD_NAME: 1179 case FROZEN_NOT_FOUND: 1180 err = "No such frozen object named %R"; 1181 break; 1182 case FROZEN_DISABLED: 1183 err = "Frozen modules are disabled and the frozen object named %R is not essential"; 1184 break; 1185 case FROZEN_EXCLUDED: 1186 err = "Excluded frozen object named %R"; 1187 break; 1188 case FROZEN_INVALID: 1189 err = "Frozen object named %R is invalid"; 1190 break; 1191 case FROZEN_OKAY: 1192 // There was no error. 1193 break; 1194 default: 1195 Py_UNREACHABLE(); 1196 } 1197 if (err != NULL) { 1198 PyObject *msg = PyUnicode_FromFormat(err, modname); 1199 if (msg == NULL) { 1200 PyErr_Clear(); 1201 } 1202 PyErr_SetImportError(msg, modname, NULL); 1203 Py_XDECREF(msg); 1204 } 1205} 1206 1207static const struct _frozen * 1208look_up_frozen(const char *name) 1209{ 1210 const struct _frozen *p; 1211 // We always use the bootstrap modules. 1212 for (p = _PyImport_FrozenBootstrap; ; p++) { 1213 if (p->name == NULL) { 1214 // We hit the end-of-list sentinel value. 1215 break; 1216 } 1217 if (strcmp(name, p->name) == 0) { 1218 return p; 1219 } 1220 } 1221 // Prefer custom modules, if any. Frozen stdlib modules can be 1222 // disabled here by setting "code" to NULL in the array entry. 1223 if (PyImport_FrozenModules != NULL) { 1224 for (p = PyImport_FrozenModules; ; p++) { 1225 if (p->name == NULL) { 1226 break; 1227 } 1228 if (strcmp(name, p->name) == 0) { 1229 return p; 1230 } 1231 } 1232 } 1233 // Frozen stdlib modules may be disabled. 1234 if (use_frozen()) { 1235 for (p = _PyImport_FrozenStdlib; ; p++) { 1236 if (p->name == NULL) { 1237 break; 1238 } 1239 if (strcmp(name, p->name) == 0) { 1240 return p; 1241 } 1242 } 1243 for (p = _PyImport_FrozenTest; ; p++) { 1244 if (p->name == NULL) { 1245 break; 1246 } 1247 if (strcmp(name, p->name) == 0) { 1248 return p; 1249 } 1250 } 1251 } 1252 return NULL; 1253} 1254 1255struct frozen_info { 1256 PyObject *nameobj; 1257 const char *data; 1258 PyObject *(*get_code)(void); 1259 Py_ssize_t size; 1260 bool is_package; 1261 bool is_alias; 1262 const char *origname; 1263}; 1264 1265static frozen_status 1266find_frozen(PyObject *nameobj, struct frozen_info *info) 1267{ 1268 if (info != NULL) { 1269 memset(info, 0, sizeof(*info)); 1270 } 1271 1272 if (nameobj == NULL || nameobj == Py_None) { 1273 return FROZEN_BAD_NAME; 1274 } 1275 const char *name = PyUnicode_AsUTF8(nameobj); 1276 if (name == NULL) { 1277 // Note that this function previously used 1278 // _PyUnicode_EqualToASCIIString(). We clear the error here 1279 // (instead of propagating it) to match the earlier behavior 1280 // more closely. 1281 PyErr_Clear(); 1282 return FROZEN_BAD_NAME; 1283 } 1284 1285 const struct _frozen *p = look_up_frozen(name); 1286 if (p == NULL) { 1287 return FROZEN_NOT_FOUND; 1288 } 1289 if (info != NULL) { 1290 info->nameobj = nameobj; // borrowed 1291 info->data = (const char *)p->code; 1292 info->get_code = p->get_code; 1293 info->size = p->size; 1294 info->is_package = p->is_package; 1295 if (p->size < 0) { 1296 // backward compatibility with negative size values 1297 info->size = -(p->size); 1298 info->is_package = true; 1299 } 1300 info->origname = name; 1301 info->is_alias = resolve_module_alias(name, _PyImport_FrozenAliases, 1302 &info->origname); 1303 } 1304 if (p->code == NULL && p->size == 0 && p->get_code != NULL) { 1305 /* It is only deepfrozen. */ 1306 return FROZEN_OKAY; 1307 } 1308 if (p->code == NULL) { 1309 /* It is frozen but marked as un-importable. */ 1310 return FROZEN_EXCLUDED; 1311 } 1312 if (p->code[0] == '\0' || p->size == 0) { 1313 /* Does not contain executable code. */ 1314 return FROZEN_INVALID; 1315 } 1316 return FROZEN_OKAY; 1317} 1318 1319static PyObject * 1320unmarshal_frozen_code(struct frozen_info *info) 1321{ 1322 if (info->get_code) { 1323 PyObject *code = info->get_code(); 1324 assert(code != NULL); 1325 return code; 1326 } 1327 PyObject *co = PyMarshal_ReadObjectFromString(info->data, info->size); 1328 if (co == NULL) { 1329 /* Does not contain executable code. */ 1330 set_frozen_error(FROZEN_INVALID, info->nameobj); 1331 return NULL; 1332 } 1333 if (!PyCode_Check(co)) { 1334 // We stick with TypeError for backward compatibility. 1335 PyErr_Format(PyExc_TypeError, 1336 "frozen object %R is not a code object", 1337 info->nameobj); 1338 Py_DECREF(co); 1339 return NULL; 1340 } 1341 return co; 1342} 1343 1344 1345/* Initialize a frozen module. 1346 Return 1 for success, 0 if the module is not found, and -1 with 1347 an exception set if the initialization failed. 1348 This function is also used from frozenmain.c */ 1349 1350int 1351PyImport_ImportFrozenModuleObject(PyObject *name) 1352{ 1353 PyThreadState *tstate = _PyThreadState_GET(); 1354 PyObject *co, *m, *d = NULL; 1355 int err; 1356 1357 struct frozen_info info; 1358 frozen_status status = find_frozen(name, &info); 1359 if (status == FROZEN_NOT_FOUND || status == FROZEN_DISABLED) { 1360 return 0; 1361 } 1362 else if (status == FROZEN_BAD_NAME) { 1363 return 0; 1364 } 1365 else if (status != FROZEN_OKAY) { 1366 set_frozen_error(status, name); 1367 return -1; 1368 } 1369 co = unmarshal_frozen_code(&info); 1370 if (co == NULL) { 1371 return -1; 1372 } 1373 if (info.is_package) { 1374 /* Set __path__ to the empty list */ 1375 PyObject *l; 1376 m = import_add_module(tstate, name); 1377 if (m == NULL) 1378 goto err_return; 1379 d = PyModule_GetDict(m); 1380 l = PyList_New(0); 1381 if (l == NULL) { 1382 Py_DECREF(m); 1383 goto err_return; 1384 } 1385 err = PyDict_SetItemString(d, "__path__", l); 1386 Py_DECREF(l); 1387 Py_DECREF(m); 1388 if (err != 0) 1389 goto err_return; 1390 } 1391 d = module_dict_for_exec(tstate, name); 1392 if (d == NULL) { 1393 goto err_return; 1394 } 1395 m = exec_code_in_module(tstate, name, d, co); 1396 if (m == NULL) { 1397 goto err_return; 1398 } 1399 Py_DECREF(m); 1400 /* Set __origname__ (consumed in FrozenImporter._setup_module()). */ 1401 PyObject *origname; 1402 if (info.origname) { 1403 origname = PyUnicode_FromString(info.origname); 1404 if (origname == NULL) { 1405 goto err_return; 1406 } 1407 } 1408 else { 1409 Py_INCREF(Py_None); 1410 origname = Py_None; 1411 } 1412 err = PyDict_SetItemString(d, "__origname__", origname); 1413 Py_DECREF(origname); 1414 if (err != 0) { 1415 goto err_return; 1416 } 1417 Py_DECREF(d); 1418 Py_DECREF(co); 1419 return 1; 1420 1421err_return: 1422 Py_XDECREF(d); 1423 Py_DECREF(co); 1424 return -1; 1425} 1426 1427int 1428PyImport_ImportFrozenModule(const char *name) 1429{ 1430 PyObject *nameobj; 1431 int ret; 1432 nameobj = PyUnicode_InternFromString(name); 1433 if (nameobj == NULL) 1434 return -1; 1435 ret = PyImport_ImportFrozenModuleObject(nameobj); 1436 Py_DECREF(nameobj); 1437 return ret; 1438} 1439 1440 1441/* Import a module, either built-in, frozen, or external, and return 1442 its module object WITH INCREMENTED REFERENCE COUNT */ 1443 1444PyObject * 1445PyImport_ImportModule(const char *name) 1446{ 1447 PyObject *pname; 1448 PyObject *result; 1449 1450 pname = PyUnicode_FromString(name); 1451 if (pname == NULL) 1452 return NULL; 1453 result = PyImport_Import(pname); 1454 Py_DECREF(pname); 1455 return result; 1456} 1457 1458 1459/* Import a module without blocking 1460 * 1461 * At first it tries to fetch the module from sys.modules. If the module was 1462 * never loaded before it loads it with PyImport_ImportModule() unless another 1463 * thread holds the import lock. In the latter case the function raises an 1464 * ImportError instead of blocking. 1465 * 1466 * Returns the module object with incremented ref count. 1467 */ 1468PyObject * 1469PyImport_ImportModuleNoBlock(const char *name) 1470{ 1471 return PyImport_ImportModule(name); 1472} 1473 1474 1475/* Remove importlib frames from the traceback, 1476 * except in Verbose mode. */ 1477static void 1478remove_importlib_frames(PyThreadState *tstate) 1479{ 1480 const char *importlib_filename = "<frozen importlib._bootstrap>"; 1481 const char *external_filename = "<frozen importlib._bootstrap_external>"; 1482 const char *remove_frames = "_call_with_frames_removed"; 1483 int always_trim = 0; 1484 int in_importlib = 0; 1485 PyObject *exception, *value, *base_tb, *tb; 1486 PyObject **prev_link, **outer_link = NULL; 1487 1488 /* Synopsis: if it's an ImportError, we trim all importlib chunks 1489 from the traceback. We always trim chunks 1490 which end with a call to "_call_with_frames_removed". */ 1491 1492 _PyErr_Fetch(tstate, &exception, &value, &base_tb); 1493 if (!exception || _PyInterpreterState_GetConfig(tstate->interp)->verbose) { 1494 goto done; 1495 } 1496 1497 if (PyType_IsSubtype((PyTypeObject *) exception, 1498 (PyTypeObject *) PyExc_ImportError)) 1499 always_trim = 1; 1500 1501 prev_link = &base_tb; 1502 tb = base_tb; 1503 while (tb != NULL) { 1504 PyTracebackObject *traceback = (PyTracebackObject *)tb; 1505 PyObject *next = (PyObject *) traceback->tb_next; 1506 PyFrameObject *frame = traceback->tb_frame; 1507 PyCodeObject *code = PyFrame_GetCode(frame); 1508 int now_in_importlib; 1509 1510 assert(PyTraceBack_Check(tb)); 1511 now_in_importlib = _PyUnicode_EqualToASCIIString(code->co_filename, importlib_filename) || 1512 _PyUnicode_EqualToASCIIString(code->co_filename, external_filename); 1513 if (now_in_importlib && !in_importlib) { 1514 /* This is the link to this chunk of importlib tracebacks */ 1515 outer_link = prev_link; 1516 } 1517 in_importlib = now_in_importlib; 1518 1519 if (in_importlib && 1520 (always_trim || 1521 _PyUnicode_EqualToASCIIString(code->co_name, remove_frames))) { 1522 Py_XINCREF(next); 1523 Py_XSETREF(*outer_link, next); 1524 prev_link = outer_link; 1525 } 1526 else { 1527 prev_link = (PyObject **) &traceback->tb_next; 1528 } 1529 Py_DECREF(code); 1530 tb = next; 1531 } 1532done: 1533 _PyErr_Restore(tstate, exception, value, base_tb); 1534} 1535 1536 1537static PyObject * 1538resolve_name(PyThreadState *tstate, PyObject *name, PyObject *globals, int level) 1539{ 1540 PyObject *abs_name; 1541 PyObject *package = NULL; 1542 PyObject *spec; 1543 Py_ssize_t last_dot; 1544 PyObject *base; 1545 int level_up; 1546 1547 if (globals == NULL) { 1548 _PyErr_SetString(tstate, PyExc_KeyError, "'__name__' not in globals"); 1549 goto error; 1550 } 1551 if (!PyDict_Check(globals)) { 1552 _PyErr_SetString(tstate, PyExc_TypeError, "globals must be a dict"); 1553 goto error; 1554 } 1555 package = PyDict_GetItemWithError(globals, &_Py_ID(__package__)); 1556 if (package == Py_None) { 1557 package = NULL; 1558 } 1559 else if (package == NULL && _PyErr_Occurred(tstate)) { 1560 goto error; 1561 } 1562 spec = PyDict_GetItemWithError(globals, &_Py_ID(__spec__)); 1563 if (spec == NULL && _PyErr_Occurred(tstate)) { 1564 goto error; 1565 } 1566 1567 if (package != NULL) { 1568 Py_INCREF(package); 1569 if (!PyUnicode_Check(package)) { 1570 _PyErr_SetString(tstate, PyExc_TypeError, 1571 "package must be a string"); 1572 goto error; 1573 } 1574 else if (spec != NULL && spec != Py_None) { 1575 int equal; 1576 PyObject *parent = PyObject_GetAttr(spec, &_Py_ID(parent)); 1577 if (parent == NULL) { 1578 goto error; 1579 } 1580 1581 equal = PyObject_RichCompareBool(package, parent, Py_EQ); 1582 Py_DECREF(parent); 1583 if (equal < 0) { 1584 goto error; 1585 } 1586 else if (equal == 0) { 1587 if (PyErr_WarnEx(PyExc_ImportWarning, 1588 "__package__ != __spec__.parent", 1) < 0) { 1589 goto error; 1590 } 1591 } 1592 } 1593 } 1594 else if (spec != NULL && spec != Py_None) { 1595 package = PyObject_GetAttr(spec, &_Py_ID(parent)); 1596 if (package == NULL) { 1597 goto error; 1598 } 1599 else if (!PyUnicode_Check(package)) { 1600 _PyErr_SetString(tstate, PyExc_TypeError, 1601 "__spec__.parent must be a string"); 1602 goto error; 1603 } 1604 } 1605 else { 1606 if (PyErr_WarnEx(PyExc_ImportWarning, 1607 "can't resolve package from __spec__ or __package__, " 1608 "falling back on __name__ and __path__", 1) < 0) { 1609 goto error; 1610 } 1611 1612 package = PyDict_GetItemWithError(globals, &_Py_ID(__name__)); 1613 if (package == NULL) { 1614 if (!_PyErr_Occurred(tstate)) { 1615 _PyErr_SetString(tstate, PyExc_KeyError, 1616 "'__name__' not in globals"); 1617 } 1618 goto error; 1619 } 1620 1621 Py_INCREF(package); 1622 if (!PyUnicode_Check(package)) { 1623 _PyErr_SetString(tstate, PyExc_TypeError, 1624 "__name__ must be a string"); 1625 goto error; 1626 } 1627 1628 int haspath = PyDict_Contains(globals, &_Py_ID(__path__)); 1629 if (haspath < 0) { 1630 goto error; 1631 } 1632 if (!haspath) { 1633 Py_ssize_t dot; 1634 1635 if (PyUnicode_READY(package) < 0) { 1636 goto error; 1637 } 1638 1639 dot = PyUnicode_FindChar(package, '.', 1640 0, PyUnicode_GET_LENGTH(package), -1); 1641 if (dot == -2) { 1642 goto error; 1643 } 1644 else if (dot == -1) { 1645 goto no_parent_error; 1646 } 1647 PyObject *substr = PyUnicode_Substring(package, 0, dot); 1648 if (substr == NULL) { 1649 goto error; 1650 } 1651 Py_SETREF(package, substr); 1652 } 1653 } 1654 1655 last_dot = PyUnicode_GET_LENGTH(package); 1656 if (last_dot == 0) { 1657 goto no_parent_error; 1658 } 1659 1660 for (level_up = 1; level_up < level; level_up += 1) { 1661 last_dot = PyUnicode_FindChar(package, '.', 0, last_dot, -1); 1662 if (last_dot == -2) { 1663 goto error; 1664 } 1665 else if (last_dot == -1) { 1666 _PyErr_SetString(tstate, PyExc_ImportError, 1667 "attempted relative import beyond top-level " 1668 "package"); 1669 goto error; 1670 } 1671 } 1672 1673 base = PyUnicode_Substring(package, 0, last_dot); 1674 Py_DECREF(package); 1675 if (base == NULL || PyUnicode_GET_LENGTH(name) == 0) { 1676 return base; 1677 } 1678 1679 abs_name = PyUnicode_FromFormat("%U.%U", base, name); 1680 Py_DECREF(base); 1681 return abs_name; 1682 1683 no_parent_error: 1684 _PyErr_SetString(tstate, PyExc_ImportError, 1685 "attempted relative import " 1686 "with no known parent package"); 1687 1688 error: 1689 Py_XDECREF(package); 1690 return NULL; 1691} 1692 1693static PyObject * 1694import_find_and_load(PyThreadState *tstate, PyObject *abs_name) 1695{ 1696 PyObject *mod = NULL; 1697 PyInterpreterState *interp = tstate->interp; 1698 int import_time = _PyInterpreterState_GetConfig(interp)->import_time; 1699 static int import_level; 1700 static _PyTime_t accumulated; 1701 1702 _PyTime_t t1 = 0, accumulated_copy = accumulated; 1703 1704 PyObject *sys_path = PySys_GetObject("path"); 1705 PyObject *sys_meta_path = PySys_GetObject("meta_path"); 1706 PyObject *sys_path_hooks = PySys_GetObject("path_hooks"); 1707 if (_PySys_Audit(tstate, "import", "OOOOO", 1708 abs_name, Py_None, sys_path ? sys_path : Py_None, 1709 sys_meta_path ? sys_meta_path : Py_None, 1710 sys_path_hooks ? sys_path_hooks : Py_None) < 0) { 1711 return NULL; 1712 } 1713 1714 1715 /* XOptions is initialized after first some imports. 1716 * So we can't have negative cache before completed initialization. 1717 * Anyway, importlib._find_and_load is much slower than 1718 * _PyDict_GetItemIdWithError(). 1719 */ 1720 if (import_time) { 1721 static int header = 1; 1722 if (header) { 1723 fputs("import time: self [us] | cumulative | imported package\n", 1724 stderr); 1725 header = 0; 1726 } 1727 1728 import_level++; 1729 t1 = _PyTime_GetPerfCounter(); 1730 accumulated = 0; 1731 } 1732 1733 if (PyDTrace_IMPORT_FIND_LOAD_START_ENABLED()) 1734 PyDTrace_IMPORT_FIND_LOAD_START(PyUnicode_AsUTF8(abs_name)); 1735 1736 mod = PyObject_CallMethodObjArgs(interp->importlib, &_Py_ID(_find_and_load), 1737 abs_name, interp->import_func, NULL); 1738 1739 if (PyDTrace_IMPORT_FIND_LOAD_DONE_ENABLED()) 1740 PyDTrace_IMPORT_FIND_LOAD_DONE(PyUnicode_AsUTF8(abs_name), 1741 mod != NULL); 1742 1743 if (import_time) { 1744 _PyTime_t cum = _PyTime_GetPerfCounter() - t1; 1745 1746 import_level--; 1747 fprintf(stderr, "import time: %9ld | %10ld | %*s%s\n", 1748 (long)_PyTime_AsMicroseconds(cum - accumulated, _PyTime_ROUND_CEILING), 1749 (long)_PyTime_AsMicroseconds(cum, _PyTime_ROUND_CEILING), 1750 import_level*2, "", PyUnicode_AsUTF8(abs_name)); 1751 1752 accumulated = accumulated_copy + cum; 1753 } 1754 1755 return mod; 1756} 1757 1758PyObject * 1759PyImport_GetModule(PyObject *name) 1760{ 1761 PyThreadState *tstate = _PyThreadState_GET(); 1762 PyObject *mod; 1763 1764 mod = import_get_module(tstate, name); 1765 if (mod != NULL && mod != Py_None) { 1766 if (import_ensure_initialized(tstate->interp, mod, name) < 0) { 1767 Py_DECREF(mod); 1768 remove_importlib_frames(tstate); 1769 return NULL; 1770 } 1771 } 1772 return mod; 1773} 1774 1775PyObject * 1776PyImport_ImportModuleLevelObject(PyObject *name, PyObject *globals, 1777 PyObject *locals, PyObject *fromlist, 1778 int level) 1779{ 1780 PyThreadState *tstate = _PyThreadState_GET(); 1781 PyObject *abs_name = NULL; 1782 PyObject *final_mod = NULL; 1783 PyObject *mod = NULL; 1784 PyObject *package = NULL; 1785 PyInterpreterState *interp = tstate->interp; 1786 int has_from; 1787 1788 if (name == NULL) { 1789 _PyErr_SetString(tstate, PyExc_ValueError, "Empty module name"); 1790 goto error; 1791 } 1792 1793 /* The below code is importlib.__import__() & _gcd_import(), ported to C 1794 for added performance. */ 1795 1796 if (!PyUnicode_Check(name)) { 1797 _PyErr_SetString(tstate, PyExc_TypeError, 1798 "module name must be a string"); 1799 goto error; 1800 } 1801 if (PyUnicode_READY(name) < 0) { 1802 goto error; 1803 } 1804 if (level < 0) { 1805 _PyErr_SetString(tstate, PyExc_ValueError, "level must be >= 0"); 1806 goto error; 1807 } 1808 1809 if (level > 0) { 1810 abs_name = resolve_name(tstate, name, globals, level); 1811 if (abs_name == NULL) 1812 goto error; 1813 } 1814 else { /* level == 0 */ 1815 if (PyUnicode_GET_LENGTH(name) == 0) { 1816 _PyErr_SetString(tstate, PyExc_ValueError, "Empty module name"); 1817 goto error; 1818 } 1819 abs_name = name; 1820 Py_INCREF(abs_name); 1821 } 1822 1823 mod = import_get_module(tstate, abs_name); 1824 if (mod == NULL && _PyErr_Occurred(tstate)) { 1825 goto error; 1826 } 1827 1828 if (mod != NULL && mod != Py_None) { 1829 if (import_ensure_initialized(tstate->interp, mod, abs_name) < 0) { 1830 goto error; 1831 } 1832 } 1833 else { 1834 Py_XDECREF(mod); 1835 mod = import_find_and_load(tstate, abs_name); 1836 if (mod == NULL) { 1837 goto error; 1838 } 1839 } 1840 1841 has_from = 0; 1842 if (fromlist != NULL && fromlist != Py_None) { 1843 has_from = PyObject_IsTrue(fromlist); 1844 if (has_from < 0) 1845 goto error; 1846 } 1847 if (!has_from) { 1848 Py_ssize_t len = PyUnicode_GET_LENGTH(name); 1849 if (level == 0 || len > 0) { 1850 Py_ssize_t dot; 1851 1852 dot = PyUnicode_FindChar(name, '.', 0, len, 1); 1853 if (dot == -2) { 1854 goto error; 1855 } 1856 1857 if (dot == -1) { 1858 /* No dot in module name, simple exit */ 1859 final_mod = mod; 1860 Py_INCREF(mod); 1861 goto error; 1862 } 1863 1864 if (level == 0) { 1865 PyObject *front = PyUnicode_Substring(name, 0, dot); 1866 if (front == NULL) { 1867 goto error; 1868 } 1869 1870 final_mod = PyImport_ImportModuleLevelObject(front, NULL, NULL, NULL, 0); 1871 Py_DECREF(front); 1872 } 1873 else { 1874 Py_ssize_t cut_off = len - dot; 1875 Py_ssize_t abs_name_len = PyUnicode_GET_LENGTH(abs_name); 1876 PyObject *to_return = PyUnicode_Substring(abs_name, 0, 1877 abs_name_len - cut_off); 1878 if (to_return == NULL) { 1879 goto error; 1880 } 1881 1882 final_mod = import_get_module(tstate, to_return); 1883 Py_DECREF(to_return); 1884 if (final_mod == NULL) { 1885 if (!_PyErr_Occurred(tstate)) { 1886 _PyErr_Format(tstate, PyExc_KeyError, 1887 "%R not in sys.modules as expected", 1888 to_return); 1889 } 1890 goto error; 1891 } 1892 } 1893 } 1894 else { 1895 final_mod = mod; 1896 Py_INCREF(mod); 1897 } 1898 } 1899 else { 1900 PyObject *path; 1901 if (_PyObject_LookupAttr(mod, &_Py_ID(__path__), &path) < 0) { 1902 goto error; 1903 } 1904 if (path) { 1905 Py_DECREF(path); 1906 final_mod = PyObject_CallMethodObjArgs( 1907 interp->importlib, &_Py_ID(_handle_fromlist), 1908 mod, fromlist, interp->import_func, NULL); 1909 } 1910 else { 1911 final_mod = mod; 1912 Py_INCREF(mod); 1913 } 1914 } 1915 1916 error: 1917 Py_XDECREF(abs_name); 1918 Py_XDECREF(mod); 1919 Py_XDECREF(package); 1920 if (final_mod == NULL) { 1921 remove_importlib_frames(tstate); 1922 } 1923 return final_mod; 1924} 1925 1926PyObject * 1927PyImport_ImportModuleLevel(const char *name, PyObject *globals, PyObject *locals, 1928 PyObject *fromlist, int level) 1929{ 1930 PyObject *nameobj, *mod; 1931 nameobj = PyUnicode_FromString(name); 1932 if (nameobj == NULL) 1933 return NULL; 1934 mod = PyImport_ImportModuleLevelObject(nameobj, globals, locals, 1935 fromlist, level); 1936 Py_DECREF(nameobj); 1937 return mod; 1938} 1939 1940 1941/* Re-import a module of any kind and return its module object, WITH 1942 INCREMENTED REFERENCE COUNT */ 1943 1944PyObject * 1945PyImport_ReloadModule(PyObject *m) 1946{ 1947 PyObject *reloaded_module = NULL; 1948 PyObject *importlib = PyImport_GetModule(&_Py_ID(importlib)); 1949 if (importlib == NULL) { 1950 if (PyErr_Occurred()) { 1951 return NULL; 1952 } 1953 1954 importlib = PyImport_ImportModule("importlib"); 1955 if (importlib == NULL) { 1956 return NULL; 1957 } 1958 } 1959 1960 reloaded_module = PyObject_CallMethodOneArg(importlib, &_Py_ID(reload), m); 1961 Py_DECREF(importlib); 1962 return reloaded_module; 1963} 1964 1965 1966/* Higher-level import emulator which emulates the "import" statement 1967 more accurately -- it invokes the __import__() function from the 1968 builtins of the current globals. This means that the import is 1969 done using whatever import hooks are installed in the current 1970 environment. 1971 A dummy list ["__doc__"] is passed as the 4th argument so that 1972 e.g. PyImport_Import(PyUnicode_FromString("win32com.client.gencache")) 1973 will return <module "gencache"> instead of <module "win32com">. */ 1974 1975PyObject * 1976PyImport_Import(PyObject *module_name) 1977{ 1978 PyThreadState *tstate = _PyThreadState_GET(); 1979 PyObject *globals = NULL; 1980 PyObject *import = NULL; 1981 PyObject *builtins = NULL; 1982 PyObject *r = NULL; 1983 1984 PyObject *from_list = PyList_New(0); 1985 if (from_list == NULL) { 1986 goto err; 1987 } 1988 1989 /* Get the builtins from current globals */ 1990 globals = PyEval_GetGlobals(); 1991 if (globals != NULL) { 1992 Py_INCREF(globals); 1993 builtins = PyObject_GetItem(globals, &_Py_ID(__builtins__)); 1994 if (builtins == NULL) 1995 goto err; 1996 } 1997 else { 1998 /* No globals -- use standard builtins, and fake globals */ 1999 builtins = PyImport_ImportModuleLevel("builtins", 2000 NULL, NULL, NULL, 0); 2001 if (builtins == NULL) { 2002 goto err; 2003 } 2004 globals = Py_BuildValue("{OO}", &_Py_ID(__builtins__), builtins); 2005 if (globals == NULL) 2006 goto err; 2007 } 2008 2009 /* Get the __import__ function from the builtins */ 2010 if (PyDict_Check(builtins)) { 2011 import = PyObject_GetItem(builtins, &_Py_ID(__import__)); 2012 if (import == NULL) { 2013 _PyErr_SetObject(tstate, PyExc_KeyError, &_Py_ID(__import__)); 2014 } 2015 } 2016 else 2017 import = PyObject_GetAttr(builtins, &_Py_ID(__import__)); 2018 if (import == NULL) 2019 goto err; 2020 2021 /* Call the __import__ function with the proper argument list 2022 Always use absolute import here. 2023 Calling for side-effect of import. */ 2024 r = PyObject_CallFunction(import, "OOOOi", module_name, globals, 2025 globals, from_list, 0, NULL); 2026 if (r == NULL) 2027 goto err; 2028 Py_DECREF(r); 2029 2030 r = import_get_module(tstate, module_name); 2031 if (r == NULL && !_PyErr_Occurred(tstate)) { 2032 _PyErr_SetObject(tstate, PyExc_KeyError, module_name); 2033 } 2034 2035 err: 2036 Py_XDECREF(globals); 2037 Py_XDECREF(builtins); 2038 Py_XDECREF(import); 2039 Py_XDECREF(from_list); 2040 2041 return r; 2042} 2043 2044/*[clinic input] 2045_imp.extension_suffixes 2046 2047Returns the list of file suffixes used to identify extension modules. 2048[clinic start generated code]*/ 2049 2050static PyObject * 2051_imp_extension_suffixes_impl(PyObject *module) 2052/*[clinic end generated code: output=0bf346e25a8f0cd3 input=ecdeeecfcb6f839e]*/ 2053{ 2054 PyObject *list; 2055 2056 list = PyList_New(0); 2057 if (list == NULL) 2058 return NULL; 2059#ifdef HAVE_DYNAMIC_LOADING 2060 const char *suffix; 2061 unsigned int index = 0; 2062 2063 while ((suffix = _PyImport_DynLoadFiletab[index])) { 2064 PyObject *item = PyUnicode_FromString(suffix); 2065 if (item == NULL) { 2066 Py_DECREF(list); 2067 return NULL; 2068 } 2069 if (PyList_Append(list, item) < 0) { 2070 Py_DECREF(list); 2071 Py_DECREF(item); 2072 return NULL; 2073 } 2074 Py_DECREF(item); 2075 index += 1; 2076 } 2077#endif 2078 return list; 2079} 2080 2081/*[clinic input] 2082_imp.init_frozen 2083 2084 name: unicode 2085 / 2086 2087Initializes a frozen module. 2088[clinic start generated code]*/ 2089 2090static PyObject * 2091_imp_init_frozen_impl(PyObject *module, PyObject *name) 2092/*[clinic end generated code: output=fc0511ed869fd69c input=13019adfc04f3fb3]*/ 2093{ 2094 PyThreadState *tstate = _PyThreadState_GET(); 2095 int ret; 2096 2097 ret = PyImport_ImportFrozenModuleObject(name); 2098 if (ret < 0) 2099 return NULL; 2100 if (ret == 0) { 2101 Py_RETURN_NONE; 2102 } 2103 return import_add_module(tstate, name); 2104} 2105 2106/*[clinic input] 2107_imp.find_frozen 2108 2109 name: unicode 2110 / 2111 * 2112 withdata: bool = False 2113 2114Return info about the corresponding frozen module (if there is one) or None. 2115 2116The returned info (a 2-tuple): 2117 2118 * data the raw marshalled bytes 2119 * is_package whether or not it is a package 2120 * origname the originally frozen module's name, or None if not 2121 a stdlib module (this will usually be the same as 2122 the module's current name) 2123[clinic start generated code]*/ 2124 2125static PyObject * 2126_imp_find_frozen_impl(PyObject *module, PyObject *name, int withdata) 2127/*[clinic end generated code: output=8c1c3c7f925397a5 input=22a8847c201542fd]*/ 2128{ 2129 struct frozen_info info; 2130 frozen_status status = find_frozen(name, &info); 2131 if (status == FROZEN_NOT_FOUND || status == FROZEN_DISABLED) { 2132 Py_RETURN_NONE; 2133 } 2134 else if (status == FROZEN_BAD_NAME) { 2135 Py_RETURN_NONE; 2136 } 2137 else if (status != FROZEN_OKAY) { 2138 set_frozen_error(status, name); 2139 return NULL; 2140 } 2141 2142 PyObject *data = NULL; 2143 if (withdata) { 2144 data = PyMemoryView_FromMemory((char *)info.data, info.size, PyBUF_READ); 2145 if (data == NULL) { 2146 return NULL; 2147 } 2148 } 2149 2150 PyObject *origname = NULL; 2151 if (info.origname != NULL && info.origname[0] != '\0') { 2152 origname = PyUnicode_FromString(info.origname); 2153 if (origname == NULL) { 2154 Py_DECREF(data); 2155 return NULL; 2156 } 2157 } 2158 2159 PyObject *result = PyTuple_Pack(3, data ? data : Py_None, 2160 info.is_package ? Py_True : Py_False, 2161 origname ? origname : Py_None); 2162 Py_XDECREF(origname); 2163 Py_XDECREF(data); 2164 return result; 2165} 2166 2167/*[clinic input] 2168_imp.get_frozen_object 2169 2170 name: unicode 2171 data as dataobj: object = None 2172 / 2173 2174Create a code object for a frozen module. 2175[clinic start generated code]*/ 2176 2177static PyObject * 2178_imp_get_frozen_object_impl(PyObject *module, PyObject *name, 2179 PyObject *dataobj) 2180/*[clinic end generated code: output=54368a673a35e745 input=034bdb88f6460b7b]*/ 2181{ 2182 struct frozen_info info = {0}; 2183 Py_buffer buf = {0}; 2184 if (PyObject_CheckBuffer(dataobj)) { 2185 if (PyObject_GetBuffer(dataobj, &buf, PyBUF_READ) != 0) { 2186 return NULL; 2187 } 2188 info.data = (const char *)buf.buf; 2189 info.size = buf.len; 2190 } 2191 else if (dataobj != Py_None) { 2192 _PyArg_BadArgument("get_frozen_object", "argument 2", "bytes", dataobj); 2193 return NULL; 2194 } 2195 else { 2196 frozen_status status = find_frozen(name, &info); 2197 if (status != FROZEN_OKAY) { 2198 set_frozen_error(status, name); 2199 return NULL; 2200 } 2201 } 2202 2203 if (info.nameobj == NULL) { 2204 info.nameobj = name; 2205 } 2206 if (info.size == 0 && info.get_code == NULL) { 2207 /* Does not contain executable code. */ 2208 set_frozen_error(FROZEN_INVALID, name); 2209 return NULL; 2210 } 2211 2212 PyObject *codeobj = unmarshal_frozen_code(&info); 2213 if (dataobj != Py_None) { 2214 PyBuffer_Release(&buf); 2215 } 2216 return codeobj; 2217} 2218 2219/*[clinic input] 2220_imp.is_frozen_package 2221 2222 name: unicode 2223 / 2224 2225Returns True if the module name is of a frozen package. 2226[clinic start generated code]*/ 2227 2228static PyObject * 2229_imp_is_frozen_package_impl(PyObject *module, PyObject *name) 2230/*[clinic end generated code: output=e70cbdb45784a1c9 input=81b6cdecd080fbb8]*/ 2231{ 2232 struct frozen_info info; 2233 frozen_status status = find_frozen(name, &info); 2234 if (status != FROZEN_OKAY && status != FROZEN_EXCLUDED) { 2235 set_frozen_error(status, name); 2236 return NULL; 2237 } 2238 return PyBool_FromLong(info.is_package); 2239} 2240 2241/*[clinic input] 2242_imp.is_builtin 2243 2244 name: unicode 2245 / 2246 2247Returns True if the module name corresponds to a built-in module. 2248[clinic start generated code]*/ 2249 2250static PyObject * 2251_imp_is_builtin_impl(PyObject *module, PyObject *name) 2252/*[clinic end generated code: output=3bfd1162e2d3be82 input=86befdac021dd1c7]*/ 2253{ 2254 return PyLong_FromLong(is_builtin(name)); 2255} 2256 2257/*[clinic input] 2258_imp.is_frozen 2259 2260 name: unicode 2261 / 2262 2263Returns True if the module name corresponds to a frozen module. 2264[clinic start generated code]*/ 2265 2266static PyObject * 2267_imp_is_frozen_impl(PyObject *module, PyObject *name) 2268/*[clinic end generated code: output=01f408f5ec0f2577 input=7301dbca1897d66b]*/ 2269{ 2270 struct frozen_info info; 2271 frozen_status status = find_frozen(name, &info); 2272 if (status != FROZEN_OKAY) { 2273 Py_RETURN_FALSE; 2274 } 2275 Py_RETURN_TRUE; 2276} 2277 2278/*[clinic input] 2279_imp._frozen_module_names 2280 2281Returns the list of available frozen modules. 2282[clinic start generated code]*/ 2283 2284static PyObject * 2285_imp__frozen_module_names_impl(PyObject *module) 2286/*[clinic end generated code: output=80609ef6256310a8 input=76237fbfa94460d2]*/ 2287{ 2288 return list_frozen_module_names(); 2289} 2290 2291/*[clinic input] 2292_imp._override_frozen_modules_for_tests 2293 2294 override: int 2295 / 2296 2297(internal-only) Override PyConfig.use_frozen_modules. 2298 2299(-1: "off", 1: "on", 0: no override) 2300See frozen_modules() in Lib/test/support/import_helper.py. 2301[clinic start generated code]*/ 2302 2303static PyObject * 2304_imp__override_frozen_modules_for_tests_impl(PyObject *module, int override) 2305/*[clinic end generated code: output=36d5cb1594160811 input=8f1f95a3ef21aec3]*/ 2306{ 2307 PyInterpreterState *interp = _PyInterpreterState_GET(); 2308 interp->override_frozen_modules = override; 2309 Py_RETURN_NONE; 2310} 2311 2312/* Common implementation for _imp.exec_dynamic and _imp.exec_builtin */ 2313static int 2314exec_builtin_or_dynamic(PyObject *mod) { 2315 PyModuleDef *def; 2316 void *state; 2317 2318 if (!PyModule_Check(mod)) { 2319 return 0; 2320 } 2321 2322 def = PyModule_GetDef(mod); 2323 if (def == NULL) { 2324 return 0; 2325 } 2326 2327 state = PyModule_GetState(mod); 2328 if (state) { 2329 /* Already initialized; skip reload */ 2330 return 0; 2331 } 2332 2333 return PyModule_ExecDef(mod, def); 2334} 2335 2336#ifdef HAVE_DYNAMIC_LOADING 2337 2338/*[clinic input] 2339_imp.create_dynamic 2340 2341 spec: object 2342 file: object = NULL 2343 / 2344 2345Create an extension module. 2346[clinic start generated code]*/ 2347 2348static PyObject * 2349_imp_create_dynamic_impl(PyObject *module, PyObject *spec, PyObject *file) 2350/*[clinic end generated code: output=83249b827a4fde77 input=c31b954f4cf4e09d]*/ 2351{ 2352 PyObject *mod, *name, *path; 2353 FILE *fp; 2354 2355 name = PyObject_GetAttrString(spec, "name"); 2356 if (name == NULL) { 2357 return NULL; 2358 } 2359 2360 path = PyObject_GetAttrString(spec, "origin"); 2361 if (path == NULL) { 2362 Py_DECREF(name); 2363 return NULL; 2364 } 2365 2366 PyThreadState *tstate = _PyThreadState_GET(); 2367 mod = import_find_extension(tstate, name, path); 2368 if (mod != NULL || PyErr_Occurred()) { 2369 Py_DECREF(name); 2370 Py_DECREF(path); 2371 return mod; 2372 } 2373 2374 if (file != NULL) { 2375 fp = _Py_fopen_obj(path, "r"); 2376 if (fp == NULL) { 2377 Py_DECREF(name); 2378 Py_DECREF(path); 2379 return NULL; 2380 } 2381 } 2382 else 2383 fp = NULL; 2384 2385 mod = _PyImport_LoadDynamicModuleWithSpec(spec, fp); 2386 2387 Py_DECREF(name); 2388 Py_DECREF(path); 2389 if (fp) 2390 fclose(fp); 2391 return mod; 2392} 2393 2394/*[clinic input] 2395_imp.exec_dynamic -> int 2396 2397 mod: object 2398 / 2399 2400Initialize an extension module. 2401[clinic start generated code]*/ 2402 2403static int 2404_imp_exec_dynamic_impl(PyObject *module, PyObject *mod) 2405/*[clinic end generated code: output=f5720ac7b465877d input=9fdbfcb250280d3a]*/ 2406{ 2407 return exec_builtin_or_dynamic(mod); 2408} 2409 2410 2411#endif /* HAVE_DYNAMIC_LOADING */ 2412 2413/*[clinic input] 2414_imp.exec_builtin -> int 2415 2416 mod: object 2417 / 2418 2419Initialize a built-in module. 2420[clinic start generated code]*/ 2421 2422static int 2423_imp_exec_builtin_impl(PyObject *module, PyObject *mod) 2424/*[clinic end generated code: output=0262447b240c038e input=7beed5a2f12a60ca]*/ 2425{ 2426 return exec_builtin_or_dynamic(mod); 2427} 2428 2429/*[clinic input] 2430_imp.source_hash 2431 2432 key: long 2433 source: Py_buffer 2434[clinic start generated code]*/ 2435 2436static PyObject * 2437_imp_source_hash_impl(PyObject *module, long key, Py_buffer *source) 2438/*[clinic end generated code: output=edb292448cf399ea input=9aaad1e590089789]*/ 2439{ 2440 union { 2441 uint64_t x; 2442 char data[sizeof(uint64_t)]; 2443 } hash; 2444 hash.x = _Py_KeyedHash((uint64_t)key, source->buf, source->len); 2445#if !PY_LITTLE_ENDIAN 2446 // Force to little-endian. There really ought to be a succinct standard way 2447 // to do this. 2448 for (size_t i = 0; i < sizeof(hash.data)/2; i++) { 2449 char tmp = hash.data[i]; 2450 hash.data[i] = hash.data[sizeof(hash.data) - i - 1]; 2451 hash.data[sizeof(hash.data) - i - 1] = tmp; 2452 } 2453#endif 2454 return PyBytes_FromStringAndSize(hash.data, sizeof(hash.data)); 2455} 2456 2457 2458PyDoc_STRVAR(doc_imp, 2459"(Extremely) low-level import machinery bits as used by importlib and imp."); 2460 2461static PyMethodDef imp_methods[] = { 2462 _IMP_EXTENSION_SUFFIXES_METHODDEF 2463 _IMP_LOCK_HELD_METHODDEF 2464 _IMP_ACQUIRE_LOCK_METHODDEF 2465 _IMP_RELEASE_LOCK_METHODDEF 2466 _IMP_FIND_FROZEN_METHODDEF 2467 _IMP_GET_FROZEN_OBJECT_METHODDEF 2468 _IMP_IS_FROZEN_PACKAGE_METHODDEF 2469 _IMP_CREATE_BUILTIN_METHODDEF 2470 _IMP_INIT_FROZEN_METHODDEF 2471 _IMP_IS_BUILTIN_METHODDEF 2472 _IMP_IS_FROZEN_METHODDEF 2473 _IMP__FROZEN_MODULE_NAMES_METHODDEF 2474 _IMP__OVERRIDE_FROZEN_MODULES_FOR_TESTS_METHODDEF 2475 _IMP_CREATE_DYNAMIC_METHODDEF 2476 _IMP_EXEC_DYNAMIC_METHODDEF 2477 _IMP_EXEC_BUILTIN_METHODDEF 2478 _IMP__FIX_CO_FILENAME_METHODDEF 2479 _IMP_SOURCE_HASH_METHODDEF 2480 {NULL, NULL} /* sentinel */ 2481}; 2482 2483 2484static int 2485imp_module_exec(PyObject *module) 2486{ 2487 const wchar_t *mode = _Py_GetConfig()->check_hash_pycs_mode; 2488 PyObject *pyc_mode = PyUnicode_FromWideChar(mode, -1); 2489 if (pyc_mode == NULL) { 2490 return -1; 2491 } 2492 if (PyModule_AddObjectRef(module, "check_hash_based_pycs", pyc_mode) < 0) { 2493 Py_DECREF(pyc_mode); 2494 return -1; 2495 } 2496 Py_DECREF(pyc_mode); 2497 2498 return 0; 2499} 2500 2501 2502static PyModuleDef_Slot imp_slots[] = { 2503 {Py_mod_exec, imp_module_exec}, 2504 {0, NULL} 2505}; 2506 2507static struct PyModuleDef imp_module = { 2508 PyModuleDef_HEAD_INIT, 2509 .m_name = "_imp", 2510 .m_doc = doc_imp, 2511 .m_size = 0, 2512 .m_methods = imp_methods, 2513 .m_slots = imp_slots, 2514}; 2515 2516PyMODINIT_FUNC 2517PyInit__imp(void) 2518{ 2519 return PyModuleDef_Init(&imp_module); 2520} 2521 2522 2523// Import the _imp extension by calling manually _imp.create_builtin() and 2524// _imp.exec_builtin() since importlib is not initialized yet. Initializing 2525// importlib requires the _imp module: this function fix the bootstrap issue. 2526PyObject* 2527_PyImport_BootstrapImp(PyThreadState *tstate) 2528{ 2529 PyObject *name = PyUnicode_FromString("_imp"); 2530 if (name == NULL) { 2531 return NULL; 2532 } 2533 2534 // Mock a ModuleSpec object just good enough for PyModule_FromDefAndSpec(): 2535 // an object with just a name attribute. 2536 // 2537 // _imp.__spec__ is overridden by importlib._bootstrap._instal() anyway. 2538 PyObject *attrs = Py_BuildValue("{sO}", "name", name); 2539 if (attrs == NULL) { 2540 goto error; 2541 } 2542 PyObject *spec = _PyNamespace_New(attrs); 2543 Py_DECREF(attrs); 2544 if (spec == NULL) { 2545 goto error; 2546 } 2547 2548 // Create the _imp module from its definition. 2549 PyObject *mod = create_builtin(tstate, name, spec); 2550 Py_CLEAR(name); 2551 Py_DECREF(spec); 2552 if (mod == NULL) { 2553 goto error; 2554 } 2555 assert(mod != Py_None); // not found 2556 2557 // Execute the _imp module: call imp_module_exec(). 2558 if (exec_builtin_or_dynamic(mod) < 0) { 2559 Py_DECREF(mod); 2560 goto error; 2561 } 2562 return mod; 2563 2564error: 2565 Py_XDECREF(name); 2566 return NULL; 2567} 2568 2569 2570/* API for embedding applications that want to add their own entries 2571 to the table of built-in modules. This should normally be called 2572 *before* Py_Initialize(). When the table resize fails, -1 is 2573 returned and the existing table is unchanged. 2574 2575 After a similar function by Just van Rossum. */ 2576 2577int 2578PyImport_ExtendInittab(struct _inittab *newtab) 2579{ 2580 struct _inittab *p; 2581 size_t i, n; 2582 int res = 0; 2583 2584 /* Count the number of entries in both tables */ 2585 for (n = 0; newtab[n].name != NULL; n++) 2586 ; 2587 if (n == 0) 2588 return 0; /* Nothing to do */ 2589 for (i = 0; PyImport_Inittab[i].name != NULL; i++) 2590 ; 2591 2592 /* Force default raw memory allocator to get a known allocator to be able 2593 to release the memory in _PyImport_Fini2() */ 2594 PyMemAllocatorEx old_alloc; 2595 _PyMem_SetDefaultAllocator(PYMEM_DOMAIN_RAW, &old_alloc); 2596 2597 /* Allocate new memory for the combined table */ 2598 p = NULL; 2599 if (i + n <= SIZE_MAX / sizeof(struct _inittab) - 1) { 2600 size_t size = sizeof(struct _inittab) * (i + n + 1); 2601 p = PyMem_RawRealloc(inittab_copy, size); 2602 } 2603 if (p == NULL) { 2604 res = -1; 2605 goto done; 2606 } 2607 2608 /* Copy the tables into the new memory at the first call 2609 to PyImport_ExtendInittab(). */ 2610 if (inittab_copy != PyImport_Inittab) { 2611 memcpy(p, PyImport_Inittab, (i+1) * sizeof(struct _inittab)); 2612 } 2613 memcpy(p + i, newtab, (n + 1) * sizeof(struct _inittab)); 2614 PyImport_Inittab = inittab_copy = p; 2615 2616done: 2617 PyMem_SetAllocator(PYMEM_DOMAIN_RAW, &old_alloc); 2618 return res; 2619} 2620 2621/* Shorthand to add a single entry given a name and a function */ 2622 2623int 2624PyImport_AppendInittab(const char *name, PyObject* (*initfunc)(void)) 2625{ 2626 struct _inittab newtab[2]; 2627 2628 memset(newtab, '\0', sizeof newtab); 2629 2630 newtab[0].name = name; 2631 newtab[0].initfunc = initfunc; 2632 2633 return PyImport_ExtendInittab(newtab); 2634} 2635 2636 2637PyObject * 2638_PyImport_GetModuleAttr(PyObject *modname, PyObject *attrname) 2639{ 2640 PyObject *mod = PyImport_Import(modname); 2641 if (mod == NULL) { 2642 return NULL; 2643 } 2644 PyObject *result = PyObject_GetAttr(mod, attrname); 2645 Py_DECREF(mod); 2646 return result; 2647} 2648 2649PyObject * 2650_PyImport_GetModuleAttrString(const char *modname, const char *attrname) 2651{ 2652 PyObject *pmodname = PyUnicode_FromString(modname); 2653 if (pmodname == NULL) { 2654 return NULL; 2655 } 2656 PyObject *pattrname = PyUnicode_FromString(attrname); 2657 if (pattrname == NULL) { 2658 Py_DECREF(pmodname); 2659 return NULL; 2660 } 2661 PyObject *result = _PyImport_GetModuleAttr(pmodname, pattrname); 2662 Py_DECREF(pattrname); 2663 Py_DECREF(pmodname); 2664 return result; 2665} 2666 2667#ifdef __cplusplus 2668} 2669#endif 2670