I don't know if this is the answer to the problem, but it looks like a bug anyway. In connobject.c starting at line 133:

        /* time to grow destination string? */
        if (len == 0 && bytes_read == bufsize) {

            _PyString_Resize(&result, bufsize + HUGE_STRING_LEN);
            buffer = PyString_AS_STRING((PyStringObject *) result);
            buffer += HUGE_STRING_LEN;
            bufsize += HUGE_STRING_LEN;
        }


It looks like we've just set the buffer pointer to an address somewhere inside the buffer. That can't be good. The buffer pointer should be set to the bytes_read position. Perhaps one of you FreeBSD heads could try the attached patch.

Jim

------------------------------------------------------------------------

Index: src/connobject.c
===================================================================
--- src/connobject.c    (revision 369511)
+++ src/connobject.c    (working copy)
@@ -135,7 +135,7 @@
_PyString_Resize(&result, bufsize + HUGE_STRING_LEN);
             buffer = PyString_AS_STRING((PyStringObject *) result);
-            buffer += HUGE_STRING_LEN;
+            buffer += bytes_read;
             bufsize += HUGE_STRING_LEN;
         }

Sorry, that doesn't seem to fix it. I did a fresh extraction of mod_python-3.2.6.tgz, applied the patch, did ./configure, make, su, make install, exit su, cd test, ran test.py - got the same result as before, with the same core dump apparently.

I think this is the general kind of thing we're looking for though, with some mistaken pointer/memory operation.

-------

As I mentioned in another message, I did some experimenting with disabling other unittests and found if you disable just "test_fileupload", all the remaining tests including "test_connectionhandler" pass.

If you disable everything except "test_fileupload" and "test_connectionhandler", then "test_connectionhandler" still crashes.

So I suspect that it's code involved with running "test_fileupload" (Testing 1 MB file upload support) that's really the source of the problem, and it's screwing up some part of memory thats only tripped over later later during the connectionhandler test.

        Barry

Reply via email to