From d0453b7591fa3d5d41f202661e16ba19dc7a50f0 Mon Sep 17 00:00:00 2001 From: sigoden Date: Fri, 14 Mar 2025 08:53:11 +0800 Subject: [PATCH] feat: limit sub directory item counting (#556) --- assets/index.js | 22 +++++++++++++++------- src/server.rs | 4 ++++ 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/assets/index.js b/assets/index.js index 45595ed..eed8c42 100644 --- a/assets/index.js +++ b/assets/index.js @@ -50,6 +50,8 @@ const IFRAME_FORMATS = [ ".mp3", ".ogg", ".wav", ".m4a", ]; +const MAX_SUBPATHS_COUNT = 1000; + const ICONS = { dir: ``, symlinkFile: ``, @@ -248,7 +250,7 @@ class Uploader { progress(event) { const now = Date.now(); const speed = (event.loaded - this.uploaded) / (now - this.lastUptime) * 1000; - const [speedValue, speedUnit] = formatSize(speed); + const [speedValue, speedUnit] = formatFileSize(speed); const speedText = `${speedValue} ${speedUnit}/s`; const progress = formatPercent(((event.loaded + this.uploadOffset) / this.file.size) * 100); const duration = formatDuration((event.total - event.loaded) / speed); @@ -477,8 +479,8 @@ function addPath(file, index) { ${actionDelete} ${actionEdit} `; - - let sizeDisplay = isDir ? `${file.size} ${file.size === 1 ? "item" : "items"}` : formatSize(file.size).join(" "); + + let sizeDisplay = isDir ? formatDirSize(file.size) : formatFileSize(file.size).join(" "); $pathsTableBody.insertAdjacentHTML("beforeend", ` @@ -878,7 +880,13 @@ function padZero(value, size) { return ("0".repeat(size) + value).slice(-1 * size); } -function formatSize(size) { +function formatDirSize(size) { + const unit = file.size === 1 ? "item" : "items"; + const num = size >= MAX_SUBPATHS_COUNT ? `>${MAX_SUBPATHS_COUNT - 1}` : `${file.size}`; + return ` ${num} ${unit}`; +} + +function formatFileSize(size) { if (size == null) return [0, "B"]; const sizes = ['B', 'KB', 'MB', 'GB', 'TB']; if (size == 0) return [0, "B"]; @@ -938,9 +946,9 @@ function decodeBase64(base64String) { let i = 0; for (; i < arr.length; i++) { arr[i] = binString.charCodeAt(i * 4) | - (binString.charCodeAt(i * 4 + 1) << 8) | - (binString.charCodeAt(i * 4 + 2) << 16) | - (binString.charCodeAt(i * 4 + 3) << 24); + (binString.charCodeAt(i * 4 + 1) << 8) | + (binString.charCodeAt(i * 4 + 2) << 16) | + (binString.charCodeAt(i * 4 + 3) << 24); } for (i = i * 4; i < len; i++) { bytes[i] = binString.charCodeAt(i); diff --git a/src/server.rs b/src/server.rs index da9da9a..3f75b16 100644 --- a/src/server.rs +++ b/src/server.rs @@ -63,6 +63,7 @@ const BUF_SIZE: usize = 65536; const EDITABLE_TEXT_MAX_SIZE: u64 = 4194304; // 4M const RESUMABLE_UPLOAD_MIN_SIZE: u64 = 20971520; // 20M const HEALTH_CHECK_PATH: &str = "__dufs__/health"; +const MAX_SUBPATHS_COUNT: u64 = 1000; pub struct Server { args: Args, @@ -1410,6 +1411,9 @@ impl Server { continue; } count += 1; + if count >= MAX_SUBPATHS_COUNT { + break; + } } count }