filename checks müssen auf defined sein, weil der dateiname auch leer sein kann.
authorSven Schöling <s.schoeling@linet-services.de>
Mon, 6 Feb 2012 18:24:48 +0000 (19:24 +0100)
committerSven Schöling <s.schoeling@linet-services.de>
Mon, 6 Feb 2012 19:20:13 +0000 (20:20 +0100)
Hintergrund: Wenn bei einem fileupload in einem [+] array die letzte Zeile leer
ist, wird der Dateiname leer gelassen. Dadurch wurde die Dateizeile
fälschlicherweise ins target einsortiert und hat dort die letzte Zeile der
echten Uploads überschrieben.

SL/Request.pm

index 38dfc1f..a38f3c0 100644 (file)
@@ -103,11 +103,11 @@ sub _parse_multipart_formdata {
           substr $line, $-[0], $+[0] - $-[0], "";
         }
 
-        $previous                = _store_value($filename ? $target : $temp_target, $name, '') if ($name);
-        $temp_target->{FILENAME} = $filename if ($filename);
+        $previous                = _store_value(defined $filename ? $target : $temp_target, $name, '') if ($name);
+        $temp_target->{FILENAME} = $filename if (defined $filename);
 
         # for multiple uploads: save the attachments in a SL/Mailer like structure
-        if ($name && $filename) {
+        if ($name && defined $filename) {
           _store_value($target, "ATTACHMENTS.$name.data", $previous);
           _store_value($temp_target, "ATTACHMENTS.$name.filename", $filename);
         }