]> git.mxchange.org Git - simgear.git/commitdiff
Proper fix for gzfilebuf choking on some files.
authorThorstenB <brehmt@gmail.com>
Sat, 10 Nov 2012 09:12:01 +0000 (10:12 +0100)
committerThorstenB <brehmt@gmail.com>
Sat, 10 Nov 2012 09:12:01 +0000 (10:12 +0100)
When reading a new block of data, and the first byte of the new block is
0xff (_signed_ char -1), then this must be converted to _integer_ 0xff
(+255), not -1 - which would indicate an error condition (EOF==-1). All
valid _data_ character must be returned as non-negative, see
streambuf::underflow spec, or compare with
http://www.opensource.apple.com/source/zlib/zlib-12/zlib/contrib/iostream/zfstream.cpp
or
http://www.raspberryginger.com/jbailey/minix/html/zfstream_8cpp-source.html

simgear/misc/zfstream.cxx

index 38a16ff2aa9998b127a5a0c05803e61b87388f8b..eae24f78b16d88ecb7d4332f0f55a539db3fc0d7 100644 (file)
@@ -270,7 +270,7 @@ gzfilebuf::underflow()
     }
     else
     {
-        return fillbuf() == EOF ? traits_type::eof() : int_type(*gptr());
+        return fillbuf() == EOF ? traits_type::eof() : (unsigned char) (*gptr());
     }
 }