lz4.c : corrected compression efficiency issue 97 in 64-bits chained mode (-BD) for...
authoryann.collet.73@gmail.com <yann.collet.73@gmail.com@650e7d94-2a16-8b24-b05c-7c0b3f6821cd>
Sat, 2 Nov 2013 12:11:04 +0000 (12:11 +0000)
committeryann.collet.73@gmail.com <yann.collet.73@gmail.com@650e7d94-2a16-8b24-b05c-7c0b3f6821cd>
Sat, 2 Nov 2013 12:11:04 +0000 (12:11 +0000)
git-svn-id: https://lz4.googlecode.com/svn/trunk@108 650e7d94-2a16-8b24-b05c-7c0b3f6821cd

Makefile
NEWS
lz4.c
lz4cli.c

index cca2a30..bacc702 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -30,7 +30,7 @@
 # fullbench32: Same as fullbench, but forced to compile in 32-bits mode
 # ################################################################
 
-RELEASE=r107
+RELEASE=r108
 DESTDIR=
 PREFIX=${DESTDIR}/usr
 BINDIR=$(PREFIX)/bin
diff --git a/NEWS b/NEWS
index c158a94..01945ea 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,6 @@
+r108 :\r
+lz4.c : corrected compression efficiency issue 97 in 64-bits chained mode (-BD) for streams > 4 GB (thanks Roman Strashkin for reporting)\r
+\r
 r107 :\r
 Makefile : support DESTDIR for staged installs. Thanks Jorge Aparicio.\r
 Makefile : make install installs both lz4 and lz4c (Jorge Aparicio)\r
@@ -13,11 +16,11 @@ cmake : check for just C compiler (Elan Ruusamae)
 \r
 r106 :\r
 Makefile : make dist modify text files in the package to respect Unix EoL convention\r
-lz4cli : corrected small display bug in HC mode\r
+lz4cli.c : corrected small display bug in HC mode\r
 \r
 r105 :\r
 Makefile : New install script and man page, contributed by Prasad Pandit\r
 lz4cli.c : Minor modifications, for easier extensibility\r
-COPYING : added license file\r
+COPYING  : added license file\r
 LZ4_Streaming_Format.odt : modified file name to remove white space characters\r
-exe : .exe suffix now properly added only for Windows target
\ No newline at end of file
+Makefile : .exe suffix now properly added only for Windows target
\ No newline at end of file
diff --git a/lz4.c b/lz4.c
index 2d014ca..5668521 100644 (file)
--- a/lz4.c
+++ b/lz4.c
@@ -631,21 +631,27 @@ char* LZ4_slideInputBuffer (void* LZ4_Data)
     LZ4_Data_Structure* lz4ds = (LZ4_Data_Structure*)LZ4_Data;\r
     size_t delta = lz4ds->nextBlock - (lz4ds->bufferStart + 64 KB);\r
 \r
-    if(lz4ds->base - delta > lz4ds->base)   // underflow control\r
+    if ( (lz4ds->base - delta > lz4ds->base)                          // underflow control\r
+       || ((size_t)(lz4ds->nextBlock - lz4ds->base) > 0xE0000000) )   // close to 32-bits limit\r
     {\r
-        size_t newBaseDelta = (lz4ds->nextBlock - 64 KB) - lz4ds->base;\r
+        size_t deltaLimit = (lz4ds->nextBlock - 64 KB) - lz4ds->base;\r
         int nH;\r
 \r
         for (nH=0; nH < HASHNBCELLS4; nH++)\r
         {\r
-            if (lz4ds->hashTable[nH] < (U32)newBaseDelta) lz4ds->hashTable[nH] = 0;\r
-            else lz4ds->hashTable[nH] -= (U32)newBaseDelta;\r
+            if ((size_t)(lz4ds->hashTable[nH]) < deltaLimit) lz4ds->hashTable[nH] = 0;\r
+            else lz4ds->hashTable[nH] -= (U32)deltaLimit;\r
         }\r
-        lz4ds->base += newBaseDelta;\r
+        memcpy((void*)(lz4ds->bufferStart), (const void*)(lz4ds->nextBlock - 64 KB), 64 KB);\r
+        lz4ds->base = lz4ds->bufferStart;\r
+        lz4ds->nextBlock = lz4ds->base + 64 KB;\r
     }\r
-    memcpy((void*)(lz4ds->bufferStart), (const void*)(lz4ds->nextBlock - 64 KB), 64 KB);\r
-    lz4ds->nextBlock -= delta;\r
-    lz4ds->base -= delta;\r
+    else\r
+    {\r
+               memcpy((void*)(lz4ds->bufferStart), (const void*)(lz4ds->nextBlock - 64 KB), 64 KB);\r
+               lz4ds->nextBlock -= delta;\r
+               lz4ds->base -= delta;\r
+       }\r
 \r
     return (char*)(lz4ds->nextBlock);\r
 }\r
index 4743115..5375ac6 100644 (file)
--- a/lz4cli.c
+++ b/lz4cli.c
@@ -49,7 +49,8 @@
 #endif\r
 \r
 #define _FILE_OFFSET_BITS 64   // Large file support on 32-bits unix\r
-#define _POSIX_SOURCE 1        // for fileno() within <stdio.h> on unix\r\r
+#define _POSIX_SOURCE 1        // for fileno() within <stdio.h> on unix\r
+\r
 \r
 //****************************\r
 // Includes\r
 // Constants\r
 //****************************\r
 #define COMPRESSOR_NAME "LZ4 Compression CLI"\r
-#define COMPRESSOR_VERSION "v1.0.7"\r
+#define COMPRESSOR_VERSION "v1.0.8"\r
 #define COMPILED __DATE__\r
 #define AUTHOR "Yann Collet"\r
 #define LZ4_EXTENSION ".lz4"\r