Dispose XML parser with finally

This commit is contained in:
ghidra1
2020-05-12 12:35:48 -04:00
parent 44037991d2
commit 0001ee2651
4 changed files with 54 additions and 31 deletions

View File

@@ -562,14 +562,18 @@ class LibrarySymbolTable {
} }
// TODO: should consider checking version instead of last modified // TODO: should consider checking version instead of last modified
XmlPullParser parser = XmlPullParserFactory.create(exportsFile, ERROR_HANDLER, false); XmlPullParser parser = XmlPullParserFactory.create(exportsFile, ERROR_HANDLER, false);
XmlElement start = parser.start("LIBRARY"); try {
String path = start.getAttribute("PATH"); XmlElement start = parser.start("LIBRARY");
String dateString = start.getAttribute("DATE"); String path = start.getAttribute("PATH");
parser.dispose(); String dateString = start.getAttribute("DATE");
Date date = TIMESTAMP_FORMAT.parse(dateString); Date date = TIMESTAMP_FORMAT.parse(dateString);
long lastModifiedSeconds = (libraryFile.lastModified() / 1000) * 1000; // file time in seconds long lastModifiedSeconds = (libraryFile.lastModified() / 1000) * 1000; // file time in seconds
return date.equals(new Date(lastModifiedSeconds)) && return date.equals(new Date(lastModifiedSeconds)) &&
path.equalsIgnoreCase(libraryFile.getAbsolutePath()); path.equalsIgnoreCase(libraryFile.getAbsolutePath());
}
finally {
parser.dispose();
}
} }
private static final ErrorHandler ERROR_HANDLER = new ErrorHandler() { private static final ErrorHandler ERROR_HANDLER = new ErrorHandler() {

View File

@@ -78,9 +78,7 @@ public class QueryOpinionService {
QueryOpinionServiceHandler.read(parser); QueryOpinionServiceHandler.read(parser);
} }
finally { finally {
if (parser != null) { parser.dispose();
parser.dispose();
}
} }
} }

View File

@@ -149,9 +149,9 @@ public class SleighLanguage implements Language {
} }
private boolean isSLAWrongVersion(ResourceFile slaFile) { private boolean isSLAWrongVersion(ResourceFile slaFile) {
XmlPullParser parser = null;
try { try {
XmlPullParser parser = XmlPullParserFactory.create(slaFile, new ErrorHandler() { parser = XmlPullParserFactory.create(slaFile, new ErrorHandler() {
@Override @Override
public void warning(SAXParseException exception) throws SAXException { public void warning(SAXParseException exception) throws SAXException {
@@ -180,6 +180,11 @@ public class SleighLanguage implements Language {
catch (SAXException | IOException e) { catch (SAXException | IOException e) {
return true; return true;
} }
finally {
if (parser != null) {
parser.dispose();
}
}
} }
private boolean isSLAStale(ResourceFile slaFile) { private boolean isSLAStale(ResourceFile slaFile) {
@@ -536,20 +541,24 @@ public class SleighLanguage implements Language {
private void readInitialDescription() throws SAXException, IOException { private void readInitialDescription() throws SAXException, IOException {
ResourceFile specFile = description.getSpecFile(); ResourceFile specFile = description.getSpecFile();
XmlPullParser parser = XmlPullParserFactory.create(specFile, SPEC_ERR_HANDLER, false); XmlPullParser parser = XmlPullParserFactory.create(specFile, SPEC_ERR_HANDLER, false);
XmlElement nextElement = parser.peek(); try {
while (nextElement != null && !nextElement.getName().equals("segmented_address")) { XmlElement nextElement = parser.peek();
parser.next(); // skip element while (nextElement != null && !nextElement.getName().equals("segmented_address")) {
nextElement = parser.peek(); parser.next(); // skip element
} nextElement = parser.peek();
if (nextElement != null) { }
XmlElement element = parser.start(); // segmented_address element if (nextElement != null) {
segmentedspace = element.getAttribute("space"); XmlElement element = parser.start(); // segmented_address element
segmentType = element.getAttribute("type"); segmentedspace = element.getAttribute("space");
if (segmentType == null) { segmentType = element.getAttribute("type");
segmentType = ""; if (segmentType == null) {
segmentType = "";
}
} }
} }
parser.dispose(); finally {
parser.dispose();
}
} }
private void setDefaultDataSpace(String spaceName) { private void setDefaultDataSpace(String spaceName) {
@@ -842,8 +851,12 @@ public class SleighLanguage implements Language {
private void readRemainingSpecification() throws SAXException, IOException { private void readRemainingSpecification() throws SAXException, IOException {
ResourceFile specFile = description.getSpecFile(); ResourceFile specFile = description.getSpecFile();
XmlPullParser parser = XmlPullParserFactory.create(specFile, SPEC_ERR_HANDLER, false); XmlPullParser parser = XmlPullParserFactory.create(specFile, SPEC_ERR_HANDLER, false);
read(parser); try {
parser.dispose(); read(parser);
}
finally {
parser.dispose();
}
} }
private void readSpecification(final ResourceFile sleighfile) private void readSpecification(final ResourceFile sleighfile)
@@ -865,8 +878,12 @@ public class SleighLanguage implements Language {
} }
}; };
XmlPullParser parser = XmlPullParserFactory.create(sleighfile, errHandler, false); XmlPullParser parser = XmlPullParserFactory.create(sleighfile, errHandler, false);
restoreXml(parser); try {
parser.dispose(); restoreXml(parser);
}
finally {
parser.dispose();
}
} }
private void restoreXml(XmlPullParser parser) throws UnknownInstructionException { private void restoreXml(XmlPullParser parser) throws UnknownInstructionException {

View File

@@ -177,8 +177,12 @@ public class SleighLanguageProvider implements LanguageProvider {
} }
}; };
XmlPullParser parser = XmlPullParserFactory.create(specFile, errHandler, false); XmlPullParser parser = XmlPullParserFactory.create(specFile, errHandler, false);
read(parser, specFile.getParentFile(), specFile.getName()); try {
parser.dispose(); read(parser, specFile.getParentFile(), specFile.getName());
}
finally {
parser.dispose();
}
} }
private void read(XmlPullParser parser, ResourceFile parentDirectory, String ldefs) { private void read(XmlPullParser parser, ResourceFile parentDirectory, String ldefs) {