oracle / opengrok

OpenGrok is a fast and usable source code search and cross reference engine, written in Java
http://oracle.github.io/opengrok/
Other
4.29k stars 739 forks source link

displaying annotation leads to NPE #4491

Closed vladak closed 7 months ago

vladak commented 7 months ago

In 1.12.24, attempting to display an annotation leads to NPE:

java.lang.NullPointerException
    at org.opengrok.indexer.analysis.Definitions.getTags(Definitions.java:192)
    at org.opengrok.indexer.analysis.JFlexXrefUtils.lambda$maybeNewScope$0(JFlexXrefUtils.java:172)
    at java.base/java.util.Optional.map(Optional.java:265)
    at org.opengrok.indexer.analysis.JFlexXrefUtils.maybeNewScope(JFlexXrefUtils.java:172)
    at org.opengrok.indexer.analysis.JFlexXref.startScope(JFlexXref.java:416)
    at org.opengrok.indexer.analysis.JFlexXref.startNewLine(JFlexXref.java:533)
    at org.opengrok.indexer.analysis.JFlexXref.write(JFlexXref.java:488)
    at org.opengrok.indexer.analysis.TextAnalyzer.writeXref(TextAnalyzer.java:82)
    at org.opengrok.indexer.analysis.AnalyzerGuru.writeXref(AnalyzerGuru.java:690)
    at org.opengrok.indexer.analysis.AnalyzerGuru.writeDumpedXref(AnalyzerGuru.java:716)
    at org.apache.jsp.list_jsp._jspService(list_jsp.java:888)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:814)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:456)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:380)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:328)
    at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:814)
vladak commented 7 months ago

The lineMaps is actually null in:

public @Nullable List<Tag> getTags(int line) {
        return Optional.ofNullable(lineMaps.get(line))
                .map(lineMap -> lineMap.symTags.values().stream()
                        .flatMap(Collection::stream)
                        .collect(Collectors.toList())
                )
                .orElse(null);
    }
vladak commented 7 months ago

The null lineMaps is from a Definitions object that came from the index: https://github.com/oracle/opengrok/blob/21414eb06d6b556c5d70b794fd80d4b0325c8a51/opengrok-web/src/main/webapp/list.jsp#L246