Closed brazdil closed 11 years ago
My bad. SparseBitSet is not playing well with existing BitSet instances. I've now replaced all control flow related BitSet instances with SparseBitSet in 7669fad.
Don't forget to run init.sh to apply the latest patch to dx.
Hi, I know you've already identified this issue, but want to give you more testing data. The Kakao messenger now successfully compiles (!!!), though only with 2GB heap, but then fails on the verifier due to a typing issue.
The problematic method is the
<clinit>
of classLcom/kakao/talk/application/GlobalApplication;
. The instrumented code begins with initialization of the static taint fields:You might notice that
a18
is not used and therefore line 1 is dead. It would be used as NULL if some of the taint fields corresponded to a field of array type. (I might actually simplify this, but it is nonetheless a valid piece of code). The full method body is at http://pastebin.com/JtVYgh47After compilation (and presumably due to the optimizer), this snippet becomes:
The problem is obvious:
a17
anda19
were allocated into the same registerr0
, and therefore the second INVOKE will fail, because it tries to use aTaintExternal
object as anint
. It is, however, interesting that the second CONST is not identified as dead. Depending on when dead code removal happens, one of the CONSTs should have been removed. Full code again available at: http://pastebin.com/LNKb5LxgThe original APK is at: https://www.dropbox.com/s/pjqhkrqmma0p66e/Dexter_Issue22.apk