HTTP upload selze pro 4095 a 4096 bajtu?
Jan Kasprzak
kas na informatics.muni.cz
Pondělí Červenec 28 15:49:24 MEST 2003
Jan Kasprzak wrote:
: Zdravim,
:
: mam takovy problem s Perlem (nebo mozna s Apachem). V prvni fazi
: bych se chtel zeptat, jestli jste se s necim podobnym nesetkali. Problem
: je ten, ze pokud pres POST uploaduju 4095 nebo 4096 bajtu velky soubor,
: dostanu na strane HTTP serveru jen 4094 bajtu.
Dalsi pokrok je ten, ze takto se to chova na perl-5.005_03
a perl-5.004_04. Navic jsem testovanim zjistil, ze to nefunguje i pro
jine delky nez 4095 a 4096 bajtu, a to (zatim) pro tyto:
4095 NOT OK: Delka je 4094
4096 NOT OK: Delka je 4094
8183 NOT OK: Delka je 8182
8184 NOT OK: Delka je 8182
12271 NOT OK: Delka je 12270
12272 NOT OK: Delka je 12270
16359 NOT OK: Delka je 16358
16360 NOT OK: Delka je 16358
Dale jsem zjistil ze na 5.8.0 (co je v Red Hatu 9) to funguje
tak, ze z 4095 to naopak udela delsi obsah - 4096 bajtu, 4096 je v poradku,
podobne 8183 => 8184, 8184 je v poradku, atd.
Pomoci diff -u CGI.pm z obou verzi Perlu podezrivam nasledujici
kus kodu v CGI.pm (diff je 5_004_04 oproti 5.8.0):
@@ -3252,7 +3276,8 @@
substr($self->{BUFFER},0,$bytesToReturn)='';
# If we hit the boundary, remove the CRLF from the end.
- return ($start > 0) ? substr($returnval,0,-2) : $returnval;
+ return (($start > 0) && ($start <= $bytes))
+ ? substr($returnval,0,-2) : $returnval;
}
END_OF_FUNC
Mozna nekdo budete rychlejsi nez ja ve zkoumani toho, co se vlastne
tento kod snazi delat a proc to nefunguje.
Je fakt divne, ze na tohle jeste nikdo nenarazil. Muze mi nekdo
potvrdit, ze u neho to funguje taky tak spatne?
-Y.
--
| Jan "Yenya" Kasprzak <kas at {fi.muni.cz - work | yenya.net - private}> |
| GPG: ID 1024/D3498839 Fingerprint 0D99A7FB206605D7 8B35FCDE05B18A5E |
| http://www.fi.muni.cz/~kas/ Czech Linux Homepage: http://www.linux.cz/ |
|__ If you want "aesthetics", go play with microkernels. -Linus Torvalds __|
Další informace o konferenci Perl