From dde3f4aa8c0bf95535c8380eacf892178e66d4a1 Mon Sep 17 00:00:00 2001 From: ghizard <50744617+ghizard@users.noreply.github.com> Date: Wed, 25 Mar 2020 12:20:58 -0400 Subject: [PATCH 1/3] GT-3620 PdbSymbolParser naive parse bug checkin --- .../ghidra/app/util/SymbolPathParser.java | 4 ++-- .../ghidra/app/util/SymbolPathParserTest.java | 22 ++++++++++++++----- 2 files changed, 19 insertions(+), 7 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 98eabe7f46..98cc7bc301 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 @@ -72,8 +72,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 in 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 e76878d7d4..b294079b80 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 @@ -15,7 +15,7 @@ */ package ghidra.app.util; -import static org.junit.Assert.*; +import static org.junit.Assert.fail; import java.util.ArrayList; import java.util.List; @@ -68,10 +68,10 @@ public class SymbolPathParserTest extends AbstractGTest { @Test public void testNamespaceInFunctionArgument() { - List list = SymbolPathParser.parse( "Foo7::Bar5(class Foo1d::Bar1,int)"); - List expected = new ArrayList<>(); - expected.add("Foo7"); - expected.add("Bar5(class Foo1d::Bar1,int)"); + List list = SymbolPathParser.parse("Foo7::Bar5(class Foo1d::Bar1,int)"); + List expected = new ArrayList<>(); + expected.add("Foo7"); + expected.add("Bar5(class Foo1d::Bar1,int)"); assertListEqualOrdered(expected, list); } @@ -118,4 +118,16 @@ public class SymbolPathParserTest extends AbstractGTest { assertListEqualOrdered(expected, list); } + @Test + public void testSpecialCharAfterDelimiter1() { + String name = "A::B::C,A::B::E >::"; + List list = SymbolPathParser.parse(name); + List expected = new ArrayList<>(); + expected.add("A"); + expected.add("B"); + expected.add("C,A::B::E >"); + expected.add(""); + assertListEqualOrdered(expected, list); + } + } From 7c8d4257e0b0a3e5c677871db7d92703ba064464 Mon Sep 17 00:00:00 2001 From: ghidra1 Date: Fri, 27 Mar 2020 10:34:21 -0400 Subject: [PATCH 2/3] Corrected PIC24 non-critical property key --- Ghidra/Processors/PIC/data/languages/PIC24.pspec | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Ghidra/Processors/PIC/data/languages/PIC24.pspec b/Ghidra/Processors/PIC/data/languages/PIC24.pspec index 7c9b664cef..2a65a73d52 100644 --- a/Ghidra/Processors/PIC/data/languages/PIC24.pspec +++ b/Ghidra/Processors/PIC/data/languages/PIC24.pspec @@ -3,7 +3,8 @@ - + 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 3/3] 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); + } + }