linkedin / linkedin/qark

RuntimeError: maximum recursion depth exceeded in __instancecheck__

Open
#357 2 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Python
Stars
3.4k
Forks
663
PR merge metrics
No merged PRs in 30d

Description

After decompiling, "Running scans" immediatly failed with maximum recursion depth. :

```
Traceback (most recent call last):
File "/usr/local/bin/qark", line 8, in
sys.exit(cli())
File "/usr/local/lib/python2.7/site-packages/click/core.py", line 722, in __call__
return self.main(*args, **kwargs)
File "/usr/local/lib/python2.7/site-packages/click/core.py", line 697, in main
rv = self.invoke(ctx)
File "/usr/local/lib/python2.7/site-packages/click/core.py", line 895, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/usr/local/lib/python2.7/site-packages/click/core.py", line 535, in invoke
return callback(*args, **kwargs)
File "/usr/local/lib/python2.7/site-packages/click/decorators.py", line 17, in new_func
return f(get_current_context(), *args, **kwargs)
File "/usr/local/lib/python2.7/site-packages/qark/qark.py", line 90, in cli
scanner.run()
File "/usr/local/lib/python2.7/site-packages/qark/scanner/scanner.py", line 64, in run
self._run_checks(plugins)
File "/usr/local/lib/python2.7/site-packages/qark/scanner/scanner.py", line 78, in _run_checks
current_file_subject.notify(filepath)
File "/usr/local/lib/python2.7/site-packages/qark/scanner/scanner.py", line 125, in notify
observer.update(file_path, call_run=True)
File "/usr/local/lib/python2.7/site-packages/qark/scanner/plugin.py", line 239, in update
super(CoroutinePlugin, self).update(file_path)
File "/usr/local/lib/python2.7/site-packages/qark/scanner/plugin.py", line 185, in update
JavaASTPlugin.java_ast = javalang.parse.parse(self.file_contents)
File "/usr/local/lib/python2.7/site-packages/javalang/parse.py", line 53, in parse
return parser.parse()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 110, in parse
return self.parse_compilation_unit()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 302, in parse_compilation_unit
type_declaration = self.parse_type_declaration()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 347, in parse_type_declaration
return self.parse_class_or_interface_declaration()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 356, in parse_class_or_interface_declaration
type_declaration = self.parse_normal_class_declaration()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 394, in parse_normal_class_declaration
body = self.parse_class_body()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 768, in parse_class_body
declaration = self.parse_class_body_declaration()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 791, in parse_class_body_declaration
return self.parse_member_declaration()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 801, in parse_member_declaration
member = self.parse_void_method_declarator_rest()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 905, in parse_void_method_declarator_rest
body = self.parse_block()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 1274, in parse_block
statement = self.parse_block_statement()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 1349, in parse_block_statement
return self.parse_statement()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 1520, in parse_statement
expression = self.parse_expression()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 1752, in parse_expression
expressionl = self.parse_expressionl()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 1767, in parse_expressionl
expression_2 = self.parse_expression_2()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 1793, in parse_expression_2
expression_3 = self.parse_expression_3()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 1849, in parse_expression_3
primary = self.parse_primary()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 1975, in parse_primary
identifier_suffix = self.parse_identifier_suffix()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 2163, in parse_identifier_suffix
arguments = self.parse_arguments()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 2025, in parse_arguments
expression = self.parse_expression()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 1752, in parse_expression
expressionl = self.parse_expressionl()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 1767, in parse_expressionl
expression_2 = self.parse_expression_2()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 1793, in parse_expression_2
expression_3 = self.parse_expression_3()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 1842, in parse_expression_3
expression = self.parse_expression_3()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 1849, in parse_expression_3
primary = self.parse_primary()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 1933, in parse_primary
return self.parse_par_expression()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 2010, in parse_par_expression
expression = self.parse_expression()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 1752, in parse_expression
expressionl = self.parse_expressionl()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 1767, in parse_expressionl
expression_2 = self.parse_expression_2()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 1793, in parse_expression_2
expression_3 = self.parse_expression_3()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 1849, in parse_expression_3
primary = self.parse_primary()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 1951, in parse_primary
return self.parse_creator()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 2099, in parse_creator
arguments, body = self.parse_class_creator_rest()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 2130, in parse_class_creator_rest
class_body = self.parse_class_body()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 768, in parse_class_body
declaration = self.parse_class_body_declaration()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 791, in parse_class_body_declaration
return self.parse_member_declaration()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 825, in parse_member_declaration
member = self.parse_method_or_field_declaraction()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 839, in parse_method_or_field_declaraction
member = self.parse_method_or_field_rest()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 857, in parse_method_or_field_rest
return self.parse_method_declarator_rest()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 886, in parse_method_declarator_rest
body = self.parse_block()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 1274, in parse_block
statement = self.parse_block_statement()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 1345, in parse_block_statement
statement = self.parse_local_variable_declaration_statement()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 1355, in parse_local_variable_declaration_statement
declarators = self.parse_variable_declarators()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 1207, in parse_variable_declarators
declarator = self.parse_variable_declarator()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 1218, in parse_variable_declarator
array_dimension, initializer = self.parse_variable_declarator_rest()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 1230, in parse_variable_declarator_rest
initializer = self.parse_variable_initializer()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 1239, in parse_variable_initializer
return self.parse_expression()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 1752, in parse_expression
expressionl = self.parse_expressionl()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 1767, in parse_expressionl
expression_2 = self.parse_expression_2()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 1793, in parse_expression_2
expression_3 = self.parse_expression_3()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 1849, in parse_expression_3
primary = self.parse_primary()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 1951, in parse_primary
return self.parse_creator()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 2099, in parse_creator
arguments, body = self.parse_class_creator_rest()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 2130, in parse_class_creator_rest
class_body = self.parse_class_body()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 768, in parse_class_body
declaration = self.parse_class_body_declaration()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 791, in parse_class_body_declaration
return self.parse_member_declaration()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 825, in parse_member_declaration
member = self.parse_method_or_field_declaraction()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 839, in parse_method_or_field_declaraction
member = self.parse_method_or_field_rest()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 857, in parse_method_or_field_rest
return self.parse_method_declarator_rest()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 886, in parse_method_declarator_rest
body = self.parse_block()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 1274, in parse_block
statement = self.parse_block_statement()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 1345, in parse_block_statement
statement = self.parse_local_variable_declaration_statement()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 1355, in parse_local_variable_declaration_statement
declarators = self.parse_variable_declarators()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 1207, in parse_variable_declarators
declarator = self.parse_variable_declarator()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 1218, in parse_variable_declarator
array_dimension, initializer = self.parse_variable_declarator_rest()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 1230, in parse_variable_declarator_rest
initializer = self.parse_variable_initializer()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 1239, in parse_variable_initializer
return self.parse_expression()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 1752, in parse_expression
expressionl = self.parse_expressionl()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 1767, in parse_expressionl
expression_2 = self.parse_expression_2()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 1793, in parse_expression_2
expression_3 = self.parse_expression_3()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 1849, in parse_expression_3
primary = self.parse_primary()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 1951, in parse_primary
return self.parse_creator()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 2099, in parse_creator
arguments, body = self.parse_class_creator_rest()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 2130, in parse_class_creator_rest
class_body = self.parse_class_body()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 768, in parse_class_body
declaration = self.parse_class_body_declaration()

...

File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 791, in parse_class_body_declaration
return self.parse_member_declaration()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 825, in parse_member_declaration
member = self.parse_method_or_field_declaraction()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 839, in parse_method_or_field_declaraction
member = self.parse_method_or_field_rest()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 857, in parse_method_or_field_rest
return self.parse_method_declarator_rest()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 886, in parse_method_declarator_rest
body = self.parse_block()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 1274, in parse_block
statement = self.parse_block_statement()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 1345, in parse_block_statement
statement = self.parse_local_variable_declaration_statement()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 1355, in parse_local_variable_declaration_statement
declarators = self.parse_variable_declarators()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 1207, in parse_variable_declarators
declarator = self.parse_variable_declarator()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 1218, in parse_variable_declarator
array_dimension, initializer = self.parse_variable_declarator_rest()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 1230, in parse_variable_declarator_rest
initializer = self.parse_variable_initializer()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 1239, in parse_variable_initializer
return self.parse_expression()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 1752, in parse_expression
expressionl = self.parse_expressionl()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 1767, in parse_expressionl
expression_2 = self.parse_expression_2()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 1793, in parse_expression_2
expression_3 = self.parse_expression_3()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 1849, in parse_expression_3
primary = self.parse_primary()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 1951, in parse_primary
return self.parse_creator()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 2099, in parse_creator
arguments, body = self.parse_class_creator_rest()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 2126, in parse_class_creator_rest
arguments = self.parse_arguments()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 2025, in parse_arguments
expression = self.parse_expression()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 1752, in parse_expression
expressionl = self.parse_expressionl()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 1767, in parse_expressionl
expression_2 = self.parse_expression_2()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 1793, in parse_expression_2
expression_3 = self.parse_expression_3()
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 1829, in parse_expression_3
if self.would_accept('('):
File "/usr/local/lib/python2.7/site-packages/javalang/parser.py", line 146, in would_accept
if isinstance(accept, six.string_types) and (
RuntimeError: maximum recursion depth exceeded in __instancecheck__

```

Also during decompilation, there is this stack over flow error that keeps popping up:

```
Method create (Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; couldn't be written.
java.lang.StackOverflowError
at java.io.PrintStream.write(PrintStream.java:526)
at java.io.PrintStream.print(PrintStream.java:669)
at java.io.PrintStream.println(PrintStream.java:806)
at org.jetbrains.java.decompiler.main.decompiler.PrintStreamLogger.writeMessage(PrintStreamLogger.java:22)
at org.jetbrains.java.decompiler.main.decompiler.PrintStreamLogger.writeMessage(PrintStreamLogger.java:29)
at org.jetbrains.java.decompiler.main.ClassWriter.methodToJava(ClassWriter.java:829)
at org.jetbrains.java.decompiler.main.ClassWriter.classToJava(ClassWriter.java:213)
at org.jetbrains.java.decompiler.modules.decompiler.exps.NewExprent.toJava(NewExprent.java:230)
at org.jetbrains.java.decompiler.modules.decompiler.exps.AssignmentExprent.toJava(AssignmentExprent.java:133)
at org.jetbrains.java.decompiler.modules.decompiler.ExprProcessor.listToJava(ExprProcessor.java:809)
at org.jetbrains.java.decompiler.modules.decompiler.stats.BasicBlockStatement.toJava(BasicBlockStatement.java:59)
at org.jetbrains.java.decompiler.modules.decompiler.stats.RootStatement.toJava(RootStatement.java:23)
at org.jetbrains.java.decompiler.main.ClassWriter.methodToJava(ClassWriter.java:818)
at org.jetbrains.java.decompiler.main.ClassWriter.classToJava(ClassWriter.java:213)
at org.jetbrains.java.decompiler.modules.decompiler.exps.NewExprent.toJava(NewExprent.java:230)
at org.jetbrains.java.decompiler.modules.decompiler.exps.AssignmentExprent.toJava(AssignmentExprent.java:133)
at org.jetbrains.java.decompiler.modules.decompiler.ExprProcessor.listToJava(ExprProcessor.java:809)
at org.jetbrains.java.decompiler.modules.decompiler.stats.BasicBlockStatement.toJava(BasicBlockStatement.java:59)
at org.jetbrains.java.decompiler.modules.decompiler.stats.RootStatement.toJava(RootStatement.java:23)
at org.jetbrains.java.decompiler.main.ClassWriter.methodToJava(ClassWriter.java:818)
at org.jetbrains.java.decompiler.main.ClassWriter.classToJava(ClassWriter.java:213)

....

```

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Reproduce the failure by running a scan on the decompiled input. Start with qark/scanner/scanner.py and qark/scanner/plugin.py around the calls to JavaASTPlugin.update and javalang.parse.parse, then compare the parser traceback with the scan flow. Done means the scan completes without the recursion-depth exception.

Written by the indexing model from the issue text.

Assessment

Tech stack
android, python
Domain
mobile-dev, security
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.