[mod_python] ValueError with Flash 8 FileReference.upload(url)

Graham Dumpleton grahamd at dscpl.com.au
Wed Apr 5 07:32:50 EDT 2006


On 05/04/2006, at 9:28 PM, Harold J. Ship wrote:

> Ok, here's the output.
>
> ------------KM7GI3gL6cH2gL6gL6cH2gL6cH2KM7
>
> Content-Disposition: form-data; name="Filename"
>
>
>
> sample.txt
>
> ------------KM7GI3gL6cH2gL6gL6cH2gL6cH2KM7
>
> Content-Disposition: form-data; name="Filedata"; filename="sample.txt"
>
> Content-Type: application/octet-stream
>
>
>
> Start of Sample Text File Contents
>
> End of Sample Text File Contents
>
>
>
> ------------KM7GI3gL6cH2gL6gL6cH2gL6cH2KM7
>
> Content-Disposition: form-data; name="Upload"
>
> Submit Query
>
> ------------KM7GI3gL6cH2gL6gL6cH2gL6cH2KM7

I'm not an expert on FieldStorage as I stayed out of all the  
discussions on
it when it was being improved. I am also not up on what the content type
application/x-www-form-urlencoded is all about. All the same, I'll share
what I found so far in case it helps someone else.

First off, I don't get an error, but I don't believe I get correct  
results either.
To test, what I did was create a handler containing:

from mod_python import apache, util

def handler(req):

     apache.log_error('headers_in=%s'%req.headers_in)

     req.content_type = 'text/plain'

     form = util.FieldStorage(req)

     for field in form.list:
         apache.log_error('name=%s' % `field.name`)
         apache.log_error('value=%s' % `field.value`)

     req.write('done')

     return apache.OK


I then used "ab" to post your file to a URL mapping to that handler.

   ab -p post.dat -T 'multipart/form-data; boundary=---------- 
KM7GI3gL6cH2gL6gL6cH2gL6cH2KM7^M' http://localhost:8082/testing/ 
upload-1/dummy

Note that that is actually a real \r (CR) where ^M is shown in the  
boundary.
Without that it wouldn't work. I am not sure though whether that is  
simply due
to CR LF weirdness in way file was created and then how it is being  
interpreted
by "ab" on Mac OS X when given to it as input.

Anyway, result of that is:

[Wed Apr 05 21:26:24 2006] [error] headers_in={'Content-type':  
'multipart/form-data; boundary=---------- 
KM7GI3gL6cH2gL6gL6cH2gL6cH2KM7\r', 'Content-length': '498', 'Accept':  
'*/*', 'Host': 'localhost:8082', 'User-Agent': 'ApacheBench/1.3d'}
[Wed Apr 05 21:26:24 2006] [error] [client 127.0.0.1] PythonHandler  
upload: Traceback (most recent call last):
[Wed Apr 05 21:26:24 2006] [error] [client 127.0.0.1] PythonHandler  
upload:   File "/System/Library/Frameworks/Python.framework/Versions/ 
2.3/lib/python2.3/site-packages/mod_python/apache.py", line 308, in  
HandlerDispatch\n    result = object(req)
[Wed Apr 05 21:26:24 2006] [error] [client 127.0.0.1] PythonHandler  
upload:   File "/Users/grahamd/Workspaces/testing/upload-1/ 
upload.py", line 9, in handler\n    form = util.FieldStorage(req)
[Wed Apr 05 21:26:24 2006] [error] [client 127.0.0.1] PythonHandler  
upload:   File "/System/Library/Frameworks/Python.framework/Versions/ 
2.3/lib/python2.3/site-packages/mod_python/util.py", line 180, in  
__init__\n    h, v = line.split(":", 1)
[Wed Apr 05 21:26:24 2006] [error] [client 127.0.0.1] PythonHandler  
upload: ValueError: unpack list of wrong size

Thus, have duplicated it.

Note that this may possibly be something to do with strangeness in  
line endings.
First their was the issue above with CR, but there are other nasties  
in input with
CR LF. See following "od" dump.

0000000    -   -   -   -   -   -   -   -   -   -   -   -   K   M   7   G
0000020    I   3   g   L   6   c   H   2   g   L   6   g   L   6   c   H
0000040    2   g   L   6   c   H   2   K   M   7  \r  \r  \n   C   o   n
0000060    t   e   n   t   -   D   i   s   p   o   s   i   t   i   o   n
0000100    :       f   o   r   m   -   d   a   t   a   ;       n   a   m
0000120    e   =   "   F   i   l   e   n   a   m   e   "  \r  \r  \n  \r
0000140   \r  \n   s   a   m   p   l   e   .   t   x   t  \r  \r  \n   -
0000160    -   -   -   -   -   -   -   -   -   -   -   K   M   7   G   I
0000200    3   g   L   6   c   H   2   g   L   6   g   L   6   c   H   2
0000220    g   L   6   c   H   2   K   M   7  \r  \r  \n   C   o   n   t
0000240    e   n   t   -   D   i   s   p   o   s   i   t   i   o   n   :
0000260        f   o   r   m   -   d   a   t   a   ;       n   a   m   e
0000300    =   "   F   i   l   e   d   a   t   a   "   ;       f   i   l
0000320    e   n   a   m   e   =   "   s   a   m   p   l   e   .   t   x
0000340    t   "  \r  \r  \n   C   o   n   t   e   n   t   -   T   y   p
0000360    e   :       a   p   p   l   i   c   a   t   i   o   n   /   o
0000400    c   t   e   t   -   s   t   r   e   a   m  \r  \r  \n  \r  \r
0000420   \n   S   t   a   r   t       o   f       S   a   m   p   l   e
0000440        T   e   x   t       F   i   l   e       C   o   n   t   e
0000460    n   t   s  \r  \r  \n   E   n   d       o   f       S   a   m
0000500    p   l   e       T   e   x   t       F   i   l   e       C   o
0000520    n   t   e   n   t   s  \r  \r  \n  \r  \r  \n   -   -   -   -
0000540    -   -   -   -   -   -   -   -   K   M   7   G   I   3   g   L
0000560    6   c   H   2   g   L   6   g   L   6   c   H   2   g   L   6
0000600    c   H   2   K   M   7  \r  \r  \n   C   o   n   t   e   n   t
0000620    -   D   i   s   p   o   s   i   t   i   o   n   :       f   o
0000640    r   m   -   d   a   t   a   ;       n   a   m   e   =   "   U
0000660    p   l   o   a   d   "  \r  \r  \n   S   u   b   m   i   t
0000700    Q   u   e   r   y  \r  \r  \n   -   -   -   -   -   -   -   -
0000720    -   -   -   -   K   M   7   G   I   3   g   L   6   c   H   2
0000740    g   L   6   g   L   6   c   H   2   g   L   6   c   H   2   K
0000760    M   7
0000762

See the "\r  \r  \n  \r  \r  \n" sequences.

Not sure that I'll have much more time to play with this tonight, so  
posting this
progress in case someone else wants to pick up and continue.

Graham







More information about the Mod_python mailing list