Commit Graph

205 Commits

Author SHA1 Message Date
Alexey Tourbin
5603d30f81 lz4.c: fixed the LZ4_decompress_safe_continue case
The previous change broke decoding with a ring buffer.  That's because
I didn't realize that the "double dictionary mode" was possible, i.e.
that the decoding routine can look both at the first part of the
dictionary passed as prefix and the second part passed via dictStart+dictSize.

So this change introduces the LZ4_decompress_safe_doubleDict helper,
which handles this "double dictionary" situation.  (This is a bit of
a misnomer, there is only one dictionary, but I can't think of a better
name, and perhaps the designation is not all too bad.)  The helper is
used only once, in LZ4_decompress_safe_continue, it should be inlined
with LZ4_FORCE_O2_GCC_PPC64LE attached to LZ4_decompress_safe_continue.

(Also, in the helper functions, I change the dictStart parameter type
to "const void*", to avoid a cast when calling helpers.  In the helpers,
the upcast to "BYTE*" is still required, for compatibility with C++.)

So this fixes the case of LZ4_decompress_safe_continue, and I'm
surprised by the fact that the fuzzer is now happy and does not detect
a similar problem with LZ4_decompress_fast_continue.  So before fixing
LZ4_decompress_fast_continue, the next logical step is to enhance
the fuzzer.
2018-04-26 08:23:54 +03:00
W. Felix Handte
27c6eec18d Multiply-Include Header to Check Guard Macro Correctness 2018-04-24 18:50:03 -04:00
W. Felix Handte
2dfc7cbe82 Change Over Includes in the Project 2018-04-24 16:22:28 -04:00
Yann Collet
b2637ab7b2
Merge pull request #512 from lz4/HC_dict
In-place unmutable dictionaries for LZ4HC
2018-04-24 13:18:40 -07:00
W. Felix Handte
db9deb7b74 Remove the Framebench Tool 2018-04-24 11:58:51 -04:00
Cyan4973
bd06fde104 fullbench compiled without assert()
to better reflect release speed
2018-04-23 15:42:27 -07:00
Nick Terrell
672799e814 Fix compilation error and assert. 2018-04-23 14:21:02 -07:00
Nick Terrell
bb83cad98f Fix input size validation edge cases
The bug is a read up to 2 bytes past the end of the buffer.
There are three cases for this bug, one for each test case added.

* An empty input causes `token = *ip++` to read one byte too far.
* A one byte input with `(token >> ML_BITS) == RUN_MASK` causes
  one extra byte to be read without validation. This could be
  combined with the first bug to cause 2 extra bytes to be read.
* The case pointed out in issue #508, where `ip == iend` at the
  beginning of the loop after taking the shortcut.

Benchmarks show no regressions on clang or gcc-7 on both my mac
and devserver.

