Merge pull request #2399 from brawner/brawner/update-cmake-minimum-version

Update cmake_minimum_required to 2.8.12
diff --git a/.github/workflows/generic-release.yml b/.github/workflows/generic-release.yml
index d9e7109..de4a1cb 100644
--- a/.github/workflows/generic-release.yml
+++ b/.github/workflows/generic-release.yml
@@ -3,17 +3,17 @@
 on:
   pull_request:
     # This will eventually only be for pushes to master
-    # but for dogfooding purposes, I'm running it even 
+    # but for dogfooding purposes, I'm running it even
     # on dev pushes
     branches: [ dev, master, actionsTest ]
 
 jobs:
   # missing jobs
-  # 
+  #
   # ppc64le + fuzz test
   # Qemu PPC64 + Fuzz test
   # Qemu aarch64 + Fuzz Test (on Xenial)
-  # versions comp   
+  # versions comp
   # meson test
 
   osx:
@@ -24,7 +24,7 @@
       run: |
         make test
         # make -c lib all (need to fix. not working right now)
-  
+
   zbuff:
     runs-on: ubuntu-16.04
     steps:
@@ -32,7 +32,7 @@
     - name: zbuff test
       run: |
         make -C tests test-zbuff
-        
+
   tsan:
     runs-on: ubuntu-16.04
     steps:
@@ -53,7 +53,7 @@
         make gpp6install valgrindinstall
         make -C zlibWrapper test
         make -C zlibWrapper valgrindTest
-  
+
   lz4-threadpool-partial-libs:
     runs-on: ubuntu-16.04
     steps:
@@ -62,6 +62,7 @@
       run: |
         make lz4install
         make -C tests test-lz4
+        make check < /dev/null | tee   # mess with lz4 console detection
         make clean
         make -C tests test-pool
         make clean
diff --git a/.travis.yml b/.travis.yml
index 8498e0e..226d4c0 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -216,11 +216,12 @@
         - make -C zlibWrapper test
         - make -C zlibWrapper valgrindTest
 
-    - name: LZ4, thread pool, and partial libs tests    # ~2mn
+    - name: LZ4, thread pool, and partial libs tests    # ~4mn
       if: branch = master
       script:
         - make lz4install
         - make -C tests test-lz4
+        - make check < /dev/null | tee    # mess with lz4 console detection
         - make clean
         - make -C tests test-pool
         - make clean
diff --git a/lib/dictBuilder/cover.c b/lib/dictBuilder/cover.c
index bd9dd86..c78af13 100644
--- a/lib/dictBuilder/cover.c
+++ b/lib/dictBuilder/cover.c
@@ -955,7 +955,7 @@
   free(selection.dictContent);
 }
 
