[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdelibs/kdecore/io
From:       David Faure <faure () kde ! org>
Date:       2010-10-15 22:44:00
Message-ID: 20101015224400.5FB03AC896 () svn ! kde ! org
[Download RAW message or body]

SVN commit 1186343 by dfaure:

Fix handling of large .zip files, the size determination ended up negative because of \
the implicit sign expansion when doing ... | (uchar)buffer[3] << 24   (int is \
                implicitely used). Tested in isolation, but not with .zip files.
Raphael: please re-test and if this fixes all issues I'll backport and close the bug.
CCBUG: 216672


 M  +6 -6      kzip.cpp  


--- trunk/KDE/kdelibs/kdecore/io/kzip.cpp #1186342:1186343
@@ -390,12 +390,12 @@
 	    int compression_mode = (uchar)buffer[2] | (uchar)buffer[3] << 8;
 	    time_t mtime = transformFromMsDos( buffer+4 );
 
-	    qint64 compr_size = (uchar)buffer[12] | (uchar)buffer[13] << 8
-	    			| (uchar)buffer[14] << 16 | (uchar)buffer[15] << 24;
-	    qint64 uncomp_size = (uchar)buffer[16] | (uchar)buffer[17] << 8
-	    			| (uchar)buffer[18] << 16 | (uchar)buffer[19] << 24;
-	    int namelen = (uchar)buffer[20] | (uchar)buffer[21] << 8;
-	    int extralen = (uchar)buffer[22] | (uchar)buffer[23] << 8;
+            const qint64 compr_size = uint(uchar(buffer[12])) | \
uint(uchar(buffer[13])) << 8 | +                                      \
uint(uchar(buffer[14])) << 16 | uint(uchar(buffer[15])) << 24; +            const \
qint64 uncomp_size = uint(uchar(buffer[16])) | uint(uchar(buffer[17])) << 8 | +       \
uint(uchar(buffer[18])) << 16 | uint(uchar(buffer[19])) << 24; +            const int \
namelen = uint(uchar(buffer[20])) | uint(uchar(buffer[21])) << 8; +            const \
int extralen = uint(uchar(buffer[22])) | uint(uchar(buffer[23])) << 8;  
             /*
 	    kDebug(7040) << "general purpose bit flag: " << gpf;


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic