<pierre.vi...@postfinance.ch> writes:

> Yes you are right, I have not looked at the wireshark output good
> enough!  Unfortunately I cannot change it in our HttpProxy: this
> change of the case of the header keys is performed by the underlying
> HTTP Layer in java and not by our own code. I think the reason for
> this is that the HTTP specification states that the header-keys are
> case-insensitive (see
> f.i. 
> http://stackoverflow.com/questions/5258977/are-http-headers-case-sensitive).

It's fixed on trunk and proposed for the next release.

> Maybe if this bug is fixed in the svn client then the segmentation
> fault would be solved? There might be another header field which is
> not managed correctly because of case-sensitiveness?

I noticed that your proxy is changing the status line by dropping the
reason-phrase:

   HTTP/1.1 207 Multi-Status

to

   HTTP/1.1 207

The client is allowed to ignore the reason-phrase but I don't know
whether the server is allowed to omit it.  A strict reading of the RFC
may require at least a space after the 207.  However, this is not the
cause of the crash, at least on my machine.

I can't reproduce the crash.  I see the trace has "Connection: close" so
the problem is not probably not extra data between requests.  The trace
is for a Windows client, is it possible to get a trace for the Linux
client?

I've converted the trace to a script.  Does your Windows client crash
when run against the dummy server in this script?  Does the Linux client
crash?

#!/usr/bin/python
import SocketServer
import re

class MyTCPHandler(SocketServer.StreamRequestHandler):

  responses = [
    (
"""HTTP/1.1 200 OK
Svn-me-resource: /svn/t_sponis_testrepo/!svn/me
Svn-txn-root-stub: /svn/t_sponis_testrepo/!svn/txr
Svn-supported-posts: create-txn, create-txn-with-props
Content-type: text/xml; charset="utf-8"
Content-length: 201
Svn-repository-root: /svn/t_sponis_testrepo
Dav: 1,2, version-control,checkout,working-resource, merge,baseline,activity,version-controlled-collection, http://subversion.tigris.org/xmlns/dav/svn/depth, http://subversion.tigris.org/xmlns/dav/svn/log-revprops, http://subversion.tigris.org/xmlns/dav/svn/atomic-revprops, http://subversion.tigris.org/xmlns/dav/svn/partial-replay, http://subversion.tigris.org/xmlns/dav/svn/inherited-props, http://subversion.tigris.org/xmlns/dav/svn/inline-props, http://subversion.tigris.org/xmlns/dav/svn/reverse-file-revs, http://subversion.tigris.org/xmlns/dav/svn/mergeinfo, http://subversion.tigris.org/xmlns/dav/svn/ephemeral-txnprops, http://subversion.tigris.org/xmlns/dav/svn/replay-rev-resource
Ch.nevis.session.secroles: auth.strong,idma_Benutzer,infplat_user,esclienttest_roleBC,esclienttest_roleA,esclienttest_roleB,depo_Admin,itam_Leser,itam_Administrator,itsms_asset_viewer,itsms_svc_req_usr,testsaml_admin,global.allow,acc.idma,acc.infplat,acc.esclienttest,acc.depo,acc.itam,acc.itsms,acc.testsaml
Svn-allow-bulk-updates: On
Ms-author-via: DAV
Svn-vtxn-stub: /svn/t_sponis_testrepo/!svn/vtxn
Svn-vtxn-root-stub: /svn/t_sponis_testrepo/!svn/vtxr
Svn-rev-root-stub: /svn/t_sponis_testrepo/!svn/rvr
Connection: close
Svn-repository-uuid: 0926ec5e-c495-11e3-b81a-bb1aca739395
Svn-youngest-rev: 16
Server: Apache
Date: Fri, 09 Jan 2015 06:26:26 GMT
Allow: OPTIONS,GET,HEAD,POST,DELETE,TRACE,PROPFIND,PROPPATCH,COPY,MOVE,LOCK,UNLOCK,CHECKOUT
Svn-repository-mergeinfo: yes
Svn-rev-stub: /svn/t_sponis_testrepo/!svn/rev
Svn-txn-stub: /svn/t_sponis_testrepo/!svn/txn

<?xml version="1.0" encoding="utf-8"?>
<D:options-response xmlns:D="DAV:">
<D:activity-collection-set><D:href>/svn/t_sponis_testrepo/!svn/act/</D:href></D:activity-collection-set></D:options-response>
"""
      ),
    (
"""HTTP/1.1 200 OK
Content-type: text/xml; charset="utf-8"
Content-length: 97
Ch.nevis.session.secroles: auth.strong,idma_Benutzer,infplat_user,esclienttest_roleBC,esclienttest_roleA,esclienttest_roleB,depo_Admin,itam_Leser,itam_Administrator,itsms_asset_viewer,itsms_svc_req_usr,testsaml_admin,global.allow,acc.idma,acc.infplat,acc.esclienttest,acc.depo,acc.itam,acc.itsms,acc.testsaml
Dav: 1,2, version-control,checkout,working-resource, merge,baseline,activity,version-controlled-collection, http://subversion.tigris.org/xmlns/dav/svn/depth, http://subversion.tigris.org/xmlns/dav/svn/log-revprops, http://subversion.tigris.org/xmlns/dav/svn/atomic-revprops, http://subversion.tigris.org/xmlns/dav/svn/partial-replay, http://subversion.tigris.org/xmlns/dav/svn/inherited-props, http://subversion.tigris.org/xmlns/dav/svn/inline-props, http://subversion.tigris.org/xmlns/dav/svn/reverse-file-revs, http://subversion.tigris.org/xmlns/dav/svn/mergeinfo
Ms-author-via: DAV
Connection: close
Server: Apache
Date: Fri, 09 Jan 2015 06:26:26 GMT
Allow: OPTIONS,GET,HEAD,POST,DELETE,TRACE,PROPFIND,PROPPATCH,COPY,MOVE,LOCK,UNLOCK,CHECKOUT

<?xml version="1.0" encoding="utf-8"?>
<D:options-response xmlns:D="DAV:">
</D:options-response>
"""
      ),
    (
"""HTTP/1.1 207
Content-type: text/xml; charset="utf-8"
Content-length: 673
Ch.nevis.session.secroles: auth.strong,idma_Benutzer,infplat_user,esclienttest_roleBC,esclienttest_roleA,esclienttest_roleB,depo_Admin,itam_Leser,itam_Administrator,itsms_asset_viewer,itsms_svc_req_usr,testsaml_admin,global.allow,acc.idma,acc.infplat,acc.esclienttest,acc.depo,acc.itam,acc.itsms,acc.testsaml
Connection: close
Server: Apache
Date: Fri, 09 Jan 2015 06:26:27 GMT

<?xml version="1.0" encoding="utf-8"?>
<D:multistatus xmlns:D="DAV:" xmlns:ns1="http://subversion.tigris.org/xmlns/dav/"; xmlns:ns0="DAV:">
<D:response xmlns:lp1="DAV:" xmlns:lp2="http://subversion.tigris.org/xmlns/dav/";>
<D:href>/svn/t_sponis_testrepo/</D:href>
<D:propstat>
<D:prop>
<lp1:version-controlled-configuration><D:href>/svn/t_sponis_testrepo/!svn/vcc/default</D:href></lp1:version-controlled-configuration>
<lp1:resourcetype><D:collection/></lp1:resourcetype>
<lp2:baseline-relative-path/>
<lp2:repository-uuid>0926ec5e-c495-11e3-b81a-bb1aca739395</lp2:repository-uuid>
</D:prop>
<D:status>HTTP/1.1 200 OK</D:status>
</D:propstat>
</D:response>
</D:multistatus>
"""
      ),
    (
"""HTTP/1.1 207
Content-type: text/xml; charset="utf-8"
Content-length: 425
Ch.nevis.session.secroles: auth.strong,idma_Benutzer,infplat_user,esclienttest_roleBC,esclienttest_roleA,esclienttest_roleB,depo_Admin,itam_Leser,itam_Administrator,itsms_asset_viewer,itsms_svc_req_usr,testsaml_admin,global.allow,acc.idma,acc.infplat,acc.esclienttest,acc.depo,acc.itam,acc.itsms,acc.testsaml
Connection: close
Server: Apache
Date: Fri, 09 Jan 2015 06:26:27 GMT

<?xml version="1.0" encoding="utf-8"?>
<D:multistatus xmlns:D="DAV:" xmlns:ns0="DAV:">
<D:response xmlns:lp1="DAV:" xmlns:lp2="http://subversion.tigris.org/xmlns/dav/";>
<D:href>/svn/t_sponis_testrepo/!svn/vcc/default</D:href>
<D:propstat>
<D:prop>
<lp1:checked-in><D:href>/svn/t_sponis_testrepo/!svn/bln/16</D:href></lp1:checked-in>
</D:prop>
<D:status>HTTP/1.1 200 OK</D:status>
</D:propstat>
</D:response>
</D:multistatus>
"""
      ),
    (''),
    ]
  response = 0
    
  def handle(self):
    clen = None
    chunked = False
    while True:
      self.data = self.rfile.readline().strip()
      print "read: " + self.data
      if self.data == "Transfer-Encoding: chunked":
        chunked = True
      m = re.match('Content-Length: (.*)', self.data)
      if m:
        clen = int(m.group(1))
      if self.data == '':
        break
    if chunked: # Handling one chunk is enough for now
      self.data = self.rfile.readline().strip()
      print "read: " + self.data
      clen = int(self.data, 16)
    if clen:
      self.data = self.rfile.read(clen)
      print "read: " + self.data
    if chunked:
      self.data = self.rfile.readline().strip()
      self.data = self.rfile.readline().strip()
      print "read: " + self.data

    self.wfile.write(MyTCPHandler.responses[MyTCPHandler.response])
    MyTCPHandler.response += 1
    if MyTCPHandler.response == len(MyTCPHandler.responses):
      MyTCPHandler.response = 0

if __name__ == "__main__":

  SocketServer.TCPServer.allow_reuse_address = True
  server = SocketServer.TCPServer(("localhost", 7777), MyTCPHandler)
  server.serve_forever()
-- 
Philip Martin | Subversion Committer
WANdisco // *Non-Stop Data*

Reply via email to