From 6c282b0720897ad58f48197e5be030c17fef6cb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Laurent?= <francois.laurent@posteo.net> Date: Wed, 16 Apr 2025 11:12:50 +0200 Subject: [PATCH] fix #316 --- src/files.jl | 21 +++++++++++++++++++++ src/larvatagger.js | 1 + 2 files changed, 22 insertions(+) diff --git a/src/files.jl b/src/files.jl index a9f9a12..9033cc1 100644 --- a/src/files.jl +++ b/src/files.jl @@ -249,6 +249,22 @@ end getoutput(controller) = gethub(controller)[:output] +function valid_filename(name) + # adapted from NyxUI.jl (MIT license, same author) + windows_extra = "|:*?<>" + for c in "./\\'\"`" * windows_extra + if c in name + return false + end + end + for nonprintable in 0x0:0x31 + if nonprintable in name + return false + end + end + return true +end + interpolate(s="yyyymmdd_HHMMSS") = Dates.format(Dates.now(), s) function savetofile(controller, file; datafile=nothing, merge=false) @@ -474,6 +490,11 @@ function getoutputfile(controller) dir = cwd(controller) if isnothing(file) outputfile.name.val = "{yyyymmdd_HHMMSS}.label" + elseif !valid_filename(file) + @warn "Invalid filename; saving to date_time format instead" file + file = "{yyyymmdd_HHMMSS}.label" + savetofile(hub, file) + reset!(outputfile) elseif isfile(joinpath(dir, file)) twooptiondialog(hub, outputfile.merge, "File already exists", diff --git a/src/larvatagger.js b/src/larvatagger.js index 8437424..680b6cd 100644 --- a/src/larvatagger.js +++ b/src/larvatagger.js @@ -118,6 +118,7 @@ const LarvaTagger = (function () { return false; } + // TODO: validate filepath similarly to valid_filename in files.jl function setOutputFilename(obs) { var defaultfilepath = obs.value; if (defaultfilepath === null) { -- GitLab