Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

python: Don't decrement a reference to a borrowed object #1420

Merged
merged 1 commit into from
Sep 16, 2024

Commits on Sep 13, 2024

  1. python: Don't decrement a reference to a borrowed object

    On some Python 3.11 systems, 3.11.9 & 3.11.10, we were seeing a crash
    triggered by Py_Finalize() in nxt_python_atexit() when running one of
    our pytests, namely
    test/test_python_factory.py::test_python_factory_invalid_callable_value
    
      2024/09/12 15:07:29 [alert] 5452#5452 factory "wsgi_invalid_callable" in module "wsgi" can not be called to fetch callable
      Fatal Python error: none_dealloc: deallocating None: bug likely caused by a refcount error in a C extension
      Python runtime state: finalizing (tstate=0x00007f560b88a718)
    
      Current thread 0x00007f560bde7ad0 (most recent call first):
        <no Python frame>
      2024/09/12 15:07:29 [alert] 5451#5451 app process 5452 exited on signal 6 (core dumped)
    
    This was due to
    
      obj = PyDict_GetItemString(PyModule_GetDict(module), callable);
    
    in nxt_python_set_target() which returns a *borrowed* reference, then
    due to the test meaning this is a `None` object we `goto fail` and call
    
      Py_DECREF(obj);
    
    which then causes `Py_Finalize()` to blow up.
    
    The simple fix is to just increment its reference count before the `goto
    fail`.
    
    Note: This problem only showed up under (the various versions of Python
    we test on); 3.11.9 & 3.11.10. It doesn't show up under; 3.6, 3.7, 3.9,
    3.10, 3.12
    
    Cc: Konstantin Pavlov <[email protected]>
    Closes: nginx#1413
    Fixes: a9aa9e7 ("python: Support application factories")
    Signed-off-by: Andrew Clayton <[email protected]>
    ac000 committed Sep 13, 2024
    Configuration menu
    Copy the full SHA
    50b1aca View commit details
    Browse the repository at this point in the history