From 4478f85650bc033a2e84b83173ee6975de50ca1c Mon Sep 17 00:00:00 2001 From: ghizard <50744617+ghizard@users.noreply.github.com> Date: Fri, 27 Mar 2020 11:26:39 -0400 Subject: [PATCH] GT-3620 SymbolPathParser review fix --- .../java/ghidra/app/util/SymbolPathParser.java | 6 +++--- .../ghidra/app/util/SymbolPathParserTest.java | 16 ++++++++++++++++ 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/util/SymbolPathParser.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/util/SymbolPathParser.java index 98cc7bc301..aa3c4d58ca 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/util/SymbolPathParser.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/util/SymbolPathParser.java @@ -73,7 +73,7 @@ public class SymbolPathParser { if (endIndex > startIndex) { list.add(name.substring(startIndex, endIndex)); startIndex = i + 2; - i++; // Only increment one, because the loop also has in increment. + i++; // Only increment one, because the loop also has an increment. } } } @@ -100,8 +100,8 @@ public class SymbolPathParser { int endIndex = i; // could be 0 if i == 0. if (endIndex > startIndex) { list.add(name.substring(startIndex, endIndex)); - i += 2; - startIndex = i; + startIndex = i + 2; + i++; // Only increment one, because the loop also has an increment. } } } diff --git a/Ghidra/Framework/SoftwareModeling/src/test/java/ghidra/app/util/SymbolPathParserTest.java b/Ghidra/Framework/SoftwareModeling/src/test/java/ghidra/app/util/SymbolPathParserTest.java index b294079b80..3ad581be35 100644 --- a/Ghidra/Framework/SoftwareModeling/src/test/java/ghidra/app/util/SymbolPathParserTest.java +++ b/Ghidra/Framework/SoftwareModeling/src/test/java/ghidra/app/util/SymbolPathParserTest.java @@ -130,4 +130,20 @@ public class SymbolPathParserTest extends AbstractGTest { assertListEqualOrdered(expected, list); } + @Test + public void testUnmatchedAngleBracketFallback1() { + // Contrived example to test naive parsing going into fallback mode due to unmatched + // angle brackets. The expected result here is not an accurate result that we would + // expect from a more sophisticated parser. + String name = "A::operator<=::B::>::E"; + List list = SymbolPathParser.parse(name); + List expected = new ArrayList<>(); + expected.add("A"); + expected.add("operator<="); + expected.add("B"); + expected.add(">"); + expected.add("E"); + assertListEqualOrdered(expected, list); + } + }