diff --git a/Library/Homebrew/dev-cmd/bump-unversioned-casks.rb b/Library/Homebrew/dev-cmd/bump-unversioned-casks.rb
index 8a5c16ff32e2ff4b32606ebb7924e3cd45974121..e9a6de0969651f76c1cdb51450f5c279228b8895 100644
--- a/Library/Homebrew/dev-cmd/bump-unversioned-casks.rb
+++ b/Library/Homebrew/dev-cmd/bump-unversioned-casks.rb
@@ -1,6 +1,7 @@
 # typed: false
 # frozen_string_literal: true
 
+require "timeout"
 require "cask/download"
 require "cask/installer"
 require "cask/cask_loader"
@@ -45,18 +46,9 @@ module Homebrew
 
     state = state_file.exist? ? JSON.parse(state_file.read) : {}
 
-    cask_files = args.named.to_paths(only: :cask, recurse_tap: true)
+    casks = args.named.to_paths(only: :cask, recurse_tap: true).map { |path| Cask::CaskLoader.load(path) }
 
-    unversioned_cask_files = cask_files.select do |cask_file|
-      url = cask_file.each_line do |line|
-        url = line[/\s*url\s+"([^"]+)"\s*/, 1]
-        break url if url
-      end
-
-      url.present? && url.exclude?('#{')
-    end.sort
-
-    unversioned_casks = unversioned_cask_files.map { |path| Cask::CaskLoader.load(path) }
+    unversioned_casks = casks.select { |cask| cask.url&.unversioned? }
 
     ohai "Unversioned Casks: #{unversioned_casks.count} (#{state.size} cached)"
 
@@ -126,16 +118,15 @@ module Homebrew
     end
 
     if last_time != time || last_file_size != file_size
-      begin
-        cached_download = unversioned_cask_checker.installer.download
+      sha256 = begin
+        Timeout.timeout(5.minutes) do
+          unversioned_cask_checker.installer.download.sha256
+        end
       rescue => e
         onoe e
-        return
       end
 
-      sha256 = cached_download.sha256
-
-      if last_sha256 != sha256 && (version = unversioned_cask_checker.guess_cask_version)
+      if sha256.present? && last_sha256 != sha256 && (version = unversioned_cask_checker.guess_cask_version)
         if cask.version == version
           oh1 "Cask #{cask} is up-to-date at #{version}"
         else