FishEye fails to index an SVN repository over HTTP with a 400 bad request error

XMLWordPrintable

    • Type: Bug
    • Resolution: Answered
    • Priority: Low
    • N/A
    • Affects Version/s: 3.2.4, 3.3.2, 4.4.2, 4.8.7
    • Component/s: None
    • None
    • Severity 3 - Minor
    • 22

      Summary

      SVNKit does not URLencode URLs before making requests over HTTP/HTTPS. This isn't a problem for Apache (which is the most common web server used for hosting SVN repos) but can be a problem for SVN repos hosted on other web servers such as Jetty. Jetty will reject any URL with a non-url-encoded space in it.

      The bug reported at SVNKIT-491 contains more information, however SVNKit support has moved to another domain and the above ticket is closed and there is a follow-up on the bug above in the following thread in their new support website:

      SVNKit does not properly URLEncode URLs in outbound HTTP requests (SVNKit <-> Jetty)

      Environment

      Fisheye 3.2.4, 3.3.2, 4.4.2, 4.8.7

      Steps to Reproduce

      Configure Fisheye to index SVN repository that contains spaces in the path over HTTP / HTTPS.

      Actual Results

      Indexing fails and the following error is reported in the logs:

      2022-03-31 00:00:04,904 WARN  [InitPing1 REPO_NAME ] fisheye BaseRepositoryScanner-handleSlurpException - Problem processing revisions from repository REPO_NAME (REPO_NAME) due to class com.cenqua.fisheye.rep.RepositoryClientException - org.apache.subversion.javahl.ClientException: svn: E175002: PROPFIND of '/scm/repo/RepoName/main/!svn/ver/3277/some/path that contains spaces/filename.cpp': 400 Illegal character SPACE=  (https://the.svnhost.url:8443)
      com.cenqua.fisheye.rep.RepositoryClientException: org.apache.subversion.javahl.ClientException: svn: E175002: PROPFIND of '/scm/repo/RepoName/main/!svn/ver/3277/some/path that contains spaces/filename.cpp': 400 Illegal character SPACE=  (https://the.svnhost.url:8443)
      	at com.cenqua.fisheye.svn.SvnThrottledClient.executeNoThrottle(SvnThrottledClient.java:192) [fisheye.jar:?]
      	at com.cenqua.fisheye.svn.SvnThrottledClient.execute(SvnThrottledClient.java:161) [fisheye.jar:?]
      	at com.cenqua.fisheye.svn.SvnThrottledClient.diffSummarize(SvnThrottledClient.java:231) [fisheye.jar:?]
      	at com.atlassian.fisheye.svn.Svn2Infill2Processor.summarizeDiff(Svn2Infill2Processor.java:303) [fisheye.jar:?]
      	at com.atlassian.fisheye.svn.Svn2Infill2Processor.createDiffSummary(Svn2Infill2Processor.java:285) [fisheye.jar:?]
      	at com.atlassian.fisheye.svn.Svn2Infill2Processor.infillChangeSet(Svn2Infill2Processor.java:209) [fisheye.jar:?]
      	at com.atlassian.fisheye.svn.Svn2Infill2Processor.access$100(Svn2Infill2Processor.java:88) [fisheye.jar:?]
      	at com.atlassian.fisheye.svn.Svn2Infill2Processor$1.perform(Svn2Infill2Processor.java:139) [fisheye.jar:?]
      	at com.atlassian.fisheye.svn.Svn2Infill2Processor$1.perform(Svn2Infill2Processor.java:123) [fisheye.jar:?]
      	at com.cenqua.fisheye.cache.BaseRevisionCache.withDbWriteLock(BaseRevisionCache.java:1086) [fisheye.jar:?]
      	at com.atlassian.fisheye.svn.Svn2Infill2Processor.process(Svn2Infill2Processor.java:123) [fisheye.jar:?]
      	at com.atlassian.fisheye.svn.Svn2Scanner.infillRepository(Svn2Scanner.java:238) [fisheye.jar:?]
      	at com.atlassian.fisheye.svn.Svn2Scanner.slurpRepository(Svn2Scanner.java:224) [fisheye.jar:?]
      	at com.atlassian.fisheye.svn.Svn2Scanner.doSlurpTransaction(Svn2Scanner.java:189) [fisheye.jar:?]
      	at com.cenqua.fisheye.rep.BaseRepositoryScanner.ping(BaseRepositoryScanner.java:73) [fisheye.jar:?]
      	at com.cenqua.fisheye.rep.BaseRepositoryEngine.doSlurp(BaseRepositoryEngine.java:85) [fisheye.jar:?]
      	at com.cenqua.fisheye.rep.RepositoryEngine.slurp(RepositoryEngine.java:419) [fisheye.jar:?]
      	at com.cenqua.fisheye.rep.ping.IndexingPingRequest.doRequest(IndexingPingRequest.java:28) [fisheye.jar:?]
      	at com.cenqua.fisheye.rep.ping.IncrementalPingRequest.doRequest(IncrementalPingRequest.java:30) [fisheye.jar:?]
      	at com.cenqua.fisheye.rep.ping.PingRequest$1.run(PingRequest.java:55) [fisheye.jar:?]
      	at com.cenqua.fisheye.util.NamedExecution.run(NamedExecution.java:27) [fisheye.jar:?]
      	at com.cenqua.fisheye.rep.ping.PingRequest.process(PingRequest.java:52) [fisheye.jar:?]
      	at com.cenqua.fisheye.rep.RepositoryHandle.processPingRequests(RepositoryHandle.java:211) [fisheye.jar:?]
      	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [?:1.8.0_291]
      	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [?:1.8.0_291]
      	at java.lang.Thread.run(Unknown Source) [?:1.8.0_291]
      Caused by: org.apache.subversion.javahl.ClientException: svn: E175002: PROPFIND of '/scm/repo/RepoName/main/!svn/ver/3277/some/path that contains spaces/filename.cpp': 400 Illegal character SPACE=  (https://the.svnhost.url:8443)
      	at org.apache.subversion.javahl.ClientException.fromException(ClientException.java:117) [svnkit-javahl16-1.10.1.jar:?]
      	at org.tmatesoft.svn.core.javahl17.SVNClientImpl.getClientException(SVNClientImpl.java:1535) [svnkit-javahl16-1.10.1.jar:?]
      	at org.tmatesoft.svn.core.javahl17.SVNClientImpl.diffSummarize(SVNClientImpl.java:1249) [svnkit-javahl16-1.10.1.jar:?]
      	at org.apache.subversion.javahl.SVNClient.diffSummarize(SVNClient.java:211) [svnkit-javahl16-1.10.1.jar:?]
      	at com.cenqua.fisheye.svn.SvnThrottledClient$4.call(SvnThrottledClient.java:237) [fisheye.jar:?]
      	at com.cenqua.fisheye.svn.SvnThrottledClient$4.call(SvnThrottledClient.java:232) [fisheye.jar:?]
      	at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.8.0_291]
      	at com.cenqua.fisheye.svn.SvnTask.access$101(SvnTask.java:13) [fisheye.jar:?]
      	at com.cenqua.fisheye.svn.SvnTask$1.run(SvnTask.java:35) [fisheye.jar:?]
      	at com.cenqua.fisheye.util.NamedExecution.run(NamedExecution.java:27) [fisheye.jar:?]
      	at com.cenqua.fisheye.svn.SvnTask.run(SvnTask.java:30) [fisheye.jar:?]
      	... 3 more
      Caused by: org.tmatesoft.svn.core.SVNException: svn: E175002: PROPFIND of '/scm/repo/RepoName/main/!svn/ver/3277/some/path that contains spaces/filename.cpp': 400 Illegal character SPACE=  (https://the.svnhost.url:8443)
      	at org.tmatesoft.svn.core.internal.wc.SVNErrorManager.error(SVNErrorManager.java:112) [svnkit-1.10.1.jar:?]
      	at org.tmatesoft.svn.core.internal.wc.SVNErrorManager.error(SVNErrorManager.java:96) [svnkit-1.10.1.jar:?]
      	at org.tmatesoft.svn.core.internal.io.dav.http.HTTPConnection.request(HTTPConnection.java:765) [svnkit-1.10.1.jar:?]
      	at org.tmatesoft.svn.core.internal.io.dav.http.HTTPConnection.request(HTTPConnection.java:352) [svnkit-1.10.1.jar:?]
      	at org.tmatesoft.svn.core.internal.io.dav.http.HTTPConnection.request(HTTPConnection.java:340) [svnkit-1.10.1.jar:?]
      	at org.tmatesoft.svn.core.internal.io.dav.DAVConnection.performHttpRequest(DAVConnection.java:910) [svnkit-1.10.1.jar:?]
      	at org.tmatesoft.svn.core.internal.io.dav.DAVConnection.doReport(DAVConnection.java:363) [svnkit-1.10.1.jar:?]
      	at org.tmatesoft.svn.core.internal.io.dav.DAVRepository.runReport(DAVRepository.java:1361) [svnkit-1.10.1.jar:?]
      	at org.tmatesoft.svn.core.internal.io.dav.DAVRepository.diff(DAVRepository.java:839) [svnkit-1.10.1.jar:?]
      	at org.tmatesoft.svn.core.internal.wc2.ng.SvnNgDiffSummarize.doDiffReposRepos(SvnNgDiffSummarize.java:273) [svnkit-1.10.1.jar:?]
      	at org.tmatesoft.svn.core.internal.wc2.ng.SvnNgDiffSummarize.doDiff(SvnNgDiffSummarize.java:86) [svnkit-1.10.1.jar:?]
      	at org.tmatesoft.svn.core.internal.wc2.ng.SvnNgDiffSummarize.run(SvnNgDiffSummarize.java:59) [svnkit-1.10.1.jar:?]
      	at org.tmatesoft.svn.core.internal.wc2.ng.SvnNgDiffSummarize.run(SvnNgDiffSummarize.java:23) [svnkit-1.10.1.jar:?]
      	at org.tmatesoft.svn.core.internal.wc2.ng.SvnNgOperationRunner.run(SvnNgOperationRunner.java:20) [svnkit-1.10.1.jar:?]
      	at org.tmatesoft.svn.core.internal.wc2.SvnOperationRunner.run(SvnOperationRunner.java:21) [svnkit-1.10.1.jar:?]
      	at org.tmatesoft.svn.core.wc2.SvnOperationFactory.run(SvnOperationFactory.java:1239) [svnkit-1.10.1.jar:?]
      	at org.tmatesoft.svn.core.wc2.SvnOperation.run(SvnOperation.java:294) [svnkit-1.10.1.jar:?]
      	at org.tmatesoft.svn.core.javahl17.SVNClientImpl.diffSummarize(SVNClientImpl.java:1247) [svnkit-javahl16-1.10.1.jar:?]
      	... 11 more
      Caused by: org.tmatesoft.svn.core.SVNException: svn: E175002: PROPFIND of '/scm/repo/RepoName/main/!svn/ver/3277/some/path that contains spaces/filename.cpp': 400 Illegal character SPACE=  (https://the.svnhost.url:8443)
      	at org.tmatesoft.svn.core.internal.wc.SVNErrorManager.error(SVNErrorManager.java:70) [svnkit-1.10.1.jar:?]
      	at org.tmatesoft.svn.core.internal.wc.SVNErrorManager.error(SVNErrorManager.java:57) [svnkit-1.10.1.jar:?]
      	at org.tmatesoft.svn.core.internal.io.dav.DAVUtil.getResourceProperties(DAVUtil.java:79) [svnkit-1.10.1.jar:?]
      	at org.tmatesoft.svn.core.internal.io.dav.handlers.DAVEditorHandler.addNodeProperties(DAVEditorHandler.java:659) [svnkit-1.10.1.jar:?]
      	at org.tmatesoft.svn.core.internal.io.dav.handlers.DAVEditorHandler.endElement(DAVEditorHandler.java:504) [svnkit-1.10.1.jar:?]
      	at org.tmatesoft.svn.core.internal.io.dav.handlers.BasicDAVHandler.endElement(BasicDAVHandler.java:103) [svnkit-1.10.1.jar:?]
      	at org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown Source) [xercesImpl-2.12.1.jar:?]
      	at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanEndElement(Unknown Source) [xercesImpl-2.12.1.jar:2.12.1]
      	at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source) [xercesImpl-2.12.1.jar:2.12.1]
      	at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source) [xercesImpl-2.12.1.jar:2.12.1]
      	at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) [xercesImpl-2.12.1.jar:?]
      	at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) [xercesImpl-2.12.1.jar:?]
      	at org.apache.xerces.parsers.XMLParser.parse(Unknown Source) [xercesImpl-2.12.1.jar:?]
      	at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source) [xercesImpl-2.12.1.jar:?]
      	at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source) [xercesImpl-2.12.1.jar:?]
      	at org.tmatesoft.svn.core.internal.io.dav.http.HTTPConnection.readData(HTTPConnection.java:898) [svnkit-1.10.1.jar:?]
      	at org.tmatesoft.svn.core.internal.io.dav.http.HTTPConnection.readData(HTTPConnection.java:863) [svnkit-1.10.1.jar:?]
      	at org.tmatesoft.svn.core.internal.io.dav.http.HTTPRequest.dispatch(HTTPRequest.java:220) [svnkit-1.10.1.jar:?]
      	at org.tmatesoft.svn.core.internal.io.dav.http.HTTPConnection.request(HTTPConnection.java:451) [svnkit-1.10.1.jar:?]
      	... 26 more
      

      Expected Results

      Fisheye is able to index SVN repositories that contain spaces in the path over HTTP/HTTPS.

      Possible workarounds:

      • Configure Fisheye/Crucible to use a Native Subversion Client
      • Configure an Apache or similar reverse proxy in front of the jetty web server
      • Use another protocol to access the repo. E.g. svn+ssh://, or file:// after using svnsync to maintain a clone of the repository on the Fisheye server

      Resolution

      This issue was investigated and traced back to scm-manager.
      After raising the issue with scm-manager it was addressed/fixed and merged to their master branch: https://github.com/scm-manager/svnkit-patches/pull/2/commits

        1. screenshot-4.png
          screenshot-4.png
          1.68 MB
        2. screenshot-3.png
          screenshot-3.png
          175 kB
        3. screenshot-2.png
          screenshot-2.png
          27 kB
        4. screenshot-1.png
          screenshot-1.png
          29 kB
        5. Do-not-blame-svnkit-examplecode.zip
          26 kB
        6. DisplayFile.java
          12 kB

              Assignee:
              Unassigned
              Reporter:
              Richard Stephens (Inactive)
              Votes:
              3 Vote for this issue
              Watchers:
              9 Start watching this issue

                Created:
                Updated:
                Resolved: