Uploaded image for project: 'Confluence Data Center'
  1. Confluence Data Center
  2. CONFSERVER-43534

Confluence shows stack trace when accessing a page that uses a special character in the title

    XMLWordPrintable

Details

    Description

      Summary

      Confluence shows stack trace when accessing a page that uses a special character in the title

      Environment

      • Confluence 5.10.2
      • Safari
      • Mozilla Firefox

      Steps to Reproduce

      1. Create a page and add a special character (e.g. a '|'' in the title)
      2. Save the page
      3. In Firefox or Safari, log into Confluence and paste the URL directly, for example http://localhost:8090/confluence/display/BATS/page+|+test

      Expected Results

      Page is displayed properly using any browser. This was tested in Confluence 5.8.5 and we found that going to that link directly even with a special character displayed the page without issues

      Actual Results

      User sees a 'java.net.URISyntaxException: Illegal character in path at index' stack trace on the page. This error is thrown in the logs:

      2016-08-25 15:49:59,959 ERROR [http-nio-8090-exec-8] [[Standalone].[localhost].[/confluence].[simple-display]] log Servlet.service() for servlet [simple-display] in context with path [/confluence] threw exception
      java.lang.IllegalArgumentException: java.net.URISyntaxException: Illegal character in path at index 30: /confluence/display/BATS/page+|+test
             	at com.github.kristofa.brave.servlet.ServletHttpServerRequest.getUri(ServletHttpServerRequest.java:27)
             	at com.atlassian.confluence.web.filter.ZipkinTracingFilter$1.lambda$create$0(ZipkinTracingFilter.java:38)
             	at com.github.kristofa.brave.http.HttpServerRequestAdapter.getSpanName(HttpServerRequestAdapter.java:41)
             	at com.github.kristofa.brave.ServerRequestInterceptor.handle(ServerRequestInterceptor.java:47)
             	at com.github.kristofa.brave.servlet.BraveServletFilter.doFilter(BraveServletFilter.java:56)
             	at com.atlassian.confluence.web.filter.ZipkinTracingFilter.doFilter(ZipkinTracingFilter.java:52)
             	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
             	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
             	at com.atlassian.confluence.web.filter.ResponseOutputStreamFilter.doFilter(ResponseOutputStreamFilter.java:23)
             	at com.atlassian.core.filters.AbstractHttpFilter.doFilter(AbstractHttpFilter.java:31)
             	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
             	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
             	at com.atlassian.johnson.filters.AbstractJohnsonFilter.doFilter(AbstractJohnsonFilter.java:72)
             	at com.atlassian.confluence.web.ConfluenceJohnsonFilter.doFilter(ConfluenceJohnsonFilter.java:33)
             	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
             	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
             	at com.atlassian.core.filters.encoding.AbstractEncodingFilter.doFilter(AbstractEncodingFilter.java:41)
             	at com.atlassian.core.filters.AbstractHttpFilter.doFilter(AbstractHttpFilter.java:31)
             	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
             	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
             	at com.atlassian.confluence.impl.servlet.HoldingUntilStartedFilter.doFilter(HoldingUntilStartedFilter.java:88)
             	at com.atlassian.core.filters.AbstractHttpFilter.doFilter(AbstractHttpFilter.java:31)
             	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
             	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
             	at com.atlassian.core.filters.HeaderSanitisingFilter.doFilter(HeaderSanitisingFilter.java:44)
             	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
             	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
             	at com.atlassian.confluence.servlet.FourOhFourErrorLoggingFilter.doFilter(FourOhFourErrorLoggingFilter.java:64)
             	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
             	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
             	at com.atlassian.confluence.web.filter.DebugFilter.doFilter(DebugFilter.java:46)
             	at com.atlassian.core.filters.AbstractHttpFilter.doFilter(AbstractHttpFilter.java:31)
             	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
             	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
             	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
             	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
             	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
             	at org.apache.catalina.valves.StuckThreadDetectionValve.invoke(StuckThreadDetectionValve.java:206)
             	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
             	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
             	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
             	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:528)
             	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1099)
             	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:670)
             	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1520)
             	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476)
             	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
             	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
             	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
             	at java.lang.Thread.run(Thread.java:745)
      Caused by: java.net.URISyntaxException: Illegal character in path at index 30: /confluence/display/BATS/page+|+test
             	at java.net.URI$Parser.fail(URI.java:2848)
             	at java.net.URI$Parser.checkChars(URI.java:3021)
             	at java.net.URI$Parser.parseHierarchical(URI.java:3105)
             	at java.net.URI$Parser.parse(URI.java:3063)
             	at java.net.URI.<init>(URI.java:588)
             	at com.github.kristofa.brave.servlet.ServletHttpServerRequest.getUri(ServletHttpServerRequest.java:25)
             	... 49 more
      2016-08-25 15:49:59,962 INFO [http-nio-8090-exec-8] [atlassian.confluence.status.SystemErrorInformationLogger] writeToLog
      Request Unique ID : 23256772-bdd8-43e3-a43d-260f641b7897
      --------------------------
      JVM Stats
      --------------------------
      usedMemory = 891993208
      usedMemoryInMegabytes = 850
      availableHeap = 181748616
      freeMemoryInMegabytes = 173
      allocatedHeap = 1073741824
      freeAllocatedHeap = 181748616
      totalMemory = 1073741824
      totalMemoryInMegabytes = 1024
      availablePermGen = 0
      maxPermGen = -1
      maxHeap = 1073741824
      usedHeap = 891993208
      freeMemory = 181748616
      usedPermGen = -1
      --------------------------
      Request Information
      --------------------------
      URL: http://localhost:8090/confluence/500page.jsp
      Scheme: http
      Server: localhost
      Port: 8090
      URI: /confluence/500page.jsp
      Context Path: /confluence
      Servlet Path: /500page.jsp
      Path Info: null
      Query String: null
      --------------------------
      Attributes
      --------------------------
      javax.servlet.forward.request_uri: /confluence/display/BATS/page+|+test
      javax.servlet.forward.context_path: /confluence
      javax.servlet.forward.servlet_path: /display
      javax.servlet.forward.path_info: /BATS/page+|+test
      javax.servlet.error.status_code: 500
      com.atlassian.confluence.impl.profiling.DecoratorTimings: com.atlassian.confluence.impl.profiling.DecoratorTimings@698f04e0
      com.opensymphony.sitemesh.APPLIED_ONCE: true
      javax.servlet.error.message:
      javax.servlet.error.servlet_name: simple-display
      atlassian.core.seraph.original.url: /500page.jsp
      javax.servlet.error.request_uri: /confluence/display/BATS/page+|+test
      loginfilter.already.filtered: true
      com.atlassian.core.filters.HeaderSanitisingFilter_already_filtered: true
      com.atlassian.prettyurls.filter.PrettyUrlsSiteMeshFixupFilter: true
      com.atlassian.confluence.web.ConfluenceJohnsonFilter_already_filtered: true
      javax.servlet.error.exception: java.lang.IllegalArgumentException: java.net.URISyntaxException: Illegal character in path at index 30: /confluence/display/BATS/page+|+test
      os_securityfilter_already_filtered: true
      com.atlassian.seraph.auth.LoginReason: OK
      com.atlassian.prettyurls.filter.PrettyUrlsSiteMeshFilter: true
      --------------------------
      Parameters
      --------------------------
      caused by: java.lang.IllegalArgumentException: java.net.URISyntaxException: Illegal character in path at index 30: /confluence/display/BATS/page+|+test
      at com.github.kristofa.brave.servlet.ServletHttpServerRequest.getUri(ServletHttpServerRequest.java:27)
      caused by: java.net.URISyntaxException: Illegal character in path at index 30: /confluence/display/BATS/page+|+test
      at java.net.URI$Parser.fail(URI.java:2848)
      
      2016-08-25 15:50:00,281 WARN [http-nio-8090-exec-6] [common.security.jersey.XsrfResourceFilter] passesAdditionalBrowserChecks Additional XSRF checks failed for request: http://localhost:8090/confluence/rest/webResources/1.0/resources , origin: null , referrer: http://localhost:8090/confluence/display/BATS/page+|+test , credentials in request: true , allowed via CORS: false
       -- referer: http://localhost:8090/confluence/display/BATS/page+|+test | url: /confluence/rest/webResources/1.0/resources | traceId: bb89b029c339b958 | userName: admin
      2016-08-25 15:50:00,771 WARN [http-nio-8090-exec-2] [common.security.jersey.XsrfResourceFilter] passesAdditionalBrowserChecks Additional XSRF checks failed for request: http://localhost:8090/confluence/rest/analytics/1.0/publish/bulk , origin: null , referrer: http://localhost:8090/confluence/display/BATS/page+|+test , credentials in request: true , allowed via CORS: false
       -- referer: http://localhost:8090/confluence/display/BATS/page+|+test | url: /confluence/rest/analytics/1.0/publish/bulk | traceId: a3e3e661a783e3ff | userName: admin
      
      
      
      
      

      Notes

      This issue does not usually occur with Chrome.

      Here is the list of the special characters:

      ";", "?", "/", "#", "%", "+", "|", "[", "]", "\"
      

      Workaround

      There are a couple of ways to change this.

      Changes in reverse proxy

      Follow this guide: Pages with special characters are not accessible via reverse proxy.

      Changes in Confluence
      1. Use Chrome to access the page
      2. Remove the special character from the title of the page
        • Run this SQL query (adjust the title section for the relevant invalid character)
          select contentid, contenttype, title, lowertitle, lastmoddate from content where contenttype = 'PAGE' and prevver is NULL and (title like '%[%' or title like '%]%') order by lastmoddate;
          
      3. For each contentid edit the page with

      Attachments

        Issue Links

          Activity

            People

              Unassigned Unassigned
              dponzio Daniel Ponzio
              Votes:
              74 Vote for this issue
              Watchers:
              73 Start watching this issue

              Dates

                Created:
                Updated: