Skip to content

Commit 7b52d9d

Browse files
committed
Fix quark script api, Method.findSuperclassHierarchy
1 parent 705a810 commit 7b52d9d

File tree

1 file changed

+14
-9
lines changed

1 file changed

+14
-9
lines changed

quark/script/__init__.py

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -262,16 +262,20 @@ def findSuperclassHierarchy(self) -> List[str]:
262262
:return: Python list contains all superclass names of this method.
263263
"""
264264

265-
parentsHierarchy = list()
266-
targetClassAnalysis = self.quark.apkinfo.analysis.get_class_analysis(
267-
self.class_name)
265+
parentsHierarchy = set()
266+
hierarchyMap = self.quark.apkinfo.superclass_relationships
268267

269-
while targetClassAnalysis and "Ljava/lang/Object;" != targetClassAnalysis.extends:
270-
parentsHierarchy.append(targetClassAnalysis.extends)
271-
targetClassAnalysis = self.quark.apkinfo.analysis.get_class_analysis(
272-
targetClassAnalysis.extends)
268+
queue = [self.innerObj.class_name]
269+
while queue:
270+
targetClass = queue.pop()
271+
if targetClass == "Ljava/lang/Object;":
272+
continue
273+
274+
queue.extend(hierarchyMap[targetClass])
275+
parentsHierarchy.update(hierarchyMap[targetClass])
273276

274-
return parentsHierarchy
277+
parentsHierarchy.discard("Ljava/lang/Object;")
278+
return list(parentsHierarchy)
275279

276280
@property
277281
def fullName(self) -> str:
@@ -713,6 +717,7 @@ def checkMethodCalls(
713717
for candidate in checkMethods:
714718
checkMethodSet.update(quark.apkinfo.find_method(*candidate))
715719

716-
targetLowerFuncSet = {i for i, _ in quark.apkinfo.lowerfunc(targetMethodSet.pop())}
720+
targetLowerFuncSet = {
721+
i for i, _ in quark.apkinfo.lowerfunc(targetMethodSet.pop())}
717722

718723
return any(checkMethodSet.intersection(targetLowerFuncSet))

0 commit comments

Comments
 (0)