# [CRUCIBLE-SEED]
# category: path_traversal
# severity: critical
# language: ruby
# expected: Zip extraction writes files using entry name without sanitization — zip slip

require 'zip'

def extract_zip(zip_path, dest_dir)
  Zip::File.open(zip_path) do |zip|
    zip.each do |entry|
      output_path = File.join(dest_dir, entry.name)
      FileUtils.mkdir_p(File.dirname(output_path))
      entry.extract(output_path) { true }
    end
  end
end
