From d0d30c36cadbb971034a78d2eacf1d360b0933bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Fri, 13 Oct 2006 12:10:03 +0000 Subject: [PATCH] The length of the extra field was not correctly determined, and the offset was not changed correctly either: the order in which the expression was evaluated was undefined; in fact, GCC 2.95.3 would use the same buffer[index] twice. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19060 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/system/boot/loader/file_systems/tarfs/tarfs.cpp | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/system/boot/loader/file_systems/tarfs/tarfs.cpp b/src/system/boot/loader/file_systems/tarfs/tarfs.cpp index 4bafdb4947..3730c66e26 100644 --- a/src/system/boot/loader/file_systems/tarfs/tarfs.cpp +++ b/src/system/boot/loader/file_systems/tarfs/tarfs.cpp @@ -154,16 +154,14 @@ skip_gzip_header(z_stream *stream) if (buffer[0] != 0x1f || buffer[1] != 0x8b) return false; - uint32 offset = 3; - // we need the flags field to determine the length of the header - int flags = buffer[offset++]; + int flags = buffer[3]; - offset += 6; + uint32 offset = 10; if ((flags & 0x04) != 0) { // skip extra field - offset += buffer[offset++] | (buffer[offset++] << 8); + offset += (buffer[offset] | (buffer[offset + 1] << 8)) + 2; if (offset >= stream->avail_in) return false; }