about summary refs log tree commit diff
diff options
context:
space:
mode:
authorEugen Rochko <eugen@zeonfederated.com>2020-05-15 18:41:27 +0200
committerGitHub <noreply@github.com>2020-05-15 18:41:27 +0200
commit199bbbcb9fe0620000538ae0c7766ff4a8f4cf0c (patch)
tree25a8719987794932367e896e9ce5813cd49eb44f
parent2b91a3dac0a71108042481d27f549c2261e5de41 (diff)
Fix `tootctl media remove-orphans` choking on unknown files in storage (#13765)
Fix #13762

Catch tootctl interrupt to prevent confusing stacktrace
-rwxr-xr-xbin/tootctl8
-rw-r--r--lib/mastodon/media_cli.rb17
2 files changed, 24 insertions, 1 deletions
diff --git a/bin/tootctl b/bin/tootctl
index f26e1c7ed..a9ebb22c6 100755
--- a/bin/tootctl
+++ b/bin/tootctl
@@ -1,5 +1,11 @@
 #!/usr/bin/env ruby
 APP_PATH = File.expand_path('../config/application', __dir__)
+
 require_relative '../config/boot'
 require_relative '../lib/cli'
-Mastodon::CLI.start(ARGV)
+
+begin
+  Mastodon::CLI.start(ARGV)
+rescue Interrupt
+  exit(130)
+end
diff --git a/lib/mastodon/media_cli.rb b/lib/mastodon/media_cli.rb
index 2b1653335..c95f3410a 100644
--- a/lib/mastodon/media_cli.rb
+++ b/lib/mastodon/media_cli.rb
@@ -88,6 +88,11 @@ module Mastodon
             path_segments = object.key.split('/')
             path_segments.delete('cache')
 
+            if path_segments.size != 7
+              progress.log(pastel.yellow("Unrecognized file found: #{object.key}"))
+              next
+            end
+
             model_name      = path_segments.first.classify
             attachment_name = path_segments[1].singularize
             record_id       = path_segments[2..-2].join.to_i
@@ -127,6 +132,11 @@ module Mastodon
           path_segments = key.split(File::SEPARATOR)
           path_segments.delete('cache')
 
+          if path_segments.size != 7
+            progress.log(pastel.yellow("Unrecognized file found: #{key}"))
+            next
+          end
+
           model_name      = path_segments.first.classify
           record_id       = path_segments[2..-2].join.to_i
           attachment_name = path_segments[1].singularize
@@ -246,6 +256,11 @@ module Mastodon
       path_segments = path.split('/')[2..-1]
       path_segments.delete('cache')
 
+      if path_segments.size != 7
+        say('Not a media URL', :red)
+        exit(1)
+      end
+
       model_name = path_segments.first.classify
       record_id  = path_segments[2..-2].join.to_i
 
@@ -294,6 +309,8 @@ module Mastodon
         segments = object.key.split('/')
         segments.delete('cache')
 
+        next if segments.size != 7
+
         model_name = segments.first.classify
         record_id  = segments[2..-2].join.to_i