-COVER_dictSelection_t COVER_selectDict(BYTE* customDictContent,
+COVER_dictSelection_t COVER_selectDict(BYTE* customDictContent, size_t dictBufferCapacity,
         size_t dictContentSize, const BYTE* samplesBuffer, const size_t* samplesSizes, unsigned nbFinalizeSamples,
         size_t nbCheckSamples, size_t nbSamples, ZDICT_cover_params_t params, size_t* offsets, size_t totalCompressedSize) {
 
@@ -963,8 +963,8 @@
   size_t largestCompressed = 0;
   BYTE* customDictContentEnd = customDictContent + dictContentSize;
 
-  BYTE * largestDictbuffer = (BYTE *)malloc(dictContentSize);
-  BYTE * candidateDictBuffer = (BYTE *)malloc(dictContentSize);
+  BYTE * largestDictbuffer = (BYTE *)malloc(dictBufferCapacity);
+  BYTE * candidateDictBuffer = (BYTE *)malloc(dictBufferCapacity);
   double regressionTolerance = ((double)params.shrinkDictMaxRegression / 100.0) + 1.00;
 
   if (!largestDictbuffer || !candidateDictBuffer) {
@@ -976,7 +976,7 @@
   /* Initial dictionary size and compressed size */
   memcpy(largestDictbuffer, customDictContent, dictContentSize);
   dictContentSize = ZDICT_finalizeDictionary(
-    largestDictbuffer, dictContentSize, customDictContent, dictContentSize,
+    largestDictbuffer, dictBufferCapacity, customDictContent, dictContentSize,
     samplesBuffer, samplesSizes, nbFinalizeSamples, params.zParams);
 
   if (ZDICT_isError(dictContentSize)) {
@@ -1010,7 +1010,7 @@
   while (dictContentSize < largestDict) {
     memcpy(candidateDictBuffer, largestDictbuffer, largestDict);
     dictContentSize = ZDICT_finalizeDictionary(
-      candidateDictBuffer, dictContentSize, customDictContentEnd - dictContentSize, dictContentSize,
+      candidateDictBuffer, dictBufferCapacity, customDictContentEnd - dictContentSize, dictContentSize,
       samplesBuffer, samplesSizes, nbFinalizeSamples, params.zParams);
 
     if (ZDICT_isError(dictContentSize)) {
@@ -1088,7 +1088,7 @@
   {
     const size_t tail = COVER_buildDictionary(ctx, freqs, &activeDmers, dict,
                                               dictBufferCapacity, parameters);
-    selection = COVER_selectDict(dict + tail, dictBufferCapacity - tail,
+    selection = COVER_selectDict(dict + tail, dictBufferCapacity, dictBufferCapacity - tail,
         ctx->samples, ctx->samplesSizes, (unsigned)ctx->nbTrainSamples, ctx->nbTrainSamples, ctx->nbSamples, parameters, ctx->offsets,
         totalCompressedSize);
 
diff --git a/lib/dictBuilder/cover.h b/lib/dictBuilder/cover.h
index f2aa0e3..9f1cb5f 100644
--- a/lib/dictBuilder/cover.h
+++ b/lib/dictBuilder/cover.h
@@ -152,6 +152,6 @@
  * smallest dictionary within a specified regression of the compressed size
  * from the largest dictionary.
  */
- COVER_dictSelection_t COVER_selectDict(BYTE* customDictContent,
+ COVER_dictSelection_t COVER_selectDict(BYTE* customDictContent, size_t dictBufferCapacity,
                        size_t dictContentSize, const BYTE* samplesBuffer, const size_t* samplesSizes, unsigned nbFinalizeSamples,
                        size_t nbCheckSamples, size_t nbSamples, ZDICT_cover_params_t params, size_t* offsets, size_t totalCompressedSize);
diff --git a/lib/dictBuilder/fastcover.c b/lib/dictBuilder/fastcover.c
index 8265e2c..5e60f24 100644
--- a/lib/dictBuilder/fastcover.c
+++ b/lib/dictBuilder/fastcover.c
@@ -487,7 +487,7 @@
                                                     parameters, segmentFreqs);
 
     const unsigned nbFinalizeSamples = (unsigned)(ctx->nbTrainSamples * ctx->accelParams.finalize / 100);
-    selection = COVER_selectDict(dict + tail, dictBufferCapacity - tail,
+    selection = COVER_selectDict(dict + tail, dictBufferCapacity, dictBufferCapacity - tail,
          ctx->samples, ctx->samplesSizes, nbFinalizeSamples, ctx->nbTrainSamples, ctx->nbSamples, parameters, ctx->offsets,
          totalCompressedSize);
 
diff --git a/programs/util.c b/programs/util.c
index 980ab5a..5386d00 100644
--- a/programs/util.c
+++ b/programs/util.c
@@ -788,7 +788,7 @@
     outDirBuffer = (char *) malloc(dir1Size + dir2Size + 2);
     CONTROL(outDirBuffer != NULL);
 
-    strncpy(outDirBuffer, dir1, dir1Size);
+    memcpy(outDirBuffer, dir1, dir1Size);
     outDirBuffer[dir1Size] = '\0';
 
     if (dir2[0] == '.')
@@ -800,7 +800,7 @@
         *buffer = PATH_SEP;
         buffer++;
     }
-    strncpy(buffer, dir2, dir2Size);
+    memcpy(buffer, dir2, dir2Size);
     buffer[dir2Size] = '\0';
 
     return outDirBuffer;
diff --git a/tests/playTests.sh b/tests/playTests.sh
index b0a5ffc..3f53b6a 100755
--- a/tests/playTests.sh
+++ b/tests/playTests.sh
@@ -1103,7 +1103,7 @@
         datagen > tmp
         zstd --format=lz4 -f tmp
         lz4 -t -v tmp.lz4
-        lz4 -f tmp
+        lz4 -f -m tmp   # ensure result is sent into tmp.lz4, not stdout
         zstd -d -f -v tmp.lz4
         rm tmp*
     else