tomcat-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From bugzi...@apache.org
Subject DO NOT REPLY [Bug 38085] New: - CGIServlet - form data with enctype="multipart/form-data"
Date Sun, 01 Jan 2006 01:14:33 GMT
DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG·
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://issues.apache.org/bugzilla/show_bug.cgi?id=38085>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND·
INSERTED IN THE BUG DATABASE.

http://issues.apache.org/bugzilla/show_bug.cgi?id=38085

           Summary: CGIServlet - form data with enctype="multipart/form-
                    data"
           Product: Tomcat 5
           Version: 5.5.9
          Platform: All
               URL: http://devenezia.com/round-robin/forum/postenvTAKEOUT.pl
        OS/Version: All
            Status: NEW
          Severity: normal
          Priority: P2
         Component: Catalina
        AssignedTo: tomcat-dev@jakarta.apache.org
        ReportedBy: rdevenezia@wildblue.net


This information was also posted to Apache-Tomcat listserv.

The sample perl program demonstrates the issue.

When a form has enctype="multipart/form-data" the data on cgi's STDIN (as passed
from cgiservlet) contains the QUERY_STRING in line 1 -- This is wrong.  

If using CGM.pm, it will error with a "Malformed multipart POST" because the
STDIN data and the CONTENT_LENGTH are out of sync. [The content being delivered
on STDIN is now longer than that reported by CONTENT_LENGTH ]

An untested work around (for perlers) is to tweak the perl script:
set content_length = content_length + length(query_string) + 2, iff
x_tomcat_script_path ne "" && content_type =~ #multipart/form-data#

#!c:\usr\bin\perl
##
##  printenv -- demo CGI program which just prints its environment
##

print <<HTML;
Status: 200
Content-type: text/html

<html><body>
<form
action="?ARG1=FOO&ARG2=BAR"
method="post"
enctype="multipart/form-data"
style="float:left"

<input type=text name=A value=123><br>
<input type=text name=B value=456><br>
<input type=text name=C value=789><br>
<input type=text name=D value=314><br>
<input type=text name=E value=123><br>
<input type=text name=F value=456><br>
<input type=text name=G value=789><br>
<input type=text name=H value=314159><br>
<input type=submit>
</form>
HTML

print "<PRE>";
foreach $var (sort(keys(%ENV))) {
    $val = $ENV{$var};
    $val =~ s|\n|\\n|g;
    $val =~ s|"|\\"|g;
    print "${var}=\"${val}\"\n";
}

print "</PRE>";

if ($ENV{'REQUEST_METHOD'} eq "POST") {
    CORE::binmode(STDIN); # good ole dos
    read (STDIN, $post, $ENV{'CONTENT_LENGTH'});
    print "<HR><PRE>!" . $post . "!!! THAT'S ALL FOLKS!</PRE>";

}

print "\n</html></body>";

results in
...
QUERY_STRING="ARG1=FOO&ARG2=BAR"
...
!ARG1=FOO&ARG2=BAR

-----------------------------33251965624481

Content-Disposition: form-data; name="A"

123

-----------------------------33251965624481
dot dot dot
-----------------------------33251965624481

Content-Disposition: form-data; name="H"

314159

-----------------------------3!!! THAT'S ALL FOLKS!

the content delivered to the cgi ends at 3 and 3251965624481<crlf><crlf> has
gone missing, which in turn makes CGI.pm error.

"3251965624481<cr><lf><cr><lf>" is the same length as
"ARG1=FOO&ARG2=BAR"

-- 
Configure bugmail: http://issues.apache.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org


Mime
View raw message