From a20a3a2f4cc0b2bc69e2c9548356920aef2e68d3 Mon Sep 17 00:00:00 2001 From: Jerome Jutteau Date: Sat, 5 Dec 2020 12:52:10 +0100 Subject: [PATCH] =?utf8?q?[BUGFIX]=20lower=20POST=20size=20when=20=CC=80PH?= =?utf8?q?P's=20upload=5Fmax=5Ffilesize=20is=20too=20low.?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit When post_max_size == upload_max_filesize, Jifeau sends too large request (files + headers) and serveur still returns 200. Jirafeau does not see any files and return Error 23. Javascript client now detect this error and retry with a lower file size to make room for headers. closes #240 Signed-off-by: Jerome Jutteau --- lib/functions.js.php | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/lib/functions.js.php b/lib/functions.js.php index ebf8531..ced2fa7 100644 --- a/lib/functions.js.php +++ b/lib/functions.js.php @@ -494,7 +494,16 @@ function async_upload_push (code) { var res = req.responseText; - if (/^Error/.test(res)) + // This error may be triggered when Jirafeau does not receive any file in POST. + // This may be due to bad php configuration where post_max_size is too low + // comparing to upload_max_filesize. Let's retry with lower file size. + if (res === "Error 23") + { + async_global_max_size = Math.max(1, async_global_max_size - 500); + async_upload_push (async_global_last_code); + return; + } + else if (/^Error/.test(res)) { pop_failure (res); return; @@ -504,15 +513,17 @@ function async_upload_push (code) var code = res[0] async_global_transfered = async_global_transfering; async_upload_push (code); + return; } else { if (req.status == 413) // Request Entity Too Large { // lower async_global_max_size and retry - async_global_max_size = parseInt (async_global_max_size * 0.8); + async_global_max_size = Math.max(1, parseInt (async_global_max_size * 0.8)); } async_upload_push (async_global_last_code); + return; } } } -- 2.34.1