GNOME Bugzilla – Bug 688057
A page that hangs orca
Last modified: 2012-11-19 21:37:24 UTC
To reproduce try the following: 1: Using firefox open the following url: https://wiki.archlinux.org/index.php/Beginners_Guide#Installing_on_a_virtual_machine 2: After the page is loaded go to begin of the page pressing ctrl+home. 3: Press shift+h. In my machine orca stays completely mute and I have to kill firefox. After kill firefox, orca returns to normal state. I am running ubuntu 12.10, gnome-shell and firefox 16.0.2. In addition I found in the debug output the following: vvvvv PROCESS <ENUM ATSPI_KEY_PRESSED_EVENT OF TYPE EVENTTYPE> 'H' (43) vvvvv KEYBOARDEVENT: type=<enum ATSPI_KEY_PRESSED_EVENT of type EventType> id=72 hw_code=43 modifiers=1 event_string=(H) keyval_name=(H) is_text=True timestamp=28062503 time=1352540244.434481 keyType=printable shouldEcho=True IGNORING EVENT DUE TO TIMESTAMP Traceback (most recent call last):
+ Trace 231155
predicate)
lastObj = self._findLastObject(document)
return self._script.getLastObject(ancestor)
lastObj = self.findNextObject(lastChild, documentFrame)
while index < candidate.parent.childCount:
SPEECH OUTPUT: 'Wrapping to bottom.' SPEECH OUTPUT: 'No more headings.' ^^^^^ PROCESS <ENUM ATSPI_KEY_PRESSED_EVENT OF TYPE EVENTTYPE> 'H' (43) ^^^^^
Turns out that Orca isn't crashing. It's just going completely non-responsive. :( Using GDB to get a backtrace, it seems that something bad may be happening when atspi_accessible_get_parent() is called. Here's the top of the trace (I'll attach the rest as it's pretty huge).
+ Trace 231156
Created attachment 228655 [details] backtrace
In terms of the Orca hang, I was able to work around more Gecko hierarchy brokenness by adding a couple of sanity checks. master: http://git.gnome.org/browse/orca/commit/?id=ad130ca6cbbcfe1851ddab97de54ecad007e1b58 gnome-3-6 branch: http://git.gnome.org/browse/orca/commit/?h=gnome-3-6&id=8c28bcbdfa22d9d13469508487eeccba46e042e1
I just pushed a fix to at-spi2-core (commit 099154). Atspi_accessible_get_index_in_parent was always returning -1 if the object's accessible_parent field was set to NULL, but accessible_parent is not guaranteed to hold a pointer to the object's parent (it will not if the parent has never been fetch/cached).