Class: Omnizip::Metadata::MetadataValidator
- Inherits:
-
Object
- Object
- Omnizip::Metadata::MetadataValidator
- Defined in:
- lib/omnizip/metadata/metadata_validator.rb
Overview
Validates metadata changes before applying
Instance Method Summary collapse
-
#validate_archive(metadata) ⇒ Object
Validate archive metadata.
-
#validate_comment(comment) ⇒ Object
Validate comment length.
-
#validate_entry(metadata) ⇒ Object
Validate entry metadata.
-
#validate_filename(filename) ⇒ Object
Validate filename.
-
#validate_permissions(perms) ⇒ Object
Validate Unix permissions.
-
#validate_time(time) ⇒ Object
Validate time value.
Instance Method Details
#validate_archive(metadata) ⇒ Object
Validate archive metadata
21 22 23 24 25 |
# File 'lib/omnizip/metadata/metadata_validator.rb', line 21 def validate_archive() validate_comment(.comment) if .comment true end |
#validate_comment(comment) ⇒ Object
Validate comment length
30 31 32 33 34 35 36 |
# File 'lib/omnizip/metadata/metadata_validator.rb', line 30 def validate_comment(comment) max_length = 65_535 # ZIP format limit return true if comment.bytesize <= max_length raise ArgumentError, "Comment too long: #{comment.bytesize} bytes (max: #{max_length})" end |
#validate_entry(metadata) ⇒ Object
Validate entry metadata
10 11 12 13 14 15 16 |
# File 'lib/omnizip/metadata/metadata_validator.rb', line 10 def validate_entry() validate_comment(.comment) if .comment validate_time(.mtime) if .respond_to?(:mtime) (.) if . true end |
#validate_filename(filename) ⇒ Object
Validate filename
81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
# File 'lib/omnizip/metadata/metadata_validator.rb', line 81 def validate_filename(filename) return true unless filename max_length = 65_535 # ZIP format limit if filename.bytesize > max_length raise ArgumentError, "Filename too long: #{filename.bytesize} bytes (max: #{max_length})" end # Check for invalid characters if filename.include?("\x00") raise ArgumentError, "Filename contains null character" end true end |
#validate_permissions(perms) ⇒ Object
Validate Unix permissions
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/omnizip/metadata/metadata_validator.rb', line 62 def (perms) return true unless perms unless perms.is_a?(Integer) raise ArgumentError, "Permissions must be an integer, got #{perms.class}" end unless (0..0o777).cover?(perms) raise ArgumentError, "Permissions out of range: 0#{perms.to_s(8)} (max: 0777)" end true end |
#validate_time(time) ⇒ Object
Validate time value
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/omnizip/metadata/metadata_validator.rb', line 41 def validate_time(time) return true unless time unless time.is_a?(Time) raise ArgumentError, "Time must be a Time object, got #{time.class}" end # DOS time range: 1980-01-01 to 2107-12-31 min_time = Time.new(1980, 1, 1) max_time = Time.new(2107, 12, 31, 23, 59, 59) if time < min_time || time > max_time raise ArgumentError, "Time out of DOS range (1980-2107): #{time}" end true end |