mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2025-10-03 17:59:46 +02:00
GP-1724_ghizard - fix MDMangGenericize processing errors.
This commit is contained in:
parent
022ac15298
commit
0be01564fa
7 changed files with 26 additions and 34 deletions
|
@ -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
|
||||||
|
|
|
@ -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 != '@') {
|
||||||
|
|
|
@ -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 = "";
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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 = "";
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 = "";
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue