GP-1724_ghizard - fix MDMangGenericize processing errors.

This commit is contained in:
ghizard 2022-02-03 11:37:24 -05:00
parent 022ac15298
commit 0be01564fa
7 changed files with 26 additions and 34 deletions

View file

@ -70,13 +70,15 @@ public class MDMang {
} }
/** /**
* Demangles the string passed in. * Demangles the string passed in and returns a parsed item.
* *
* @param mangledIn * @param mangledIn
* the string to be demangled. * the string to be demangled.
* @param errorOnRemainingChars * @param errorOnRemainingChars
* boolean flag indicating whether remaining characters causes an * boolean flag indicating whether remaining characters causes an
* error. * error.
* @return the item that has been parsed.
* @throws MDException upon parsing error
*/ */
public MDParsableItem demangle(String mangledIn, boolean errorOnRemainingChars) public MDParsableItem demangle(String mangledIn, boolean errorOnRemainingChars)
throws MDException { throws MDException {
@ -88,7 +90,7 @@ public class MDMang {
} }
/** /**
* Demangles the string passed in. * Demangles the string already stored and returns a parsed item.
* *
* @param errorOnRemainingChars * @param errorOnRemainingChars
* boolean flag indicating whether remaining characters causes an * boolean flag indicating whether remaining characters causes an

View file

@ -257,7 +257,7 @@ public class MDObjectCPP extends MDObject {
break; break;
} }
builder.append(ch); builder.append(ch);
dmang.next(); dmang.increment();
} }
int end = dmang.getIndex(); int end = dmang.getIndex();
if ((end - start) != 32 || ch != '@') { if ((end - start) != 32 || ch != '@') {

View file

@ -15,8 +15,7 @@
*/ */
package mdemangler; package mdemangler;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.*;
import static org.junit.Assert.assertTrue;
import org.junit.rules.TestName; import org.junit.rules.TestName;
@ -87,7 +86,8 @@ public class MDBaseTestConfiguration {
} }
// Meant to be overridden, as needed by extended classes // Meant to be overridden, as needed by extended classes
doDemangleSymbol(); demangItem = doDemangleSymbol(mdm, mangled);
demangled = (demangItem == null) ? "" : demangItem.toString();
doBasicTestsAndOutput(); doBasicTestsAndOutput();
@ -192,15 +192,12 @@ public class MDBaseTestConfiguration {
} }
// Meant to be overridden, as needed by extended classes // Meant to be overridden, as needed by extended classes
protected void doDemangleSymbol() throws Exception { protected MDParsableItem doDemangleSymbol(MDMang mdmIn, String mangledIn) throws Exception {
try { try {
demangItem = mdm.demangle(mangled, true); return mdmIn.demangle(mangledIn, true);
demangled = demangItem.toString();
} }
catch (MDException e) { catch (MDException e) {
Msg.info(this, "Could not demangle: " + mangled, e); return null;
demangItem = null;
demangled = "";
} }
} }

View file

@ -41,13 +41,10 @@ public class MDGenericizeTestConfiguration extends MDBaseTestConfiguration {
outputInfo.append(mangledGeneric); outputInfo.append(mangledGeneric);
outputInfo.append("\n"); outputInfo.append("\n");
MDMang mdmGeneric = new MDMang(); MDMang mdmGeneric = new MDMang();
MDParsableItem demangItemGeneric = mdmGeneric.demangle(mangledGeneric, false); MDParsableItem demangItemGeneric = doDemangleSymbol(mdmGeneric, mangledGeneric);
String demangledGeneric; String demangledGeneric = (demangItemGeneric == null) ? "" : demangItemGeneric.toString();
if (demangItemGeneric == null) { if (demangItemGeneric == null) {
demangledGeneric = ""; demangled = ""; // Make sure test value is set properly when failure
}
else {
demangledGeneric = demangItemGeneric.toString();
} }
outputInfo.append("GDemang: "); outputInfo.append("GDemang: ");
outputInfo.append(demangledGeneric); outputInfo.append(demangledGeneric);

View file

@ -46,17 +46,17 @@ public class MDGhidraTestConfiguration extends MDBaseTestConfiguration {
} }
@Override @Override
protected void doDemangleSymbol() throws Exception { protected MDParsableItem doDemangleSymbol(MDMang mdmIn, String mangledIn) throws Exception {
MDParsableItem returnItem;
try { try {
//Set true in operational mode. //Set true in operational mode.
demangItem = ((MDMangGhidra) mdm).demangle(mangled, false); // "false" is different returnItem = ((MDMangGhidra) mdmIn).demangle(mangledIn, false); // "false" is different
demangled = demangItem.toString(); demangledObject = ((MDMangGhidra) mdmIn).getObject();
demangledObject = ((MDMangGhidra) mdm).getObject();
} }
catch (MDException e) { catch (MDException e) {
demangItem = null; returnItem = null;
demangled = "";
} }
return returnItem;
} }
@Override @Override

View file

@ -40,14 +40,12 @@ public class MDVS2013TestConfiguration extends MDBaseTestConfiguration {
} }
@Override @Override
protected void doDemangleSymbol() throws Exception { protected MDParsableItem doDemangleSymbol(MDMang mdmIn, String mangledIn) throws Exception {
try { try {
demangItem = mdm.demangle(mangled, false); // "false" is different return mdmIn.demangle(mangledIn, false); // "false" is different
demangled = demangItem.toString();
} }
catch (MDException e) { catch (MDException e) {
demangItem = null; return null;
demangled = "";
} }
} }
} }

View file

@ -35,14 +35,12 @@ public class MDVS2015TestConfiguration extends MDBaseTestConfiguration {
} }
@Override @Override
protected void doDemangleSymbol() throws Exception { protected MDParsableItem doDemangleSymbol(MDMang mdmIn, String mangledIn) throws Exception {
try { try {
demangItem = mdm.demangle(mangled, false); // "false" is different return mdmIn.demangle(mangledIn, false); // "false" is different
demangled = demangItem.toString();
} }
catch (MDException e) { catch (MDException e) {
demangItem = null; return null;
demangled = "";
} }
} }
} }