mirror of
https://github.com/revanced/smali.git
synced 2025-05-08 02:14:32 +02:00
Changed the functionality of TryListBuilder so that when adding a catch-all handler, existing catch-all handlers take priority over the catch-all handler being added.
git-svn-id: https://smali.googlecode.com/svn/trunk@40 55b6fa8a-2a1e-11de-a435-ffa8d773f76a
This commit is contained in:
parent
a77aba807f
commit
05700838d7
@ -202,7 +202,10 @@ public class TryListBuilder
|
||||
tryRange = newRange;
|
||||
}
|
||||
|
||||
tryRange.catchAllHandlerAddress = handlerAddress;
|
||||
if (tryRange.catchAllHandlerAddress == -1) {
|
||||
tryRange.catchAllHandlerAddress = handlerAddress;
|
||||
}
|
||||
|
||||
previousEnd = tryRange.endAddress;
|
||||
tryRange = tryRange.next;
|
||||
} while (tryRange.previous != endRange);
|
||||
|
@ -425,6 +425,46 @@ public class TryListBuilderTest
|
||||
checkTry(tries.get(4), 10, 12, -1, new Handler[]{handler3});
|
||||
}
|
||||
|
||||
@Test
|
||||
public void catchAllTest1() {
|
||||
//|-----|
|
||||
// |---|
|
||||
TryListBuilder tryListBuilder = new TryListBuilder();
|
||||
|
||||
DexFile dexFile = DexFile.makeBlankDexFile();
|
||||
|
||||
tryListBuilder.addCatchAllHandler(2, 8, 100);
|
||||
tryListBuilder.addCatchAllHandler(4, 6, 101);
|
||||
|
||||
Pair<List<CodeItem.TryItem>, List<CodeItem.EncodedCatchHandler>> retVal = tryListBuilder.encodeTries(dexFile);
|
||||
List<CodeItem.TryItem> tries = retVal.first;
|
||||
|
||||
Assert.assertTrue(tries.size() == 3);
|
||||
checkTry(tries.get(0), 2, 4, 100, new Handler[]{});
|
||||
checkTry(tries.get(1), 4, 6, 100, new Handler[]{});
|
||||
checkTry(tries.get(2), 6, 8, 100, new Handler[]{});
|
||||
}
|
||||
|
||||
@Test
|
||||
public void catchAllTest2() {
|
||||
// |---|
|
||||
//|-----|
|
||||
TryListBuilder tryListBuilder = new TryListBuilder();
|
||||
|
||||
DexFile dexFile = DexFile.makeBlankDexFile();
|
||||
|
||||
tryListBuilder.addCatchAllHandler(4, 6, 100);
|
||||
tryListBuilder.addCatchAllHandler(2, 8, 101);
|
||||
|
||||
Pair<List<CodeItem.TryItem>, List<CodeItem.EncodedCatchHandler>> retVal = tryListBuilder.encodeTries(dexFile);
|
||||
List<CodeItem.TryItem> tries = retVal.first;
|
||||
|
||||
Assert.assertTrue(tries.size() == 3);
|
||||
checkTry(tries.get(0), 2, 4, 101, new Handler[]{});
|
||||
checkTry(tries.get(1), 4, 6, 100, new Handler[]{});
|
||||
checkTry(tries.get(2), 6, 8, 101, new Handler[]{});
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user