diff --git a/do.php b/do.php index 2b25cb8..e06e20f 100755 --- a/do.php +++ b/do.php @@ -505,7 +505,11 @@ elseif (ig('down') || ig('downf') || //send file headers header('Pragma: public'); - header('Accept-Ranges: bytes'); + if ($resuming_on) { + header('Accept-Ranges: bytes'); + } else { + header('Accept-Ranges: none'); + } header('Content-Description: File Transfer'); //dirty fix @@ -528,29 +532,27 @@ elseif (ig('down') || ig('downf') || //} //add multipart download and resume support - if (isset($_SERVER['HTTP_RANGE'])) + if (isset($_SERVER['HTTP_RANGE']) && $resuming_on) { - if ($resuming_on) - { - list($a, $range) = explode('=', $_SERVER['HTTP_RANGE'], 2); - list($range) = explode(',', $range, 2); - list($range, $range_end) = explode('-', $range, 2); - $range = round(floatval($range), 0); - $range_end = ! $range_end ? $size - 1 : round(floatval($range_end), 0); - - $partial_length = $range_end - $range + 1; - header('HTTP/1.1 206 Partial Content'); - header("Content-Length: $partial_length"); - header("Content-Range: bytes $range-$range_end/$size"); - - fseek($fp, $range); - } - else - { - // Respond with a 416 Range Not Satisfiable - header('HTTP/1.1 416 Range Not Satisfiable'); + list($a, $range) = explode('=', $_SERVER['HTTP_RANGE'], 2); + list($range) = explode(',', $range, 2); + list($range, $range_end) = explode('-', $range, 2); + $range = round(floatval($range), 0); + $range_end = ! $range_end ? $size - 1 : round(floatval($range_end), 0); + + if ($range < 0 || $range >= $size || $range > $range_end || $range_end >= $size ) { + header('HTTP/1.1 416 Requested Range Not Satisfiable'); + header("Content-Range: bytes */$size"); + fclose($fp); exit; } + + $partial_length = $range_end - $range + 1; + header('HTTP/1.1 206 Partial Content'); + header("Content-Length: $partial_length"); + header("Content-Range: bytes $range-$range_end/$size"); + + fseek($fp, $range); } else { @@ -565,9 +567,6 @@ elseif (ig('down') || ig('downf') || //read and output the file in chunks while (! feof($fp) && (! connection_aborted()) && ($bytes_sent < $partial_length)) { - if ($chunksize > ($partial_length - $bytes_sent)) { - $chunksize = $partial_length - $bytes_sent; - } $buffer = fread($fp, $chunksize); print($buffer); flush(); diff --git a/install/includes/update_schema.php b/install/includes/update_schema.php index 93acfe4..d46fe83 100755 --- a/install/includes/update_schema.php +++ b/install/includes/update_schema.php @@ -35,4 +35,5 @@ $update_schema[9]['sql'] = [ $update_schema[10]['sql'] = [ 'about_files' => "ALTER TABLE `{$dbprefix}files` ADD `about` LONGTEXT NULL DEFAULT NULL AFTER `real_filename`;", -]; \ No newline at end of file + 'enable_multipart' => "INSERT INTO `{$dbprefix}groups_data` (`group_id`, `name`, `value`) SELECT `group_id`, 'enable_multipart', 1 FROM `{$dbprefix}groups`;", +];