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] 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); + } + }