]> git.xolatile.top Git - emil-up.chud.cyou.git/commitdiff
fix bug, implement overwritting, bump todo
authoranon <anon@anon.anon>
Sat, 5 Jul 2025 21:39:24 +0000 (23:39 +0200)
committeranon <anon@anon.anon>
Sat, 5 Jul 2025 21:39:24 +0000 (23:39 +0200)
TODO.md
upchud.tcl

diff --git a/TODO.md b/TODO.md
index 90d4c51b4a94dc2727ff955c48fb9476298303f4..9ae4afffa27b40f0521098a61bd8d34a2ba45f0a 100644 (file)
--- a/TODO.md
+++ b/TODO.md
@@ -1,2 +1,4 @@
-* configurable force overwritting
 * include some tmp file cleaner scripts or atleast leave recommendations
+* by spoofing the request, it might be currently possible to upload files
+to a parent dictionary; this should be tested and fixed, but should be fine
+as long as the person running the service doesnt run it as root
index 544994a97a8e3793f60f4a2e9e3fd10bdb20ccdf..6e39fd685e0c6ec0f66d0366549f4dcdafb4dcef 100755 (executable)
@@ -15,6 +15,8 @@ set mangle_char_set {0123456789abcdefghijklmnopqrstuvwxyz}
 # $::mangle_lenght and $::mangle_char_set are small, you could end up with a dead lock.
 # This value is the fail-safe.
 set max_save_attempts 20
+# Alternative to $::max_save_attempts. When on, collisons clobber.
+set overwrite_uploads 0
 # The output of this function is (ideally) what the user will see.
 # I have provided a few default behaviours, but you do you champ.
 proc send_success {upload_name} {
@@ -107,13 +109,19 @@ proc get_out_name {orig_name} {
         return $name
     }
 
-    if { $::mangle_lenght == 0 } { return $orig_name }
+    if { $::mangle_lenght == 0 } {
+        if { $::overwrite_uploads || ![file exists $out_name] } {
+            return "$::outdir/$orig_name"
+        } else {
+            raise_fatal
+        }
+    }
 
     set extension [file extension $orig_name]
 
     for { set tries 1 } { $tries <= $::max_save_attempts } { incr tries } {
         set out_name "$::outdir/[get_random_name]$extension"
-        if { ![file exists $out_name] } { break }
+        if { $::overwrite_uploads || ![file exists $out_name] } { break }
     }
 
     return $out_name