From: James Teh Date: Fri, 30 Nov 2012 05:54:16 +0000 (+1000) Subject: IAccessibleHandler.accessibleChildren: Filter out NULL pointers returned by Accessibl... X-Git-Tag: jpdev130418~414 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=059b63cb7157a644b3a244c779ff096fa722c1cb;p=nvdajp%2Fnvdajp.git IAccessibleHandler.accessibleChildren: Filter out NULL pointers returned by AccessibleChidlren, as this results in an unexpected item which causes an exception in the IAccessible NVDAObject's children property. Returning a NULL pointer as one of the children is a bug in the server, but we shouldn't choke on it even so. --- diff --git a/source/IAccessibleHandler.py b/source/IAccessibleHandler.py index f55a94189..1f09b0fe9 100644 --- a/source/IAccessibleHandler.py +++ b/source/IAccessibleHandler.py @@ -350,12 +350,17 @@ def windowFromAccessibleObject(ia): return 0 def accessibleChildren(ia,startIndex,numChildren): - children=oleacc.AccessibleChildren(ia,startIndex,numChildren) - for childNum in xrange(len(children)): - if isinstance(children[childNum],comtypes.client.lazybind.Dispatch) or isinstance(children[childNum],comtypes.client.dynamic._Dispatch) or isinstance(children[childNum],IUnknown): - children[childNum]=(normalizeIAccessible(children[childNum]),0) - elif isinstance(children[childNum],int): - children[childNum]=(ia,children[childNum]) + children=[] + for child in oleacc.AccessibleChildren(ia,startIndex,numChildren): + if child is None: + # This is a bug in the server. + # Filtering these out here makes life easier for the caller. + continue + elif isinstance(child,comtypes.client.lazybind.Dispatch) or isinstance(child,comtypes.client.dynamic._Dispatch) or isinstance(child,IUnknown): + child=(normalizeIAccessible(child),0) + elif isinstance(child,int): + child=(ia,child) + children.append(child) return children def accFocus(ia):