Fixes #508.
2018-04-23 13:34:18 -07:00
W. Felix Handte
209c9c29d1 Add Some Simple Fuzzer Tests 2018-04-20 15:16:41 -04:00
W. Felix Handte
e0d8add791 Fix Framebench Output Buffer Sizing 2018-04-19 20:45:48 -04:00
W. Felix Handte
9dae661b1f Fix Cast 2018-04-19 20:45:48 -04:00
W. Felix Handte
f646c512e9 Print Failure Message in Framebench 2018-04-19 20:45:48 -04:00
W. Felix Handte
9d971fd5c3 Switch to Unaligned Samples to Compress Different Blobs Each Time 2018-04-19 20:45:47 -04:00
W. Felix Handte
66f0c29aa4 Fix Framebench Statistics 2018-04-19 20:45:47 -04:00
W. Felix Handte
09df7a05f9 Add Run Name to Frame Bench Output 2018-04-19 20:45:47 -04:00
W. Felix Handte
a9a62321ff Auto-Calculate Appropriate Repetition Count 2018-04-19 20:45:47 -04:00
W. Felix Handte
d4ee7554fc Print More Detailed Results Inside bench(), Add Compression Levels 2018-04-19 20:45:47 -04:00
W. Felix Handte
ffb2d8b0ed Check Compressed Buffer is Correct in Frame Bench 2018-04-19 20:45:47 -04:00
W. Felix Handte
0bc13ab69c Add HC Calls to Framebench 2018-04-19 20:45:47 -04:00
W. Felix Handte
b9836b2a03 Restore Framebench Tool
This reverts commit 70f14823a4.
2018-04-19 20:45:47 -04:00
Yann Collet
444211d259 edited a few traces for debugging 2018-04-16 17:16:08 -07:00
Yann Collet
4aff9b10b5 fixed fuzzer tests
which were modified in parallel within branc `dev`
2018-04-16 16:14:28 -07:00
Yann Collet
b5528ac86c Merge branch 'dev' into lowAddr 2018-04-16 16:12:38 -07:00
W. Felix Handte
9f0f6b89bb Further Test that ExtDictCtx Mode Produces the Exact Same Output 2018-04-13 11:50:52 -04:00
W. Felix Handte
6dd64e0776 Add Tests for LZ4_attach_dictionary and Friends 2018-04-13 11:50:52 -04:00
test4973
8af32ce6f7 modified a few traces for debug 2018-04-12 13:35:19 -07:00
Yann Collet
ca388790e6 allow system-defined CPPFLAGS in /tests 2018-04-11 16:41:25 -07:00
Yann Collet
7b3cd10579 reduced test time on circle-ci 2018-04-11 16:31:43 -07:00
test4973
ad7e040384 fix minor conversion warning
cast from void not implicit for C++
2018-04-09 20:38:00 -07:00
test4973
f9992fa37f noticed a bug when re-using hash table
./fuzzer -vv -s4217 -t7518
2018-04-05 19:09:24 -07:00
test4973
6d931b6a93 fixed lz4 compression starting at small address
when using byU32 and byU16 modes
2018-04-05 12:40:33 -07:00
test4973
43132af808 Merge branch 'dev' into lowAddr 2018-04-04 11:38:55 -07:00
W. Felix Handte
ebdcbc359b Add Dependency to Fix Parallel make test Runs
When run with `-jN`, the `rm tmp*` can run in the middle of the `test-lz4-dict`
job, which will then fail, finding its files to have been axed. This adds a
dependency between the two.
2018-03-21 11:31:22 -04:00
test4973
c3f0ed28ff added low address fuzzer tests 2018-03-21 07:14:13 -07:00
W. Felix Handte
70f14823a4 Remove Framebench Tool 2018-03-14 15:59:36 -04:00
W. Felix Handte
c4aef7cd62 Restore checkTag Cleaning 2018-03-13 15:18:08 -04:00
W. Felix Handte
f9fef255a1 Renames and Comment Fixes 2018-03-12 18:34:41 -04:00
W. Felix Handte
9dcd9abc14 Make LZ4F_compressFrame_usingCDict Take a Compression Context 2018-03-12 14:58:43 -04:00
W. Felix Handte
b3628cb0c5 Avoid Resetting the Context When Possible 2018-03-12 14:58:43 -04:00
W. Felix Handte
f34fb3c42d Add Bounds Check to locateBuffDiff 2018-03-12 14:58:43 -04:00
W. Felix Handte
8c006b19bb Add a Benchmarking Tool For Compression with Context Re-Use 2018-03-12 14:58:43 -04:00
Yann Collet
0ddd1ceb1d added target make check
according to GNU Makefile conventions,
the Makefile should feature a make check target
to self-test the generated program:
https://www.gnu.org/prep/standards/html_node/Standard-Targets.html .

