google / google/EarlGrey

Infinite loop while generating element hierarchy description

Open
#1,648 2 comments 0 reactions 0 assignees View on GitHub
Dominant language
Objective-C
Stars
5.7k
Forks
737
Avg merge
1d 20h
Merged PRs (30d)
5

Description

EarlGrey2

App crashes due to infinite loop while generating element hierarchy description on error
```
...
frame #130525: 0x000000014e8fec1c UIAccessibility`-[UIView(UIAccessibilityPrivate) _accessibilityViewIsVisibleIgnoringAXOverrides:stoppingBeforeContainer:] + 244
frame #130526: 0x000000014e8feb08 UIAccessibility`-[UIView(UIAccessibilityPrivate) _accessibilityViewIsVisibleIgnoringAXOverrides:] + 84
frame #130527: 0x000000014dd1ede8 UIKit`-[UIDimmingViewAccessibility accessibilityIdentifier] + 20
frame #130528: 0x0000000152f78a20 MessageUIFramework`-[UIViewAccessibility__MessageUI__UIKit _accessibilityOverridesInvisibility] + 52
frame #130529: 0x000000014e8fec1c UIAccessibility`-[UIView(UIAccessibilityPrivate) _accessibilityViewIsVisibleIgnoringAXOverrides:stoppingBeforeContainer:] + 244
frame #130530: 0x000000014e8feb08 UIAccessibility`-[UIView(UIAccessibilityPrivate) _accessibilityViewIsVisibleIgnoringAXOverrides:] + 84
frame #130531: 0x000000014dd1ede8 UIKit`-[UIDimmingViewAccessibility accessibilityIdentifier] + 20
frame #130532: 0x0000000152f78a20 MessageUIFramework`-[UIViewAccessibility__MessageUI__UIKit _accessibilityOverridesInvisibility] + 52
frame #130533: 0x000000014e8fec1c UIAccessibility`-[UIView(UIAccessibilityPrivate) _accessibilityViewIsVisibleIgnoringAXOverrides:stoppingBeforeContainer:] + 244
frame #130534: 0x000000014e8feb08 UIAccessibility`-[UIView(UIAccessibilityPrivate) _accessibilityViewIsVisibleIgnoringAXOverrides:] + 84
frame #130535: 0x000000014dd1ede8 UIKit`-[UIDimmingViewAccessibility accessibilityIdentifier] + 20
frame #130536: 0x0000000152f78a20 MessageUIFramework`-[UIViewAccessibility__MessageUI__UIKit _accessibilityOverridesInvisibility] + 52
frame #130537: 0x000000014e8fec1c UIAccessibility`-[UIView(UIAccessibilityPrivate) _accessibilityViewIsVisibleIgnoringAXOverrides:stoppingBeforeContainer:] + 244
frame #130538: 0x000000014e8feb08 UIAccessibility`-[UIView(UIAccessibilityPrivate) _accessibilityViewIsVisibleIgnoringAXOverrides:] + 84
frame #130539: 0x000000014dd1ede8 UIKit`-[UIDimmingViewAccessibility accessibilityIdentifier] + 20
frame #130540: 0x0000000152f78a20 MessageUIFramework`-[UIViewAccessibility__MessageUI__UIKit _accessibilityOverridesInvisibility] + 52
frame #130541: 0x000000014e8fec1c UIAccessibility`-[UIView(UIAccessibilityPrivate) _accessibilityViewIsVisibleIgnoringAXOverrides:stoppingBeforeContainer:] + 244
frame #130542: 0x000000014e8feb08 UIAccessibility`-[UIView(UIAccessibilityPrivate) _accessibilityViewIsVisibleIgnoringAXOverrides:] + 84
frame #130543: 0x000000014dd1ede8 UIKit`-[UIDimmingViewAccessibility accessibilityIdentifier] + 20
frame #130544: 0x0000000152f78a20 MessageUIFramework`-[UIViewAccessibility__MessageUI__UIKit _accessibilityOverridesInvisibility] + 52
frame #130545: 0x000000014e8fec1c UIAccessibility`-[UIView(UIAccessibilityPrivate) _accessibilityViewIsVisibleIgnoringAXOverrides:stoppingBeforeContainer:] + 244
frame #130546: 0x000000014e8feb08 UIAccessibility`-[UIView(UIAccessibilityPrivate) _accessibilityViewIsVisibleIgnoringAXOverrides:] + 84
frame #130547: 0x000000014dd1ede8 UIKit`-[UIDimmingViewAccessibility accessibilityIdentifier] + 20
frame #130548: 0x00000001465081d8 AppFramework`-[NSObject(self=0x000000015f2d0650, _cmd="grey_description") grey_description] at NSObject+GREYCommon.m:73:23
frame #130549: 0x00000001464fcffc AppFramework`+[GREYElementHierarchy grey_printDescriptionForElement:atLevel:](self=0x000000014658b6e8, _cmd="grey_printDescriptionForElement:atLevel:", element=0x000000015f2d0650, level=2) at GREYElementHierarchy.m:196:29
frame #130550: 0x00000001464fc6ac AppFramework`__75+[GREYElementHierarchy hierarchyStringForElement:withAnnotationDictionary:]_block_invoke(.block_descriptor=0x000000016dd54398, object=0x00006000021277c0, stop=NO) at GREYElementHierarchy.m:88:29
frame #130551: 0x00000001464fb138 AppFramework`-[GREYTraversalDFS enumerateUsingBlock:](self=0x00006000021275e0, _cmd="enumerateUsingBlock:", block=0x00000001464fc574) at GREYTraversalDFS.m:89:5
frame #130552: 0x00000001464fc104 AppFramework`+[GREYElementHierarchy hierarchyStringForElement:withAnnotationDictionary:](self=0x000000014658b6e8, _cmd="hierarchyStringForElement:withAnnotationDictionary:", element=0x0000000145c8db00, annotationDictionary=0x000000010d8b5720) at GREYElementHierarchy.m:82:3
frame #130553: 0x00000001464fbe18 AppFramework`+[GREYElementHierarchy hierarchyStringForElement:](self=0x000000014658b6e8, _cmd="hierarchyStringForElement:", element=0x0000000145c8db00) at GREYElementHierarchy.m:54:10
frame #130554: 0x00000001464fbbb4 AppFramework`__39+[GREYElementHierarchy hierarchyString]_block_invoke(.block_descriptor=0x0000600002c94bd0) at GREYElementHierarchy.m:39:25
frame #130555: 0x00000001464fb8f8 AppFramework`+[GREYElementHierarchy hierarchyString](self=0x000000014658b6e8, _cmd="hierarchyString") at GREYElementHierarchy.m:47:5
frame #130556: 0x00000001464ede5c AppFramework`__39+[GREYAssertions assertionWithMatcher:]_block_invoke(.block_descriptor=0x0000600002cf4630, element=0x0000000000000000, errorOrNil=0x0000600002cf6878) at GREYAssertions.m:45:9
frame #130557: 0x000000014650981c AppFramework`-[GREYAssertionBlock assert:error:](self=0x0000600002028a40, _cmd="assert:error:", element=0x0000000000000000, errorOrNil=0x0000600002cf6878) at GREYAssertionBlock.m:74:10
frame #130558: 0x00000001464e8b44 AppFramework`__39-[GREYElementInteraction assert:error:]_block_invoke(.block_descriptor=0x0000600003acad80, matchedElements=0x0000000000000000, completionError=0x0000600004e72980) at GREYElementInteraction.m:407:30
frame #130559: 0x00000001464e6984 AppFramework`__83-[GREYElementInteraction matchElementsWithTimeout:syncBeforeMatch:completionBlock:]_block_invoke.100(.block_descriptor=0x0000600002c8e2b0) at GREYElementInteraction.m:218:5
frame #130560: 0x00000001464abf74 AppFramework`__grey_dispatch_sync_on_main_thread_block_invoke(.block_descriptor=0x0000600002c8eac0) at GREYSyncAPI.m:27:7
frame #130561: 0x000000010d2dcf90 CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ + 20
frame #130562: 0x000000010d2dc254 CoreFoundation`__CFRunLoopDoBlocks + 408
frame #130563: 0x000000010d2d6ae8 CoreFoundation`__CFRunLoopRun + 724
frame #130564: 0x000000010d2d6308 CoreFoundation`CFRunLoopRunSpecific + 572
frame #130565: 0x0000000115d235ec GraphicsServices`GSEventRunModal + 160
frame #130566: 0x000000011cbfc4e0 UIKitCore`-[UIApplication _run] + 992
frame #130567: 0x000000011cc00fc0 UIKitCore`UIApplicationMain + 112
frame #130568: 0x00000001020bd69c Moxtra`main(argc=5, argv=0x000000016dd55d68) at main.m:20:16
frame #130569: 0x000000010b5c9c04 dyld_sim`start_sim + 20
```

Contributor guide

Open the contributing guide

Research direction

Start in GREYElementHierarchy.m at hierarchyStringForElement: and grey_printDescriptionForElement:atLevel:, then inspect GREYTraversalDFS.m and NSObject+GREYCommon.m at the stack-trace lines. Reproduce the failing hierarchy description with the reported accessibility recursion and determine where traversal fails to terminate. Done means hierarchy generation returns instead of looping or crashing for this failure.

Written by the indexing model from the issue text.

Assessment

Tech stack
objective-c
Domain
mobile-dev, testing-qa
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.