Mailing List Archive

DO NOT REPLY [Bug 13102] New: - null pointer exception in termCompare
DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=13102>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND
INSERTED IN THE BUG DATABASE.

http://nagoya.apache.org/bugzilla/show_bug.cgi?id=13102

null pointer exception in termCompare

Summary: null pointer exception in termCompare
Product: Lucene
Version: 1.2
Platform: All
OS/Version: All
Status: NEW
Severity: Normal
Priority: Other
Component: Search
AssignedTo: lucene-dev@jakarta.apache.org
ReportedBy: sberents@hotmail.com


WildcardTermEnum or FuzzyTermQueryEnum both call setEnum in their constructors.
Inside the superclass, FilteredTermEnum, I find:
protected void setEnum(TermEnum actualEnum) throws IOException {
this.actualEnum = actualEnum;
// Find the first term that matches
Term term = actualEnum.term();
if (termCompare(term))
currentTerm = term;
else next();
}

Because setEnum is actually called with parameter reader.terms(<some term>),
the expression 'actualEnum.term()' could return null. None of the termCompare
methods check for a null parameter, and they will throw a null pointer
exception in that case. I ran into the situation that a wildcard or fuzzy
search in the nonexistent field 'm' would correctly return 0 results, but the
same search in the non-existent field 'x' would throw a null pointer exception
in the correctsponding termCompare method.
The following temporary fix in abstract class FilteredTermEnum solved the
problem:
protected void setEnum(TermEnum actualEnum) throws IOException {
this.actualEnum = actualEnum;
// Find the first term that matches
Term term = actualEnum.term();
if(term == null) return; // temporary fix -sjb
if (termCompare(term))
currentTerm = term;
else next();
}

--
To unsubscribe, e-mail: <mailto:lucene-dev-unsubscribe@jakarta.apache.org>
For additional commands, e-mail: <mailto:lucene-dev-help@jakarta.apache.org>
RE : DO NOT REPLY [Bug 13102] New: - null pointer exception in termCompare [ In reply to ]
It seems as it may be useful to make a fix in the termCompare methods,
atleast in our testing it hasn't caused any problems.

the new:

if (term != null && field == term.field())

Vs.

the old:
if (field == term.field())

Cheers,
Rasik

-----Message d'origine-----
De : bugzilla@apache.org [mailto:bugzilla@apache.org]
Envoyé : samedi 28 septembre 2002 00:09
À : lucene-dev@jakarta.apache.org
Objet : DO NOT REPLY [Bug 13102] New: - null pointer exception in
termCompare


DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=13102>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND
INSERTED IN THE BUG DATABASE.

http://nagoya.apache.org/bugzilla/show_bug.cgi?id=13102

null pointer exception in termCompare

Summary: null pointer exception in termCompare
Product: Lucene
Version: 1.2
Platform: All
OS/Version: All
Status: NEW
Severity: Normal
Priority: Other
Component: Search
AssignedTo: lucene-dev@jakarta.apache.org
ReportedBy: sberents@hotmail.com


WildcardTermEnum or FuzzyTermQueryEnum both call setEnum in their
constructors.
Inside the superclass, FilteredTermEnum, I find:
protected void setEnum(TermEnum actualEnum) throws IOException {
this.actualEnum = actualEnum;
// Find the first term that matches
Term term = actualEnum.term();
if (termCompare(term))
currentTerm = term;
else next();
}

Because setEnum is actually called with parameter reader.terms(<some
term>),
the expression 'actualEnum.term()' could return null. None of the
termCompare
methods check for a null parameter, and they will throw a null pointer
exception in that case. I ran into the situation that a wildcard or
fuzzy
search in the nonexistent field 'm' would correctly return 0 results,
but the
same search in the non-existent field 'x' would throw a null pointer
exception
in the correctsponding termCompare method.
The following temporary fix in abstract class FilteredTermEnum solved
the
problem:
protected void setEnum(TermEnum actualEnum) throws IOException {
this.actualEnum = actualEnum;
// Find the first term that matches
Term term = actualEnum.term();
if(term == null) return; // temporary fix -sjb
if (termCompare(term))
currentTerm = term;
else next();
}

--
To unsubscribe, e-mail:
<mailto:lucene-dev-unsubscribe@jakarta.apache.org>
For additional commands, e-mail:
<mailto:lucene-dev-help@jakarta.apache.org>


--
To unsubscribe, e-mail: <mailto:lucene-dev-unsubscribe@jakarta.apache.org>
For additional commands, e-mail: <mailto:lucene-dev-help@jakarta.apache.org>