You are viewing a plain text version of this content. The canonical link for it is here.
Posted to mod_python-dev@quetz.apache.org by "Graham Dumpleton (JIRA)" <ji...@apache.org> on 2009/06/08 06:14:07 UTC

[jira] Created: (MODPYTHON-255) PythonInputFilter doesn't appear to work for chunked request content.

PythonInputFilter doesn't appear to work for chunked request content.
---------------------------------------------------------------------

                 Key: MODPYTHON-255
                 URL: https://issues.apache.org/jira/browse/MODPYTHON-255
             Project: mod_python
          Issue Type: Bug
          Components: core
    Affects Versions: 3.3.1
            Reporter: Graham Dumpleton


If PythonInputFilter is used to create an input filter, but content handler isn't actually mod_python but another module which can handle chunked request content, and a request is sent with chunked request content, then things just don't seem to work as one would expect.

For example, if use:

$ curl -d "abcdefghijklmnopqrstuvwxyz" http://home.dscpl.com.au/~grahamd/echo.wsgi --header "Transfer-Encoding: chunked"

Where the .wsgi script is for mod_wsgi and is:

import StringIO

def application(environ, start_response):
    headers = []
    headers.append(('Content-type', 'text/plain'))

    start_response('200 OK', headers)

    input = environ['wsgi.input']
    output = StringIO.StringIO()

    keys = environ.keys()
    keys.sort()
    for key in keys:
        print >> output, '%s: %s' % (key, repr(environ[key]))
    print >> output

    length = int(environ.get('CONTENT_LENGTH', '0'))
    #output.write(input.read(length))
    output.write(input.read())

    return [output.getvalue()]

and the input filter itself is:

from mod_python import apache

def inputfilter(filter):

    filter.req.log_error("inputfilter")

    filter.req.log_error("inputfilter read()")
    s = filter.read()
    filter.req.log_error("inputfilter : %s" % repr(s))
    while s:
        filter.req.log_error("inputfilter write()")
        filter.write(s)
        filter.req.log_error("inputfilter read()")
        s = filter.read()
        filter.req.log_error("inputfilter : %s" % repr(s))

    if s is None:
        filter.req.log_error("inputfilter close()")
        filter.close()
        filter.req.log_error("inputfilter exit()")

The curl just hangs and logged output is:

[Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter
[Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter read()
[Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter : 'abcdefghijklmnopqrstuvwxyz'
[Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter write()
[Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter read()
[Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter
[Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter read()
[Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter : '\\r\\n'
[Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter write()
[Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter read()

First off, a '\r\n' is coming from somewhere when it should and then it just blocks on read().

Whatever sentinel is used in input stream to indicate end of chunked request content, it isn't being recognised by mod_python. 

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Commented: (MODPYTHON-255) PythonInputFilter doesn't appear to work for chunked request content.

Posted by "Graham Dumpleton (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/MODPYTHON-255?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12717143#action_12717143 ] 

Graham Dumpleton commented on MODPYTHON-255:
--------------------------------------------

Interestingly, if you change the input filter to be:

from mod_python import apache

def inputfilter(filter):

    filter.req.log_error("inputfilter")

    filter.req.log_error("inputfilter read()")
    s = filter.read(4)
    filter.req.log_error("inputfilter : %s" % repr(s))
    while s:
        filter.req.log_error("inputfilter write()")
        filter.write(s)
        filter.req.log_error("inputfilter read()")
        s = filter.read(4)
        filter.req.log_error("inputfilter : %s" % repr(s))

    if s is None:
        filter.req.log_error("inputfilter close()")
        filter.close()
        filter.req.log_error("inputfilter exit()")

That is, read in 4 byte chunks, it will fail on read subsequent to the first 4 bytes, again with '\r\n' appearing from somewhere.

[Mon Jun 08 14:23:21 2009] [error] [client 192.168.1.5] inputfilter
[Mon Jun 08 14:23:21 2009] [error] [client 192.168.1.5] inputfilter read()
[Mon Jun 08 14:23:21 2009] [error] [client 192.168.1.5] inputfilter : 'abcd'
[Mon Jun 08 14:23:21 2009] [error] [client 192.168.1.5] inputfilter write()
[Mon Jun 08 14:23:21 2009] [error] [client 192.168.1.5] inputfilter read()
[Mon Jun 08 14:23:21 2009] [error] [client 192.168.1.5] inputfilter
[Mon Jun 08 14:23:21 2009] [error] [client 192.168.1.5] inputfilter read()
[Mon Jun 08 14:23:21 2009] [error] [client 192.168.1.5] inputfilter : '\\r\\n'
[Mon Jun 08 14:23:21 2009] [error] [client 192.168.1.5] inputfilter write()
[Mon Jun 08 14:23:21 2009] [error] [client 192.168.1.5] inputfilter read()

If you then interrupt the curl client, you get:

[Mon Jun 08 14:24:16 2009] [error] [client 192.168.1.5] inputfilter : ''
[Mon Jun 08 14:24:16 2009] [error] [client 192.168.1.5] inputfilter : 'efgh'
[Mon Jun 08 14:24:16 2009] [error] [client 192.168.1.5] inputfilter write()
[Mon Jun 08 14:24:16 2009] [error] [client 192.168.1.5] inputfilter read()
[Mon Jun 08 14:24:16 2009] [error] [client 192.168.1.5] inputfilter : 'ijkl'
[Mon Jun 08 14:24:16 2009] [error] [client 192.168.1.5] inputfilter write()
[Mon Jun 08 14:24:16 2009] [error] [client 192.168.1.5] inputfilter read()
[Mon Jun 08 14:24:16 2009] [error] [client 192.168.1.5] inputfilter : 'mnop'
[Mon Jun 08 14:24:16 2009] [error] [client 192.168.1.5] inputfilter write()
[Mon Jun 08 14:24:16 2009] [error] [client 192.168.1.5] inputfilter read()
[Mon Jun 08 14:24:16 2009] [error] [client 192.168.1.5] inputfilter : 'qrst'
[Mon Jun 08 14:24:16 2009] [error] [client 192.168.1.5] inputfilter write()
[Mon Jun 08 14:24:16 2009] [error] [client 192.168.1.5] inputfilter read()
[Mon Jun 08 14:24:16 2009] [error] [client 192.168.1.5] inputfilter : 'uvwx'
[Mon Jun 08 14:24:16 2009] [error] [client 192.168.1.5] inputfilter write()
[Mon Jun 08 14:24:16 2009] [error] [client 192.168.1.5] inputfilter read()
[Mon Jun 08 14:24:16 2009] [error] [client 192.168.1.5] inputfilter : 'yz'
[Mon Jun 08 14:24:16 2009] [error] [client 192.168.1.5] inputfilter write()
[Mon Jun 08 14:24:16 2009] [error] [client 192.168.1.5] inputfilter read()
[Mon Jun 08 14:24:16 2009] [error] [client 192.168.1.5] inputfilter : None
[Mon Jun 08 14:24:16 2009] [error] [client 192.168.1.5] inputfilter close()
[Mon Jun 08 14:24:16 2009] [error] [client 192.168.1.5] inputfilter exit()
[Mon Jun 08 14:24:16 2009] [error] [client 192.168.1.5] inputfilter
[Mon Jun 08 14:24:16 2009] [error] [client 192.168.1.5] inputfilter read()
[Mon Jun 08 14:24:16 2009] [error] [client 192.168.1.5] inputfilter : None
[Mon Jun 08 14:24:16 2009] [error] [client 192.168.1.5] inputfilter close()
[Mon Jun 08 14:24:16 2009] [error] [client 192.168.1.5] inputfilter exit()
[Mon Jun 08 14:24:16 2009] [error] [client 192.168.1.5] inputfilter
[Mon Jun 08 14:24:16 2009] [error] [client 192.168.1.5] inputfilter read()
[Mon Jun 08 14:24:16 2009] [error] [client 192.168.1.5] mod_python (pid=49892, interpreter='home.dscpl.com.au', phase='Filter: myfilter', handler='/Users/grahamd/Sites/inputfilter.mpy'): Application error
[Mon Jun 08 14:24:16 2009] [error] [client 192.168.1.5] ServerName: 'home.dscpl.com.au'
[Mon Jun 08 14:24:16 2009] [error] [client 192.168.1.5] DocumentRoot: '/Library/WebServer/Documents'
[Mon Jun 08 14:24:16 2009] [error] [client 192.168.1.5] URI: '/~grahamd/echo.wsgi'
[Mon Jun 08 14:24:16 2009] [error] [client 192.168.1.5] Location: None
[Mon Jun 08 14:24:16 2009] [error] [client 192.168.1.5] Directory: None
[Mon Jun 08 14:24:16 2009] [error] [client 192.168.1.5] Filename: '/Users/grahamd/Sites/echo.wsgi'
[Mon Jun 08 14:24:16 2009] [error] [client 192.168.1.5] PathInfo: ''
[Mon Jun 08 14:24:16 2009] [error] [client 192.168.1.5] Traceback (most recent call last):
[Mon Jun 08 14:24:16 2009] [error] [client 192.168.1.5]   File "/Library/Python/2.5/site-packages/mod_python/importer.py", line 1386, in FilterDispatch\n    arg=filter, silent=0)
[Mon Jun 08 14:24:16 2009] [error] [client 192.168.1.5]   File "/Library/Python/2.5/site-packages/mod_python/importer.py", line 1229, in _process_target\n    result = _execute_target(config, req, object, arg)
[Mon Jun 08 14:24:16 2009] [error] [client 192.168.1.5]   File "/Library/Python/2.5/site-packages/mod_python/importer.py", line 1128, in _execute_target\n    result = object(arg)
[Mon Jun 08 14:24:16 2009] [error] [client 192.168.1.5]   File "/Users/grahamd/Sites/inputfilter.mpy", line 8, in inputfilter\n    s = filter.read(4)
[Mon Jun 08 14:24:16 2009] [error] [client 192.168.1.5] IOError: Input filter read error
[Mon Jun 08 14:24:16 2009] [info] [client 192.168.1.5] (32)Broken pipe: core_output_filter: writing data to the network

So, killing the client jolts it out of what ever state it was in causing empty string to be read and drop out of input filter. The input filter is then called again and it keeps reading data until it gets to the end and closes input filter.

After that, the input filter is called two more times, one causing another close and the second causing an exception as client connection had then been detected as shutdown.

Something really weird happening here. But then Apache input filters always been a bit dodgy given that Tramline didn't always work properly with them.

> PythonInputFilter doesn't appear to work for chunked request content.
> ---------------------------------------------------------------------
>
>                 Key: MODPYTHON-255
>                 URL: https://issues.apache.org/jira/browse/MODPYTHON-255
>             Project: mod_python
>          Issue Type: Bug
>          Components: core
>    Affects Versions: 3.3.1
>            Reporter: Graham Dumpleton
>
> If PythonInputFilter is used to create an input filter, but content handler isn't actually mod_python but another module which can handle chunked request content, and a request is sent with chunked request content, then things just don't seem to work as one would expect.
> For example, if use:
> $ curl -d "abcdefghijklmnopqrstuvwxyz" http://home.dscpl.com.au/~grahamd/echo.wsgi --header "Transfer-Encoding: chunked"
> Where the .wsgi script is for mod_wsgi and is:
> import StringIO
> def application(environ, start_response):
>     headers = []
>     headers.append(('Content-type', 'text/plain'))
>     start_response('200 OK', headers)
>     input = environ['wsgi.input']
>     output = StringIO.StringIO()
>     keys = environ.keys()
>     keys.sort()
>     for key in keys:
>         print >> output, '%s: %s' % (key, repr(environ[key]))
>     print >> output
>     length = int(environ.get('CONTENT_LENGTH', '0'))
>     #output.write(input.read(length))
>     output.write(input.read())
>     return [output.getvalue()]
> and the input filter itself is:
> from mod_python import apache
> def inputfilter(filter):
>     filter.req.log_error("inputfilter")
>     filter.req.log_error("inputfilter read()")
>     s = filter.read()
>     filter.req.log_error("inputfilter : %s" % repr(s))
>     while s:
>         filter.req.log_error("inputfilter write()")
>         filter.write(s)
>         filter.req.log_error("inputfilter read()")
>         s = filter.read()
>         filter.req.log_error("inputfilter : %s" % repr(s))
>     if s is None:
>         filter.req.log_error("inputfilter close()")
>         filter.close()
>         filter.req.log_error("inputfilter exit()")
> The curl just hangs and logged output is:
> [Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter
> [Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter read()
> [Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter : 'abcdefghijklmnopqrstuvwxyz'
> [Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter write()
> [Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter read()
> [Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter
> [Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter read()
> [Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter : '\\r\\n'
> [Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter write()
> [Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter read()
> First off, a '\r\n' is coming from somewhere when it should and then it just blocks on read().
> Whatever sentinel is used in input stream to indicate end of chunked request content, it isn't being recognised by mod_python. 

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Commented: (MODPYTHON-255) PythonInputFilter doesn't appear to work for chunked request content.

Posted by "William A. Rowe, Jr. (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/MODPYTHON-255?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12717141#action_12717141 ] 

William A. Rowe, Jr. commented on MODPYTHON-255:
------------------------------------------------

I would suggest this is not-a-bug since CGI applications are not expected to decode chunking, in any form.

But I'd agree it's worth considering if the HTTP input filter should be leaving the chunked T-E value in the
headers, as they are perceived by mod_python (or any other cgi mechanism).

This isn't a mod_python bug in any case.  I'd suggest you propose to modify the behavior of the chunked
input handler in httpd to strip that (admittedly misleading) header token.

> PythonInputFilter doesn't appear to work for chunked request content.
> ---------------------------------------------------------------------
>
>                 Key: MODPYTHON-255
>                 URL: https://issues.apache.org/jira/browse/MODPYTHON-255
>             Project: mod_python
>          Issue Type: Bug
>          Components: core
>    Affects Versions: 3.3.1
>            Reporter: Graham Dumpleton
>
> If PythonInputFilter is used to create an input filter, but content handler isn't actually mod_python but another module which can handle chunked request content, and a request is sent with chunked request content, then things just don't seem to work as one would expect.
> For example, if use:
> $ curl -d "abcdefghijklmnopqrstuvwxyz" http://home.dscpl.com.au/~grahamd/echo.wsgi --header "Transfer-Encoding: chunked"
> Where the .wsgi script is for mod_wsgi and is:
> import StringIO
> def application(environ, start_response):
>     headers = []
>     headers.append(('Content-type', 'text/plain'))
>     start_response('200 OK', headers)
>     input = environ['wsgi.input']
>     output = StringIO.StringIO()
>     keys = environ.keys()
>     keys.sort()
>     for key in keys:
>         print >> output, '%s: %s' % (key, repr(environ[key]))
>     print >> output
>     length = int(environ.get('CONTENT_LENGTH', '0'))
>     #output.write(input.read(length))
>     output.write(input.read())
>     return [output.getvalue()]
> and the input filter itself is:
> from mod_python import apache
> def inputfilter(filter):
>     filter.req.log_error("inputfilter")
>     filter.req.log_error("inputfilter read()")
>     s = filter.read()
>     filter.req.log_error("inputfilter : %s" % repr(s))
>     while s:
>         filter.req.log_error("inputfilter write()")
>         filter.write(s)
>         filter.req.log_error("inputfilter read()")
>         s = filter.read()
>         filter.req.log_error("inputfilter : %s" % repr(s))
>     if s is None:
>         filter.req.log_error("inputfilter close()")
>         filter.close()
>         filter.req.log_error("inputfilter exit()")
> The curl just hangs and logged output is:
> [Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter
> [Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter read()
> [Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter : 'abcdefghijklmnopqrstuvwxyz'
> [Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter write()
> [Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter read()
> [Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter
> [Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter read()
> [Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter : '\\r\\n'
> [Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter write()
> [Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter read()
> First off, a '\r\n' is coming from somewhere when it should and then it just blocks on read().
> Whatever sentinel is used in input stream to indicate end of chunked request content, it isn't being recognised by mod_python. 

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Commented: (MODPYTHON-255) PythonInputFilter doesn't appear to work for chunked request content.

Posted by "Graham Dumpleton (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/MODPYTHON-255?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12717144#action_12717144 ] 

Graham Dumpleton commented on MODPYTHON-255:
--------------------------------------------

Hmmm, even with non chunked request content, input filter is called into multiple times for same request.

[Mon Jun 08 14:30:27 2009] [error] [client 192.168.1.5] inputfilter
[Mon Jun 08 14:30:27 2009] [error] [client 192.168.1.5] inputfilter read()
[Mon Jun 08 14:30:27 2009] [error] [client 192.168.1.5] inputfilter : 'abcd'
[Mon Jun 08 14:30:27 2009] [error] [client 192.168.1.5] inputfilter write()
[Mon Jun 08 14:30:27 2009] [error] [client 192.168.1.5] inputfilter read()
[Mon Jun 08 14:30:27 2009] [error] [client 192.168.1.5] inputfilter : 'efgh'
[Mon Jun 08 14:30:27 2009] [error] [client 192.168.1.5] inputfilter write()
[Mon Jun 08 14:30:27 2009] [error] [client 192.168.1.5] inputfilter read()
[Mon Jun 08 14:30:27 2009] [error] [client 192.168.1.5] inputfilter : 'ijkl'
[Mon Jun 08 14:30:27 2009] [error] [client 192.168.1.5] inputfilter write()
[Mon Jun 08 14:30:27 2009] [error] [client 192.168.1.5] inputfilter read()
[Mon Jun 08 14:30:27 2009] [error] [client 192.168.1.5] inputfilter : 'mnop'
[Mon Jun 08 14:30:27 2009] [error] [client 192.168.1.5] inputfilter write()
[Mon Jun 08 14:30:27 2009] [error] [client 192.168.1.5] inputfilter read()
[Mon Jun 08 14:30:27 2009] [error] [client 192.168.1.5] inputfilter : 'qrst'
[Mon Jun 08 14:30:27 2009] [error] [client 192.168.1.5] inputfilter write()
[Mon Jun 08 14:30:27 2009] [error] [client 192.168.1.5] inputfilter read()
[Mon Jun 08 14:30:27 2009] [error] [client 192.168.1.5] inputfilter : 'uvwx'
[Mon Jun 08 14:30:27 2009] [error] [client 192.168.1.5] inputfilter write()
[Mon Jun 08 14:30:27 2009] [error] [client 192.168.1.5] inputfilter read()
[Mon Jun 08 14:30:27 2009] [error] [client 192.168.1.5] inputfilter : 'yz'
[Mon Jun 08 14:30:27 2009] [error] [client 192.168.1.5] inputfilter write()
[Mon Jun 08 14:30:27 2009] [error] [client 192.168.1.5] inputfilter read()
[Mon Jun 08 14:30:27 2009] [error] [client 192.168.1.5] inputfilter : None
[Mon Jun 08 14:30:27 2009] [error] [client 192.168.1.5] inputfilter close()
[Mon Jun 08 14:30:27 2009] [error] [client 192.168.1.5] inputfilter exit()
[Mon Jun 08 14:30:27 2009] [error] [client 192.168.1.5] inputfilter
[Mon Jun 08 14:30:27 2009] [error] [client 192.168.1.5] inputfilter read()
[Mon Jun 08 14:30:27 2009] [error] [client 192.168.1.5] inputfilter : None
[Mon Jun 08 14:30:27 2009] [error] [client 192.168.1.5] inputfilter close()
[Mon Jun 08 14:30:27 2009] [error] [client 192.168.1.5] inputfilter exit()
[Mon Jun 08 14:30:27 2009] [error] [client 192.168.1.5] inputfilter
[Mon Jun 08 14:30:27 2009] [error] [client 192.168.1.5] inputfilter read()
[Mon Jun 08 14:30:27 2009] [error] [client 192.168.1.5] inputfilter : ''

Time to check whether mod_wsgi doing the correct thing. :-)

> PythonInputFilter doesn't appear to work for chunked request content.
> ---------------------------------------------------------------------
>
>                 Key: MODPYTHON-255
>                 URL: https://issues.apache.org/jira/browse/MODPYTHON-255
>             Project: mod_python
>          Issue Type: Bug
>          Components: core
>    Affects Versions: 3.3.1
>            Reporter: Graham Dumpleton
>
> If PythonInputFilter is used to create an input filter, but content handler isn't actually mod_python but another module which can handle chunked request content, and a request is sent with chunked request content, then things just don't seem to work as one would expect.
> For example, if use:
> $ curl -d "abcdefghijklmnopqrstuvwxyz" http://home.dscpl.com.au/~grahamd/echo.wsgi --header "Transfer-Encoding: chunked"
> Where the .wsgi script is for mod_wsgi and is:
> import StringIO
> def application(environ, start_response):
>     headers = []
>     headers.append(('Content-type', 'text/plain'))
>     start_response('200 OK', headers)
>     input = environ['wsgi.input']
>     output = StringIO.StringIO()
>     keys = environ.keys()
>     keys.sort()
>     for key in keys:
>         print >> output, '%s: %s' % (key, repr(environ[key]))
>     print >> output
>     length = int(environ.get('CONTENT_LENGTH', '0'))
>     #output.write(input.read(length))
>     output.write(input.read())
>     return [output.getvalue()]
> and the input filter itself is:
> from mod_python import apache
> def inputfilter(filter):
>     filter.req.log_error("inputfilter")
>     filter.req.log_error("inputfilter read()")
>     s = filter.read()
>     filter.req.log_error("inputfilter : %s" % repr(s))
>     while s:
>         filter.req.log_error("inputfilter write()")
>         filter.write(s)
>         filter.req.log_error("inputfilter read()")
>         s = filter.read()
>         filter.req.log_error("inputfilter : %s" % repr(s))
>     if s is None:
>         filter.req.log_error("inputfilter close()")
>         filter.close()
>         filter.req.log_error("inputfilter exit()")
> The curl just hangs and logged output is:
> [Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter
> [Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter read()
> [Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter : 'abcdefghijklmnopqrstuvwxyz'
> [Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter write()
> [Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter read()
> [Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter
> [Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter read()
> [Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter : '\\r\\n'
> [Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter write()
> [Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter read()
> First off, a '\r\n' is coming from somewhere when it should and then it just blocks on read().
> Whatever sentinel is used in input stream to indicate end of chunked request content, it isn't being recognised by mod_python. 

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Commented: (MODPYTHON-255) PythonInputFilter doesn't appear to work for chunked request content.

Posted by "Graham Dumpleton (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/MODPYTHON-255?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12717145#action_12717145 ] 

Graham Dumpleton commented on MODPYTHON-255:
--------------------------------------------

Also blows up in odd ways when using daemon mode of mod_wsgi and in that case the way that mod_wsgi interacts with input filter chain is pretty well the same as mod_cgi and mod_cgid.

[Mon Jun 08 14:32:28 2009] [error] [client 192.168.1.5] inputfilter
[Mon Jun 08 14:32:28 2009] [error] [client 192.168.1.5] inputfilter read()
[Mon Jun 08 14:32:28 2009] [error] [client 192.168.1.5] inputfilter : 'abcd'
[Mon Jun 08 14:32:28 2009] [error] [client 192.168.1.5] inputfilter write()
[Mon Jun 08 14:32:28 2009] [error] [client 192.168.1.5] inputfilter read()
[Mon Jun 08 14:32:28 2009] [error] [client 192.168.1.5] inputfilter : 'efgh'
[Mon Jun 08 14:32:28 2009] [error] [client 192.168.1.5] inputfilter write()
[Mon Jun 08 14:32:28 2009] [error] [client 192.168.1.5] inputfilter read()
[Mon Jun 08 14:32:28 2009] [error] [client 192.168.1.5] inputfilter : 'ijkl'
[Mon Jun 08 14:32:28 2009] [error] [client 192.168.1.5] inputfilter write()
[Mon Jun 08 14:32:28 2009] [error] [client 192.168.1.5] inputfilter read()
[Mon Jun 08 14:32:28 2009] [error] [client 192.168.1.5] inputfilter : 'mnop'
[Mon Jun 08 14:32:28 2009] [error] [client 192.168.1.5] inputfilter write()
[Mon Jun 08 14:32:28 2009] [error] [client 192.168.1.5] inputfilter read()
[Mon Jun 08 14:32:28 2009] [error] [client 192.168.1.5] inputfilter : 'qrst'
[Mon Jun 08 14:32:28 2009] [error] [client 192.168.1.5] inputfilter write()
[Mon Jun 08 14:32:28 2009] [error] [client 192.168.1.5] inputfilter read()
[Mon Jun 08 14:32:28 2009] [error] [client 192.168.1.5] inputfilter : 'uvwx'
[Mon Jun 08 14:32:28 2009] [error] [client 192.168.1.5] inputfilter write()
[Mon Jun 08 14:32:28 2009] [error] [client 192.168.1.5] inputfilter read()
[Mon Jun 08 14:32:28 2009] [error] [client 192.168.1.5] inputfilter : 'yz'
[Mon Jun 08 14:32:28 2009] [error] [client 192.168.1.5] inputfilter write()
[Mon Jun 08 14:32:28 2009] [error] [client 192.168.1.5] inputfilter read()
[Mon Jun 08 14:32:28 2009] [error] [client 192.168.1.5] inputfilter : None
[Mon Jun 08 14:32:28 2009] [error] [client 192.168.1.5] inputfilter close()
[Mon Jun 08 14:32:28 2009] [error] [client 192.168.1.5] inputfilter exit()
[Mon Jun 08 14:32:28 2009] [error] [client 192.168.1.5] inputfilter
[Mon Jun 08 14:32:28 2009] [error] [client 192.168.1.5] inputfilter read()
[Mon Jun 08 14:32:28 2009] [error] [client 192.168.1.5] inputfilter : None
[Mon Jun 08 14:32:28 2009] [error] [client 192.168.1.5] inputfilter close()
[Mon Jun 08 14:32:28 2009] [error] [client 192.168.1.5] inputfilter exit()
[Mon Jun 08 14:32:28 2009] [error] [client 192.168.1.5] inputfilter
[Mon Jun 08 14:32:28 2009] [error] [client 192.168.1.5] inputfilter read()
[Mon Jun 08 14:32:28 2009] [error] [client 192.168.1.5] mod_python (pid=50046, interpreter='home.dscpl.com.au', phase='Filter: myfilter', handler='/Users/grahamd/Sites/inputfilter.mpy'): Application error
[Mon Jun 08 14:32:28 2009] [error] [client 192.168.1.5] ServerName: 'home.dscpl.com.au'
[Mon Jun 08 14:32:28 2009] [error] [client 192.168.1.5] DocumentRoot: '/Library/WebServer/Documents'
[Mon Jun 08 14:32:28 2009] [error] [client 192.168.1.5] URI: '/~grahamd/echo.wsgi'
[Mon Jun 08 14:32:28 2009] [error] [client 192.168.1.5] Location: None
[Mon Jun 08 14:32:28 2009] [error] [client 192.168.1.5] Directory: None
[Mon Jun 08 14:32:28 2009] [error] [client 192.168.1.5] Filename: '/Users/grahamd/Sites/echo.wsgi'
[Mon Jun 08 14:32:28 2009] [error] [client 192.168.1.5] PathInfo: ''
[Mon Jun 08 14:32:28 2009] [error] [client 192.168.1.5] Traceback (most recent call last):
[Mon Jun 08 14:32:28 2009] [error] [client 192.168.1.5]   File "/Library/Python/2.5/site-packages/mod_python/importer.py", line 1386, in FilterDispatch\n    arg=filter, silent=0)
[Mon Jun 08 14:32:28 2009] [error] [client 192.168.1.5]   File "/Library/Python/2.5/site-packages/mod_python/importer.py", line 1229, in _process_target\n    result = _execute_target(config, req, object, arg)
[Mon Jun 08 14:32:28 2009] [error] [client 192.168.1.5]   File "/Library/Python/2.5/site-packages/mod_python/importer.py", line 1128, in _execute_target\n    result = object(arg)
[Mon Jun 08 14:32:28 2009] [error] [client 192.168.1.5]   File "/Users/grahamd/Sites/inputfilter.mpy", line 8, in inputfilter\n    s = filter.read(4)
[Mon Jun 08 14:32:28 2009] [error] [client 192.168.1.5] IOError: Input filter read error



> PythonInputFilter doesn't appear to work for chunked request content.
> ---------------------------------------------------------------------
>
>                 Key: MODPYTHON-255
>                 URL: https://issues.apache.org/jira/browse/MODPYTHON-255
>             Project: mod_python
>          Issue Type: Bug
>          Components: core
>    Affects Versions: 3.3.1
>            Reporter: Graham Dumpleton
>
> If PythonInputFilter is used to create an input filter, but content handler isn't actually mod_python but another module which can handle chunked request content, and a request is sent with chunked request content, then things just don't seem to work as one would expect.
> For example, if use:
> $ curl -d "abcdefghijklmnopqrstuvwxyz" http://home.dscpl.com.au/~grahamd/echo.wsgi --header "Transfer-Encoding: chunked"
> Where the .wsgi script is for mod_wsgi and is:
> import StringIO
> def application(environ, start_response):
>     headers = []
>     headers.append(('Content-type', 'text/plain'))
>     start_response('200 OK', headers)
>     input = environ['wsgi.input']
>     output = StringIO.StringIO()
>     keys = environ.keys()
>     keys.sort()
>     for key in keys:
>         print >> output, '%s: %s' % (key, repr(environ[key]))
>     print >> output
>     length = int(environ.get('CONTENT_LENGTH', '0'))
>     #output.write(input.read(length))
>     output.write(input.read())
>     return [output.getvalue()]
> and the input filter itself is:
> from mod_python import apache
> def inputfilter(filter):
>     filter.req.log_error("inputfilter")
>     filter.req.log_error("inputfilter read()")
>     s = filter.read()
>     filter.req.log_error("inputfilter : %s" % repr(s))
>     while s:
>         filter.req.log_error("inputfilter write()")
>         filter.write(s)
>         filter.req.log_error("inputfilter read()")
>         s = filter.read()
>         filter.req.log_error("inputfilter : %s" % repr(s))
>     if s is None:
>         filter.req.log_error("inputfilter close()")
>         filter.close()
>         filter.req.log_error("inputfilter exit()")
> The curl just hangs and logged output is:
> [Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter
> [Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter read()
> [Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter : 'abcdefghijklmnopqrstuvwxyz'
> [Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter write()
> [Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter read()
> [Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter
> [Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter read()
> [Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter : '\\r\\n'
> [Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter write()
> [Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter read()
> First off, a '\r\n' is coming from somewhere when it should and then it just blocks on read().
> Whatever sentinel is used in input stream to indicate end of chunked request content, it isn't being recognised by mod_python. 

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Updated: (MODPYTHON-255) PythonInputFilter doesn't appear to work for chunked request content.

Posted by "Graham Dumpleton (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/MODPYTHON-255?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Graham Dumpleton updated MODPYTHON-255:
---------------------------------------

    Description: 
If PythonInputFilter is used to create an input filter, but content handler isn't actually mod_python but another module which can handle chunked request content, and a request is sent with chunked request content, then things just don't seem to work as one would expect.

For example, if use:

$ curl -d "abcdefghijklmnopqrstuvwxyz" http://home.dscpl.com.au/~grahamd/echo.wsgi --header "Transfer-Encoding: chunked"

Where the .wsgi script is for mod_wsgi and is:

import StringIO

def application(environ, start_response):
    headers = []
    headers.append(('Content-type', 'text/plain'))

    start_response('200 OK', headers)

    input = environ['wsgi.input']
    output = StringIO.StringIO()

    keys = environ.keys()
    keys.sort()
    for key in keys:
        print >> output, '%s: %s' % (key, repr(environ[key]))
    print >> output

    length = int(environ.get('CONTENT_LENGTH', '0'))
    #output.write(input.read(length))
    output.write(input.read())

    return [output.getvalue()]

and the input filter itself is:

from mod_python import apache

def inputfilter(filter):

    filter.req.log_error("inputfilter")

    filter.req.log_error("inputfilter read()")
    s = filter.read()
    filter.req.log_error("inputfilter : %s" % repr(s))
    while s:
        filter.req.log_error("inputfilter write()")
        filter.write(s)
        filter.req.log_error("inputfilter read()")
        s = filter.read()
        filter.req.log_error("inputfilter : %s" % repr(s))

    if s is None:
        filter.req.log_error("inputfilter close()")
        filter.close()
        filter.req.log_error("inputfilter exit()")

The curl just hangs and logged output is:

[Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter
[Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter read()
[Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter : 'abcdefghijklmnopqrstuvwxyz'
[Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter write()
[Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter read()
[Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter
[Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter read()
[Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter : '\\r\\n'
[Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter write()
[Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter read()

First off, a '\r\n' is coming from somewhere when it shouldn't and then it just blocks on read().

Whatever sentinel is used in input stream to indicate end of chunked request content, it isn't being recognised by mod_python. 

  was:
If PythonInputFilter is used to create an input filter, but content handler isn't actually mod_python but another module which can handle chunked request content, and a request is sent with chunked request content, then things just don't seem to work as one would expect.

For example, if use:

$ curl -d "abcdefghijklmnopqrstuvwxyz" http://home.dscpl.com.au/~grahamd/echo.wsgi --header "Transfer-Encoding: chunked"

Where the .wsgi script is for mod_wsgi and is:

import StringIO

def application(environ, start_response):
    headers = []
    headers.append(('Content-type', 'text/plain'))

    start_response('200 OK', headers)

    input = environ['wsgi.input']
    output = StringIO.StringIO()

    keys = environ.keys()
    keys.sort()
    for key in keys:
        print >> output, '%s: %s' % (key, repr(environ[key]))
    print >> output

    length = int(environ.get('CONTENT_LENGTH', '0'))
    #output.write(input.read(length))
    output.write(input.read())

    return [output.getvalue()]

and the input filter itself is:

from mod_python import apache

def inputfilter(filter):

    filter.req.log_error("inputfilter")

    filter.req.log_error("inputfilter read()")
    s = filter.read()
    filter.req.log_error("inputfilter : %s" % repr(s))
    while s:
        filter.req.log_error("inputfilter write()")
        filter.write(s)
        filter.req.log_error("inputfilter read()")
        s = filter.read()
        filter.req.log_error("inputfilter : %s" % repr(s))

    if s is None:
        filter.req.log_error("inputfilter close()")
        filter.close()
        filter.req.log_error("inputfilter exit()")

The curl just hangs and logged output is:

[Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter
[Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter read()
[Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter : 'abcdefghijklmnopqrstuvwxyz'
[Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter write()
[Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter read()
[Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter
[Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter read()
[Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter : '\\r\\n'
[Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter write()
[Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter read()

First off, a '\r\n' is coming from somewhere when it should and then it just blocks on read().

Whatever sentinel is used in input stream to indicate end of chunked request content, it isn't being recognised by mod_python. 


> PythonInputFilter doesn't appear to work for chunked request content.
> ---------------------------------------------------------------------
>
>                 Key: MODPYTHON-255
>                 URL: https://issues.apache.org/jira/browse/MODPYTHON-255
>             Project: mod_python
>          Issue Type: Bug
>          Components: core
>    Affects Versions: 3.3.1
>            Reporter: Graham Dumpleton
>
> If PythonInputFilter is used to create an input filter, but content handler isn't actually mod_python but another module which can handle chunked request content, and a request is sent with chunked request content, then things just don't seem to work as one would expect.
> For example, if use:
> $ curl -d "abcdefghijklmnopqrstuvwxyz" http://home.dscpl.com.au/~grahamd/echo.wsgi --header "Transfer-Encoding: chunked"
> Where the .wsgi script is for mod_wsgi and is:
> import StringIO
> def application(environ, start_response):
>     headers = []
>     headers.append(('Content-type', 'text/plain'))
>     start_response('200 OK', headers)
>     input = environ['wsgi.input']
>     output = StringIO.StringIO()
>     keys = environ.keys()
>     keys.sort()
>     for key in keys:
>         print >> output, '%s: %s' % (key, repr(environ[key]))
>     print >> output
>     length = int(environ.get('CONTENT_LENGTH', '0'))
>     #output.write(input.read(length))
>     output.write(input.read())
>     return [output.getvalue()]
> and the input filter itself is:
> from mod_python import apache
> def inputfilter(filter):
>     filter.req.log_error("inputfilter")
>     filter.req.log_error("inputfilter read()")
>     s = filter.read()
>     filter.req.log_error("inputfilter : %s" % repr(s))
>     while s:
>         filter.req.log_error("inputfilter write()")
>         filter.write(s)
>         filter.req.log_error("inputfilter read()")
>         s = filter.read()
>         filter.req.log_error("inputfilter : %s" % repr(s))
>     if s is None:
>         filter.req.log_error("inputfilter close()")
>         filter.close()
>         filter.req.log_error("inputfilter exit()")
> The curl just hangs and logged output is:
> [Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter
> [Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter read()
> [Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter : 'abcdefghijklmnopqrstuvwxyz'
> [Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter write()
> [Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter read()
> [Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter
> [Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter read()
> [Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter : '\\r\\n'
> [Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter write()
> [Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter read()
> First off, a '\r\n' is coming from somewhere when it shouldn't and then it just blocks on read().
> Whatever sentinel is used in input stream to indicate end of chunked request content, it isn't being recognised by mod_python. 

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Commented: (MODPYTHON-255) PythonInputFilter doesn't appear to work for chunked request content.

Posted by "Graham Dumpleton (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/MODPYTHON-255?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12717152#action_12717152 ] 

Graham Dumpleton commented on MODPYTHON-255:
--------------------------------------------

William.

The content handler in this case isn't CGI it is a mod_wsgi application. Either way, it is assumed that request content has already been dechunked and application doesn't have to worry about it.

Now, although WSGI derives from CGI and for conforming WSGI application, like CGI, can't handle chunked request content due to being required to not read more than CONTENT_LENGTH bytes of request content, with CONTENT_LENGTH being taken to be 0 if not supplied, in mod_wsgi you can step outside of the bounds if you want to and keep reading until content is exhausted. This is intentionally allowed so can handle mutating input filters which change content length but cant update Content-Length header, and also to handle chunked request content where there is no Content-Length header.

So, the application in this case was quite able to handle chunked request content, at least for case where it was dechunked by HTTP_IN input filter for it already. In this case, only stumbled across this issue with mod_python input filter as was using it to implement a mutating input filter that changes length of content and so test that ability of mod_wsgi for both non chunked and chunked requests.

As to removal of chunked T-E value, can only presume you mean to delete the Transfer-Encoding request header. For me though that might just make things harder. The presence of that header is at the moment the only way to determine that non presence of Content-Length header can be ignored and that content length is not in fact 0. Although, I guess I can just check for r->read_chunked instead. Because though my reason for checking that is to do something different in a process to which data is being proxied by custom protocol, if Transfer-Encoding were to be deleted, then I would need to pass across separate flag to indicate this scenario.

Anyway, still think something is not right in all of this. Since wouldn't expect a problem with HTTP_IN input filter. More likely to think it is mod_python input filter implementation at this point, especially since it hasn't always worked for people properly before.


> PythonInputFilter doesn't appear to work for chunked request content.
> ---------------------------------------------------------------------
>
>                 Key: MODPYTHON-255
>                 URL: https://issues.apache.org/jira/browse/MODPYTHON-255
>             Project: mod_python
>          Issue Type: Bug
>          Components: core
>    Affects Versions: 3.3.1
>            Reporter: Graham Dumpleton
>
> If PythonInputFilter is used to create an input filter, but content handler isn't actually mod_python but another module which can handle chunked request content, and a request is sent with chunked request content, then things just don't seem to work as one would expect.
> For example, if use:
> $ curl -d "abcdefghijklmnopqrstuvwxyz" http://home.dscpl.com.au/~grahamd/echo.wsgi --header "Transfer-Encoding: chunked"
> Where the .wsgi script is for mod_wsgi and is:
> import StringIO
> def application(environ, start_response):
>     headers = []
>     headers.append(('Content-type', 'text/plain'))
>     start_response('200 OK', headers)
>     input = environ['wsgi.input']
>     output = StringIO.StringIO()
>     keys = environ.keys()
>     keys.sort()
>     for key in keys:
>         print >> output, '%s: %s' % (key, repr(environ[key]))
>     print >> output
>     length = int(environ.get('CONTENT_LENGTH', '0'))
>     #output.write(input.read(length))
>     output.write(input.read())
>     return [output.getvalue()]
> and the input filter itself is:
> from mod_python import apache
> def inputfilter(filter):
>     filter.req.log_error("inputfilter")
>     filter.req.log_error("inputfilter read()")
>     s = filter.read()
>     filter.req.log_error("inputfilter : %s" % repr(s))
>     while s:
>         filter.req.log_error("inputfilter write()")
>         filter.write(s)
>         filter.req.log_error("inputfilter read()")
>         s = filter.read()
>         filter.req.log_error("inputfilter : %s" % repr(s))
>     if s is None:
>         filter.req.log_error("inputfilter close()")
>         filter.close()
>         filter.req.log_error("inputfilter exit()")
> The curl just hangs and logged output is:
> [Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter
> [Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter read()
> [Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter : 'abcdefghijklmnopqrstuvwxyz'
> [Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter write()
> [Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter read()
> [Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter
> [Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter read()
> [Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter : '\\r\\n'
> [Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter write()
> [Mon Jun 08 14:10:37 2009] [error] [client 192.168.1.5] inputfilter read()
> First off, a '\r\n' is coming from somewhere when it shouldn't and then it just blocks on read().
> Whatever sentinel is used in input stream to indicate end of chunked request content, it isn't being recognised by mod_python. 

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.