Hello all,

I been trying to setup fossil to run under nostromo on OpenBSD. I've  
been able to get the cgi web interface working, but when attempting to  
clone I would receive a "out of memory" error. I contacted the  
nostromo developer, Marcus Glocker, to see if nostromo was doing any  
kind of additional memory management. It is not, but he did take the  
time to figure out what the problem was. Below is he's response to me.  
What do you think about the two proposed solutions? Thanks.

Marcus' response:

I found the problem which causes the "out of memory" error in fossil
which you see e.g. when trying to clone a fossil repository from a
nostromo webserver. I think it's a bug in fossil.  What happens;

fossil sends a POST request to nostromo, saying it does understand
HTTP/1.1:

        POST /cgi-bin/cgi/xfer HTTP/1.1
        Host: test.com
        User-Agent: Fossil/[37f295c310]
        Content-Type: application/x-fossil
        Content-Length: 312

        <!-- data snipped -->

The HTTP/1.1 header is set *statically* in fossil-src src/http.c:94.
nostromo responds back using the chunked Transfer-Encoding method,
which is supported for the HTTP/1.1 protocol:

        HTTP/1.1 200 OK
        Date: Mon, 05 Oct 2009 13:40:49 GMT
        Server: nostromo 1.9.2
        Connection: close
        Transfer-Encoding: chunked
        Cache-control: no-cache, no-store
        Content-Type: application/x-fossil; charset=utf-8
        Content-Length: 45

        <!-- data snipped -->

But fossil doesn't seem to understand chunked Transfer-Encoding,
interpreting the additional chunk-size headers in the data stream
as some sort of it's own procotol, which results in broken protocol,
where fossil wants to allocate a wrong number as size for a blob
field.  That fails of course finally, because this number is too
large/wrong, making malloc(3) fail.

The HTTP/1.1 RFC says for chunked Transfer-Encodings:

        All HTTP/1.1 applications MUST be able to receive and decode
        the "chunked" transfer-coding, and MUST ignore chunk-extension
        extensions they do not understand.

So, fossil must either send the HTTP request with HTTP/1.0, or
ignore the chunk-extension, or support HTTP/1.1 (I propose the first
if there is no real need to use HTTP/1.1).

Maybe you like to forward this mail to the fossil developers,
so they can make a statement about this issue.
_______________________________________________
fossil-users mailing list
fossil-users@lists.fossil-scm.org
http://lists.fossil-scm.org:8080/cgi-bin/mailman/listinfo/fossil-users

Reply via email to