Uploaded image for project: 'Jenkins'
  1. Jenkins
  2. JENKINS-50795

jenkins search java.lang.NullPointerException at hudson.search.FixedSet.find(FixedSet.java:53)

       

      When using the search box from a job pages (as opposed to main jenkins page), user may get a null pointer exception instead of the search results. Even refreshing the page gives the same results. 

      Going to home page and performing the same search works well.

       

      It seems that the stacktrace appears only when the search is performed from inside a build page.

      Explanation:

      https://example.com/search/?q=foobar                  --- stacktrace
      https://example.com/job/foo/search/?q=foobar          --- works
      https://example.com/job/foo/12105/search/?q=foobar    --- stacktrace

       

      java.lang.NullPointerException
      
      at hudson.search.FixedSet.find(FixedSet.java:53)
      
      at hudson.search.Search$Mode$1.find(Search.java:209)
      
      at hudson.search.Search.find(Search.java:383)
      
      at hudson.search.Search.find(Search.java:262)
      
      at hudson.search.Search.doIndex(Search.java:85)
      
      at java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:627)
      
      at org.kohsuke.stapler.Function$MethodFunction.invoke(Function.java:343)
      
      at org.kohsuke.stapler.Function.bindAndInvoke(Function.java:184)
      
      at org.kohsuke.stapler.Function.bindAndInvokeAndServeResponse(Function.java:117)
      
      at org.kohsuke.stapler.IndexDispatcher.dispatch(IndexDispatcher.java:26)
      
      at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:715)
      
      Caused: javax.servlet.ServletException
      
      at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:765)
      
      at org.kohsuke.stapler.Stapler.invoke(Stapler.java:845)
      
      at org.kohsuke.stapler.MetaClass$3.doDispatch(MetaClass.java:209)
      
      at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:58)
      
      at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:715)
      
      at org.kohsuke.stapler.Stapler.invoke(Stapler.java:845)
      
      at org.kohsuke.stapler.MetaClass$10.dispatch(MetaClass.java:374)
      
      at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:715)
      
      at org.kohsuke.stapler.Stapler.invoke(Stapler.java:845)
      
      at org.kohsuke.stapler.MetaClass$5.doDispatch(MetaClass.java:248)
      
      at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:58)
      
      at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:715)
      
      at org.kohsuke.stapler.Stapler.invoke(Stapler.java:845)
      
      at org.kohsuke.stapler.Stapler.invoke(Stapler.java:649)
      
      at org.kohsuke.stapler.Stapler.service(Stapler.java:238)
      
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
      
      at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:841)
      
      at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1650)
      
      at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:154)
      
      at org.jenkinsci.plugins.ssegateway.Endpoint$SSEListenChannelFilter.doFilter(Endpoint.java:225)
      
      at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:151)
      
      at io.jenkins.blueocean.auth.jwt.impl.JwtAuthenticationFilter.doFilter(JwtAuthenticationFilter.java:61)
      
      at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:151)
      
      at com.cloudbees.jenkins.support.slowrequest.SlowRequestFilter.doFilter(SlowRequestFilter.java:37)
      
      at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:151)
      
      at io.jenkins.blueocean.ResourceCacheControl.doFilter(ResourceCacheControl.java:134)
      
      at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:151)
      
      at net.bull.javamelody.MonitoringFilter.doFilter(MonitoringFilter.java:237)
      
      at net.bull.javamelody.MonitoringFilter.doFilter(MonitoringFilter.java:214)
      
      at net.bull.javamelody.PluginMonitoringFilter.doFilter(PluginMonitoringFilter.java:88)
      
      at org.jvnet.hudson.plugins.monitoring.HudsonMonitoringFilter.doFilter(HudsonMonitoringFilter.java:114)
      
      at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:151)
      
      at com.sonymobile.jenkins.plugins.kerberossso.KerberosSSOFilter.doFilter(KerberosSSOFilter.java:147)
      
      at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:151)
      
      at jenkins.metrics.impl.MetricsFilter.doFilter(MetricsFilter.java:125)
      
      at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:151)
      
      at hudson.util.PluginServletFilter.doFilter(PluginServletFilter.java:157)
      
      at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1637)
      
      at hudson.security.csrf.CrumbFilter.doFilter(CrumbFilter.java:64)
      
      at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1637)
      
      at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:84)
      
      at hudson.security.UnwrapSecurityExceptionFilter.doFilter(UnwrapSecurityExceptionFilter.java:51)
      
      at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
      
      at jenkins.security.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:117)
      
      at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
      
      at org.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter(AnonymousProcessingFilter.java:125)
      
      at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
      
      at org.acegisecurity.ui.rememberme.RememberMeProcessingFilter.doFilter(RememberMeProcessingFilter.java:142)
      
      at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
      
      at org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:271)
      
      at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
      
      at jenkins.security.BasicHeaderProcessor.doFilter(BasicHeaderProcessor.java:73)
      
      at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
      
      at org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:249)
      
      at hudson.security.HttpSessionContextIntegrationFilter2.doFilter(HttpSessionContextIntegrationFilter2.java:67)
      
      at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
      
      at hudson.security.ChainedServletFilter.doFilter(ChainedServletFilter.java:90)
      
      at hudson.security.HudsonFilter.doFilter(HudsonFilter.java:171)
      
      at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1637)
      
      at org.kohsuke.stapler.compression.CompressionFilter.doFilter(CompressionFilter.java:49)
      
      at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1637)
      
      at hudson.util.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:82)
      
      at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1637)
      
      at org.kohsuke.stapler.DiagnosticThreadNameFilter.doFilter(DiagnosticThreadNameFilter.java:30)
      
      at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1637)
      
      at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:533)
      
      at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
      
      at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:524)
      
      at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
      
      at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:190)
      
      at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1595)
      
      at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:188)
      
      at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1253)
      
      at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:168)
      
      at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:473)
      
      at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1564)
      
      at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:166)
      
      at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1155)
      
      at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
      
      at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
      
      at org.eclipse.jetty.server.Server.handle(Server.java:564)
      
      at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:317)
      
      at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:251)
      
      at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:279)
      
      at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:110)
      
      at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:124)
      
      at org.eclipse.jetty.util.thread.Invocable.invokePreferred(Invocable.java:128)
      
      at org.eclipse.jetty.util.thread.Invocable$InvocableExecutor.invoke(Invocable.java:222)
      
      at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:294)
      
      at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:199)
      
      at winstone.BoundedExecutorService$1.run(BoundedExecutorService.java:77)
      
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
      
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
      
      at java.lang.Thread.run(Thread.java:748)
      

       

          [JENKINS-50795] jenkins search java.lang.NullPointerException at hudson.search.FixedSet.find(FixedSet.java:53)

          Daniel Beck added a comment -

          There's a SearchItem that returns null on getSearchName(). Probably trivial to make the code null safe.

          More difficult to find the culprit, but that's probably secondary.

          Daniel Beck added a comment - There's a SearchItem that returns null on getSearchName(). Probably trivial to make the code null safe. More difficult to find the culprit, but that's probably secondary.

          Sorin Sbarnea added a comment -

          Let me know if there is something else I can do to test.

          Sorin Sbarnea added a comment - Let me know if there is something else I can do to test.

          Oleg Nenashev added a comment -

          Hmm:

          I believe we need document/annotate nulls and getDisplayName() methods in a follow-up task. Otherwise there will be a risk when such "hidden items" somehow get to the search output

          Oleg Nenashev added a comment - Hmm: https://github.com/jenkinsci/jenkins/blob/22aa2e6e766074d11249893e3f35e0b99e20d3d0/core/src/main/java/hudson/model/AbstractModelObject.java#L117 Some getDisplayName() methods may return null I believe we need document/annotate nulls and getDisplayName() methods in a follow-up task. Otherwise there will be a risk when such "hidden items" somehow get to the search output

          Daniel Beck added a comment - - edited

          Addressed in 2.142.

          Daniel Beck added a comment - - edited Addressed in 2.142.

            Unassigned Unassigned
            ssbarnea Sorin Sbarnea
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated:
              Resolved: