quetz-mod_python-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Graham Dumpleton (JIRA)" <j...@apache.org>
Subject [jira] Commented: (MODPYTHON-255) PythonInputFilter doesn't appear to work for chunked request content.
Date Mon, 08 Jun 2009 04:32:18 GMT

    [ 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.


Mime
View raw message