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