cpython icon indicating copy to clipboard operation
cpython copied to clipboard

Regression due to removal of quadratic behavior in node ID cache clearing (GH-142145)

Open stefanor opened this issue 3 weeks ago • 6 comments

Bug report

Bug description:

In Debian we are seeing test failures as a result of #142146.

====================  test with PYTHON 3.14 ==================
ninja: Entering directory `/build/reproducible-path/pyatspi-2.57.0/build-3.14'
[0/1] Running all tests
dbus-daemon[7409]: [session uid=994 pid=7409 pidfd=5] Activating service name='org.a11y.Bus' requested by ':1.1' (uid=994 pid=7417 comm="/build/reproducible-path/pyatspi-2.57.0/build-3.14" label="unconfined")

(process:7419): dconf-CRITICAL **: 15:22:46.259: unable to create directory '/sbuild-nonexistent/.cache/dconf': Permission denied.  dconf will not work properly.

(process:7419): dconf-CRITICAL **: 15:22:46.260: unable to create directory '/sbuild-nonexistent/.cache/dconf': Permission denied.  dconf will not work properly.

(process:7419): dconf-CRITICAL **: 15:22:46.260: unable to create directory '/sbuild-nonexistent/.cache/dconf': Permission denied.  dconf will not work properly.

(process:7419): dconf-CRITICAL **: 15:22:46.260: unable to create directory '/sbuild-nonexistent/.cache/dconf': Permission denied.  dconf will not work properly.

(process:7419): dconf-CRITICAL **: 15:22:46.260: unable to create directory '/sbuild-nonexistent/.cache/dconf': Permission denied.  dconf will not work properly.

(process:7419): dconf-CRITICAL **: 15:22:46.260: unable to create directory '/sbuild-nonexistent/.cache/dconf': Permission denied.  dconf will not work properly.
dbus-daemon[7409]: [session uid=994 pid=7409 pidfd=5] Successfully activated service 'org.a11y.Bus'
dbus-daemon[7425]: Activating service name='org.a11y.atspi.Registry' requested by ':1.0' (uid=994 pid=7417 comm="/build/reproducible-path/pyatspi-2.57.0/build-3.14" label="unconfined")
dbus-daemon[7425]: Successfully activated service 'org.a11y.atspi.Registry'
SpiRegistry daemon is running with well-known name - org.a11y.atspi.Registry
pyatspi:pyatspi time out (After 300 seconds)
1/1 pyatspi:pyatspi TIMEOUT        300.10s   killed by signal 15 SIGTERM
>>> top_builddir=/build/reproducible-path/pyatspi-2.57.0/build-3.14 UBSAN_OPTIONS=halt_on_error=1:abort_on_error=1:print_summary=1:print_stacktrace=1 ASAN_OPTIONS=halt_on_error=1:abort_on_error=1:print_summary=1 top_srcdir=/build/reproducible-path/pyatspi-2.57.0 MESON_TEST_ITERATION=1 MALLOC_PERTURB_=187 MSAN_OPTIONS=halt_on_error=1:abort_on_error=1:print_summary=1:print_stacktrace=1 /build/reproducible-path/pyatspi-2.57.0/tests/pyatspi/runtests.sh
――――――――――――――――――――――――――――――――――――― ✀  ―――――――――――――――――――――――――――――――――――――
stdout:
AT-SPI Received D-Bus name - test.atspi.R242

Unique D-Bus name is: :1.1
stderr:
Traceback (most recent call last):
  File "/build/reproducible-path/pyatspi-2.57.0/tests/pyatspi/pasytest/Pasy.py", line 81, in entry
    self._func(self)
    ~~~~~~~~~~^^^^^^
  File "/build/reproducible-path/pyatspi-2.57.0/tests/pyatspi/accessibletest.py", line 234, in test_tree
    _createNode(doc, root, doc)
    ~~~~~~~~~~~^^^^^^^^^^^^^^^^
  File "/build/reproducible-path/pyatspi-2.57.0/tests/pyatspi/accessibletest.py", line 44, in _createNode
    e.setAttributeNode(nameA)
    ~~~~~~~~~~~~~~~~~~^^^^^^^
  File "/usr/lib/python3.13/xml/dom/minidom.py", line 805, in setAttributeNode
    _set_attribute_node(self, attr)
    ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^
  File "/usr/lib/python3.13/xml/dom/minidom.py", line 950, in _set_attribute_node
    _clear_id_cache(element)
    ~~~~~~~~~~~~~~~^^^^^^^^^
  File "/usr/lib/python3.13/xml/dom/minidom.py", line 1551, in _clear_id_cache
    elif node.ownerDocument:
         ^^^^^^^^^^^^^^^^^^
AttributeError: 'xml.dom.minidom.Element' object has no attribute 'ownerDocument'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/build/reproducible-path/pyatspi-2.57.0/tests/pyatspi/pasytest/Pasy.py", line 118, in idle_handler
    step.run()
    ~~~~~~~~^^
  File "/build/reproducible-path/pyatspi-2.57.0/tests/pyatspi/pasytest/Pasy.py", line 59, in run
    self.entry()
    ~~~~~~~~~~^^
  File "/build/reproducible-path/pyatspi-2.57.0/tests/pyatspi/pasytest/Pasy.py", line 83, in entry
    self.fail(e.message)
              ^^^^^^^^^
AttributeError: 'AttributeError' object has no attribute 'message'
――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――

The relevant code here: https://gitlab.gnome.org/GNOME/pyatspi2/-/blob/ad723fb9f0e7d6cb321b6e21f20038a81ed8f5f1/tests/pyatspi/accessibletest.py#L216-250

See: https://bugs.debian.org/1122875

Also: https://github.com/OnroerendErfgoed/skosprovider/issues/155

CPython versions tested on:

CPython main branch

Operating systems tested on:

Linux

Linked PRs

  • gh-142794
  • gh-142818
  • gh-142819

stefanor avatar Dec 15 '25 15:12 stefanor

Related: #67624.

jacobtylerwalls avatar Dec 15 '25 17:12 jacobtylerwalls

cc @sethmlarson

picnixz avatar Dec 15 '25 18:12 picnixz

See also the view in https://github.com/python/cpython/issues/49101#issuecomment-1093452060 that this isn't valid usage.

jacobtylerwalls avatar Dec 15 '25 19:12 jacobtylerwalls

See also the view in https://github.com/python/cpython/issues/49101#issuecomment-1093452060 that this isn't valid usage.

Apparently, a lot of people have been breaking this rule.

ZeroIntensity avatar Dec 15 '25 19:12 ZeroIntensity

From Linux From Scratch (Beyond LFS), we observe this as well. Present in 3.13.11 and 3.14.2.

Zeckmathederg avatar Dec 16 '25 07:12 Zeckmathederg

Apparently, a lot of people have been breaking this rule.

I wonder if that means we should start supporting it. Sure, there's a docs note saying that if you call a constructor you're on your own, but it's... weird at best.

encukou avatar Dec 16 '25 11:12 encukou

https://github.com/python/cpython/pull/142794/files fixed the issue of https://bugs.debian.org/1122875

I haven't tested https://github.com/OnroerendErfgoed/skosprovider/issues/155

sthibaul avatar Dec 17 '25 15:12 sthibaul