Eamonn Saunders created TIKA-2896:
-------------------------------------
Summary: NullPointerException in MimeTypesReader.releaseParser()
Key: TIKA-2896
URL: https://issues.apache.org/jira/browse/TIKA-2896
Project: Tika
Issue Type: Bug
Components: mime
Affects Versions: 1.21
Reporter: Eamonn Saunders
We have encountered a situation where the call to parser.reset() in the
following code snippet results in a NullPointerException.
{code:java}
private static void releaseParser(SAXParser parser) {
try {
parser.reset();
} catch (UnsupportedOperationException e) {
//ignore
}
{code}
releaseParser() called in the finally block of MimeTypesReader.read()
{code:java}
public void read(InputStream stream) throws IOException, MimeTypeException {
SAXParser parser = null;
try {
parser = acquireSAXParser();
parser.parse(stream, this);
} catch (TikaException e) {
throw new MimeTypeException("Unable to create an XML parser", e);
} catch (SAXException e) {
throw new MimeTypeException("Invalid type configuration", e);
} finally {
releaseParser(parser);
}
}{code}
The parser variable will be null coming out of acquireSAXParser() if
acquireSAXParser() is called on a thread that is interrupted (i.e. the
InterruptedException is handled in the following code:
{code:java}
private static SAXParser acquireSAXParser()
throws TikaException {
while (true) {
SAXParser parser = null;
try {
READ_WRITE_LOCK.readLock().lock();
parser = SAX_PARSERS.poll(10, TimeUnit.MILLISECONDS);
} catch (InterruptedException e) {
throw new TikaException("interrupted while waiting for
SAXParser", e);
} finally {
READ_WRITE_LOCK.readLock().unlock();
}
if (parser != null) {
return parser;
}
}
}{code}
A simple fix would be to check for null before calling releaseParser() in the
finally block.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)