Uh oh!
There was an error while loading. Please reload this page.
Use ptrdiff_t instead of ssize_t - #10
Conversation
9f35817 to
56be909Comparebenvanik
commented
Jan 19, 2016
Poke poke owners - can this be merged? |
sesse
commented
Jan 19, 2016
Hi, In general, if your platform doesn't support a given type, that's the role of config.h to fix, not the code itself. MSVC has its own nonstandard type SSIZE_T which works well for this purpose; just add a typedef to your config.h. |
jibsen
commented
Jan 19, 2016
Personally, I think using a type not in the C standard when there is a suitable type present, is needlessly limiting the portability of code. But at least there is a config.h to work around it. Also, strictly speaking |
The commit 8bfb028 (Improve zippy decompression speed) introduce a crash when snappy is compiled with _FORTIFY_SOURCE with musl libc. Backtrace reveals that it it comes from using memcpy with overlap, which is undefined behavior. We avoid the undefined behavior due to memcpy with overlap by using a temporary uint64_t. Bactrace from core dump created with `make check`: ```` (gdb) bt #0 memcpy (__n=8, __os=0xb38c8367eea, __od=0xb38c8367eeb) at /usr/include/fortify/string.h:48 google#1 snappy::(anonymous namespace)::UnalignedCopy64 (src=0xb38c8367eea, dst=0xb38c8367eeb) at snappy.cc:92 google#2 0x00006fb4c7c31717 in snappy::(anonymous namespace)::IncrementalCopy ( buf_limit=0xb38c8380ee0 "", op_limit=<optimized out>, op=<optimized out>, src=0xb38c8367eea " .\001") at snappy.cc:178 google#3 snappy::SnappyArrayWriter::AppendFromSelf (len=<optimized out>, offset=<optimized out>, this=<synthetic pointer>) at snappy.cc:1131 google#4 snappy::SnappyDecompressor::DecompressAllTags<snappy::SnappyArrayWriter> ( writer=<synthetic pointer>, this=0x7f1d26737050) at snappy.cc:715 google#5 snappy::InternalUncompressAllTags<snappy::SnappyArrayWriter> ( uncompressed_len=<optimized out>, writer=<synthetic pointer>, decompressor=0x7f1d26737050) at snappy.cc:799 google#6 snappy::InternalUncompress<snappy::SnappyArrayWriter> ( writer=<synthetic pointer>, r=0x7f1d26737000) at snappy.cc:789 google#7 snappy::RawUncompress (compressed=compressed@entry=0x7f1d267370c0, uncompressed=0xb38c8367ee0 " content: .\001") at snappy.cc:1149 google#8 0x00006fb4c7c3194d in snappy::RawUncompress (compressed=<optimized out>, n=<optimized out>, uncompressed=<optimized out>) at snappy.cc:1144 google#9 0x00000b38c5c6261a in snappy::BM_UFlat (iters=99, arg=<optimized out>) at snappy_unittest.cc:1371 google#10 0x00000b38c5c69846 in snappy::Benchmark::Run (this=0xb38c8323c40) at snappy-test.cc:192 google#11 0x00000b38c5c5f3fd in RunSpecifiedBenchmarks () at snappy-test.h:485 google#12 main (argc=1, argv=0x7f1d267374b8) at snappy_unittest.cc:1515 ```` Signed-off-by: Natanael Copa <natanael.copa@docker.com>
The compression code seems pretty standard compliant, except for the two places ssize_t (POSIX) is used.
Using ptrdiff_t should allow the snappy plugin for squash to compile with MSVC. See quixdb/squash#145.