From 7150adaa70b8982edd1b3a57adc588d56ca8d2bd Mon Sep 17 00:00:00 2001 From: supechicken Date: Sun, 20 Mar 2022 02:18:45 +0800 Subject: [PATCH] deb_utils: Ignore trailing newline (#6880) * deb_utils: Ignore trailing newline * Fix trailing newline detection * Change comment location --- lib/deb_utils.rb | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/lib/deb_utils.rb b/lib/deb_utils.rb index 86caf8491..594dbf239 100644 --- a/lib/deb_utils.rb +++ b/lib/deb_utils.rb @@ -12,6 +12,7 @@ module DebUtils # file_found = false src_fileIO = File.open(file, 'rb') + file_size = src_fileIO.size # get first line of the given file, should be a signature string (`!\n`) if it is a valid deb file signature = src_fileIO.gets @@ -19,13 +20,21 @@ module DebUtils # process each file in archive while (line = src_fileIO.gets) do + if line.chomp.empty? and file_size == src_fileIO.tell + # early return if trailing newline is detected + break + elsif line.chomp.empty? + STDERR.puts "Unexpected newline in offset #{src_fileIO.tell}, ignoring...".yellow + next + end + # read file meta name, modtime, uid, gid, mode, size, end_char = \ line.scan(/(.{16})(.{12})(.{6})(.{6})(.{8})(.{10})(.{1})/).flatten.map(&:strip) # remove slash suffix from filename (if any) # (a `.deb` ar archive does not support any directories, so we can confirm that all entries are normal files) - name.sub!(/\/$/, '') + name&.sub!(/\/$/, '') # check ending byte abort 'Malformed archive :/'.lightred unless end_char == '`'