this is much less thorough and less taxing than `make test`,
and can be run on any target in a reasonable timeframe (several seconds).
2018-02-26 14:09:46 -08:00
Yann Collet
20e969e579 fuzzer: added low address compression test
is expected to work on linux+gcc only.
2018-02-05 15:19:00 -08:00
Yann Collet
b077a99347 added checkTag
checkTag verifies that provided tag and library version match.
It's started automatically in circleCI when a new tag is created.
2018-01-14 16:57:25 -08:00
Yann Collet
e2900241e8 object files in /tests
object files created from /tests are compiled with specific flags (`-g -DLZ4_DEBUG=1`)
which are not welcomed in release binary.
`lib/*.o` files created from /tests are now stored in /tests, to avoid unintentional mix.
2017-12-27 13:02:40 +01:00
Yann Collet
7d2f30c7d1 lz4opt supports _destSize
no longer limited to level 9
2017-12-22 12:47:59 +01:00
Yann Collet
fdde4311fb /tests programs compiled with LZ4_DEBUG=1
to enable assert() within /lib
2017-12-22 11:54:43 +01:00
Yann Collet
1025546347 unified HC levels
LZ4_setCompressionLevel() can be users accross the whole range of HC levels
No more transition issue between Optimal and HC modes
2017-11-03 11:28:28 -07:00
W. Felix Handte
93f8284c17 Add some tests verifying command line dictionary functionality 2017-10-09 20:18:03 -04:00
Yann Collet
2ed3612477 removed test-fasttest 2017-08-24 18:30:00 -07:00
Yann Collet
c04655bebf fixed make recurrence from /tests 2017-08-24 17:58:13 -07:00
Yann Collet
517dd95d92 removed fasttest 2017-08-24 17:03:03 -07:00
Yann Collet
82ccdec2fb minor : added header license 2017-08-24 16:59:47 -07:00
Yann Collet
5637d8856f make test is compatible with parallel execution (-j#)
each test section runs with its own set of files
2017-08-21 15:26:03 -07:00
Yann Collet
930a692110 cli : restored command -BX to enable block checksum (#322) 2017-08-11 17:58:46 -07:00
Yann Collet
77f99d2922 restored block checksum capability at lz4frame API level 2017-08-11 17:46:52 -07:00
Yann Collet
757497ae3d implemented lz4frame decompression API 2017-08-10 16:53:57 -07:00
Yann Collet
4531637ecd support dictionary compression with independent blocks 2017-08-10 12:12:53 -07:00
Yann Collet
d8aafe2c52 dictionary compression correctly uses compression level
Not obvious : copying the state was copying cdict's compression level
2017-08-10 00:48:19 -07:00
Yann Collet
31f2cdf4d2 implemented dictionary compression in lz4frame
note : only compression API is implemented and tested
still to do : decompression API
2017-08-09 16:51:19 -07:00
Yann Collet
a82dadfbae added dictID inside LZ4F_frameInfo_t
Compressor can set dictID on LZ4F_compressBegin()
Decompressor can retrieve it using LZ4F_getFrameInfo()
2017-08-08 17:43:11 -07:00
Jussi Kukkonen
e14b4c5a3e tests/Makefile: don't use LIBDIR as variable
LIBDIR may be overriden with a environment variable: In this case make
clean breaks in tests/. Use another variable name.
2017-06-26 13:32:40 +03:00
Yann Collet
d18084c655 report where decompression ends (#313)
suggested by @ehem
note : only works for files < 2 GB
2017-06-12 15:47:43 -07:00
Yann Collet
2600a154be fix (minor) g++ compatibility for frametest 2017-05-10 17:06:31 -07:00
Yann Collet
e60cbb5cac added test for LZ4F_resetDecompressionContext() 2017-05-10 16:28:36 -07:00
Yann Collet
2012e4de9e fixed c_standards tests
and added entry "make list"
2017-05-10 14:51:09 -07:00
Yann Collet
e2c9b19122 lz4frame : Added negative compression levels 2017-04-09 01:41:36 -07:00
Yann Collet
fc31257ab2 added LZ4F_resetDecompressionContext() 2017-03-28 17:36:12 -07:00
Yann Collet
f0a7651fce Safer LZ4_getFrameInfo()
LZ4_getFrameInfo() is now guaranteed to keep dctx state clean,
even in case of failure.
2017-03-28 17:10:01 -07:00
Dmitry V. Levin
b1daffc4e5 cli: add GNU separator -- specifying that all following arguments are files
This option is supported by other compressors with compatible cli,
so add it to lz4 as well for better compatibility.
2017-03-23 03:48:51 +00:00
Yann Collet
0d073d4d28 added extern C for lz4.h static section
should make the file more compatible with C++ compiler, such as Visual or g++
2017-03-17 15:11:09 -07:00
Yann Collet
aae447fffd LZ4_compress_HC_continue_destSize() works as intended up to level 10
It's incompatible with btopt though,
so cLevel >= 11 feature much reduced performance (degraded mode)
2017-03-16 15:41:30 -07:00
Yann Collet
cd35f0d98c LZ4_compress_HC_destSize() uses LZ4HC_compress_generic() code path
Limits compression level to 10,
to remain compatible with Hash Chain.
2017-03-16 15:10:38 -07:00
Yann Collet
430b7d32b3 created LZ4_HC_STATIC_LINKING_ONLY section
where are exposed new prototypes *_destSize()
2017-03-16 02:16:24 -07:00
remittor
66b26a389f tests: fuzzer: Add test for LZ4_compressHC_destSize 2017-03-08 11:13:28 +03:00
Dmitry V. Levin
0dfb0b9dad Fix test-lz4-basic
When no output filename is specified and stdout is not a terminal,
lz4 doesn't attempt to guess an output filename and uses stdout for
output.

This change fixes test-lz4-basic when run without a terminal
by specifying output filenames.
2017-03-05 23:28:25 +00:00
Przemyslaw Skibinski
d3eaf78838 remove MOREFLAGS from test-lz4c32 2017-02-16 16:30:16 +01:00
Przemyslaw Skibinski
ace22424d8 circle.yml: fixed lz4c32 target (2) 2017-02-15 23:19:30 +01:00
Przemyslaw Skibinski
0d77c85d9d circle.yml: fixed lz4c32 target 2017-02-15 22:10:11 +01:00
Przemyslaw Skibinski
4ee9bd5c3e improved Circle CI tests 2017-02-15 18:24:42 +01:00
Eric Siegerman
b89cac7b2e Don't use "foo && false || true"
Replace it with either:
    test ! -f $FILE_THAT_SHOULD_NOT_EXIST
or:
    ! $COMMAND_THAT_SHOULD_FAIL

as appropriate.
2017-02-14 14:17:06 -05:00
Przemyslaw Skibinski
c139eb40b0 added OpenBSD NetBSD SunOS to list of supported make install OSes 2017-02-10 15:00:27 +01:00
Przemyslaw Skibinski
489d1618c9 added "This Makefile is validated for" 2017-01-19 16:28:08 +01:00
Przemyslaw Skibinski
d2b51c22d3 fuzzer: tests more compression levels 2016-12-28 17:47:10 +01:00
Przemyslaw Skibinski
1c80b9af4e LZ4HC_getSearchNum 2016-12-28 15:18:19 +01:00
Przemyslaw Skibinski
c8b31263cc added FUZ_CLEVEL_DEFAULT 2016-12-28 13:08:38 +01:00
Przemyslaw Skibinski
a3d61cf3df improved test-lz4-opt-parser 2016-12-27 15:38:07 +01:00
Przemyslaw Skibinski
f4575f4f14 added test-lz4-opt-parser 2016-12-27 13:14:04 +01:00
Przemyslaw Skibinski
efaa9b7bc7 Merge remote-tracking branch 'refs/remotes/lz4/dev' into dev
# Conflicts:
#	lib/Makefile
2016-12-27 10:43:07 +01:00
Przemyslaw Skibinski
ea51ad0cee Solaris: working "make install" 2016-12-23 00:02:01 +01:00
Przemyslaw Skibinski
9b4b081c15 "make test" is now compatible with Solaris 2016-12-22 17:18:39 +01:00
Yann Collet
b41f9bb132 Merge pull request #292 from inikep/dev
improved POSIX
2016-12-22 11:58:29 +01:00
Przemyslaw Skibinski
f084b65383 test Large File support for Mac OS-X in 32-bits mode 2016-12-21 17:13:38 +01:00
Przemyslaw Skibinski
973bc79740 util.h and platform.h based on zstd 2016-12-21 16:10:09 +01:00
Yann Collet
7cf0bb97b2 LZ4F_compressBound(0) provides upper bound for LZ4F_flush() and LZ4F_compressEnd() [#290, suggested by @vtermanis] 2016-12-21 14:18:01 +01:00
Przemyslaw Skibinski
3c6ce9c665 fixed gcc 4.4 support 2016-12-21 10:39:27 +01:00
Przemyslaw Skibinski
64cbc4e1dc improved MinGW support 2016-12-21 10:22:40 +01:00
Przemyslaw Skibinski
9546ba62d0 executables use basic types from util.h 2016-12-21 09:44:59 +01:00
Przemyslaw Skibinski
2cfef13952 executables use platform.h 2016-12-20 18:05:43 +01:00
Yann Collet
de93e9e5d8 fix #285 : lz4cat doesn't work with stdin (reported by @beiDei8z) 2016-12-08 14:25:04 -08:00