summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpablu <me@pablu.de>2026-08-06 10:58:29 +0200
committerpablu <me@pablu.de>2026-08-06 11:01:39 +0200
commitaf6c7b36997e87b93e24fd055e9c0b640f8abaef (patch)
tree318d2d01cbb742d24d8d2a53034b3b3f29efccc3
parent13de03cd1cc659f062f159382a3e9c17c51a5b74 (diff)
feat: add https safe file handling
-rw-r--r--generator.go20
-rw-r--r--mise.toml8
2 files changed, 25 insertions, 3 deletions
diff --git a/generator.go b/generator.go
index 5710a2c..2bb293b 100644
--- a/generator.go
+++ b/generator.go
@@ -61,11 +61,11 @@ func (opts *Options) GetThumbnail(path string) ([][]byte, int, error) {
return nil, 0, err
}
- var interval int
+ var interval int
if opts.UseSegments {
interval = int(length / float64(opts.Segments))
} else {
- interval = opts.Interval
+ interval = opts.Interval
}
return GetThumbnailUnderlying(path, opts.MaxThumbnails, filters, length, interval, opts.EnableFilter, opts.Format, opts.Scale)
@@ -148,9 +148,23 @@ func GetVideoLength(path string) (float64, error) {
return strconv.ParseFloat(strings.ReplaceAll(buf.String(), "\n", ""), 64)
}
+func escapeFilterValue(value string) string {
+ return strings.NewReplacer(
+ "\\", "\\\\",
+ "'", "\\'",
+ ":", "\\:",
+ ",", "\\,",
+ ";", "\\;",
+ "[", "\\[",
+ "]", "\\]",
+ ).Replace(value)
+}
+
func GetFilter(path string) ([]TimeFilter, error) {
buf := bytes.NewBuffer(nil)
- cmd := exec.Command("ffprobe", "-f", "lavfi", "-i", fmt.Sprintf("movie=%s,blackdetect[out0]", path), "-show_entries", "tags=lavfi.black_start,lavfi.black_end", "-of", "default=nw=1", "-v", "quiet")
+ filter := fmt.Sprintf("movie=filename='%s',blackdetect[out0]", escapeFilterValue(path))
+
+ cmd := exec.Command("ffprobe", "-f", "lavfi", "-i", filter, "-show_entries", "tags=lavfi.black_start,lavfi.black_end", "-of", "default=nw=1", "-v", "quiet")
cmd.Stdout = buf
err := cmd.Run()
// TODO: Replace with strings.Builder
diff --git a/mise.toml b/mise.toml
new file mode 100644
index 0000000..7fc8548
--- /dev/null
+++ b/mise.toml
@@ -0,0 +1,8 @@
+[tools]
+go = "1.26.0"
+"go:golang.org/x/tools/gopls" = "latest"
+buf = "1.72.0"
+
+[tasks.generate]
+description = "Generate Go protobuf and gRPC bindings"
+run = "buf generate"