mod_http_file_share: Reject invalid file sizes
authorKim Alvefur <zash@zash.se>
Wed, 27 Jan 2021 00:36:49 +0100
changeset 11323 a4b299e37909
parent 11322 3b16aba6285f
child 11324 817cadf6be92
mod_http_file_share: Reject invalid file sizes
plugins/mod_http_file_share.lua
spec/scansion/http_upload.scs
--- a/plugins/mod_http_file_share.lua	Wed Jan 27 00:29:12 2021 +0100
+++ b/plugins/mod_http_file_share.lua	Wed Jan 27 00:36:49 2021 +0100
@@ -48,6 +48,7 @@
 	filetype = { type = "modify"; condition = "not-acceptable"; text = "File type not allowed" };
 	filesize = { type = "modify"; condition = "not-acceptable"; text = "File too large";
 		extra = {tag = st.stanza("file-too-large", {xmlns = namespace}):tag("max-file-size"):text(tostring(file_size_limit)) };
+	filesizefmt = { type = "modify"; condition = "bad-request"; text = "File size must be positive integer"; }
 	};
 });
 
@@ -62,6 +63,9 @@
 		return false, upload_errors.new("filename");
 	end
 
+	if not filesize or filesize < 0 or filesize % 1 ~= 0 then
+		return false, upload_errors.new("filesizefmt");
+	end
 	if filesize > file_size_limit then
 		return false, upload_errors.new("filesize");
 	end
--- a/spec/scansion/http_upload.scs	Wed Jan 27 00:29:12 2021 +0100
+++ b/spec/scansion/http_upload.scs	Wed Jan 27 00:36:49 2021 +0100
@@ -38,6 +38,19 @@
 	</iq>
 
 Romeo sends:
+	<iq to='upload.localhost' type='get' id='497c20dd-dda2-4feb-8199-7086e203de46' xml:lang='en'>
+		<request content-type='text/plain' filename='negative.dat' xmlns='urn:xmpp:http:upload:0' size='-1000'/>
+	</iq>
+
+Romeo receives:
+	<iq id='497c20dd-dda2-4feb-8199-7086e203de46' from='upload.localhost' type='error'>
+		<error type='modify'>
+			<bad-request xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/>
+			<text xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'>File size must be positive integer</text>
+		</error>
+	</iq>
+
+Romeo sends:
 	<iq to='upload.localhost' type='get' id='ac56d83f-a627-4732-8399-60492d1210b6' xml:lang='en'>
 		<request content-type='text/plain' filename='invalid/filename.dat' xmlns='urn:xmpp:http:upload:0' size='1000'/>
 	</iq>