google / snappy Goto Github PK
View Code? Open in Web Editor NEWA fast compressor/decompressor
Home Page: https://github.com/google/snappy
License: Other
A fast compressor/decompressor
Home Page: https://github.com/google/snappy
License: Other
std::less_equal is defined in functional which is missing from snappy.cc
I found this PR: #172. Why hasn't it been merged?
That's my error message:
[build] E:\work_e\others\snappy\snappy.cc(1233): error C2039: “less_equal”: 不是“std”的成员 [E:\work_e\others\snappy\build\snappy.vcxproj]
[build] C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\vector(17): note: 参见“std”的声明
[build] E:\work_e\others\snappy\snappy.cc(1233): error C2065: “less_equal”: 未声明的标识符 [E:\work_e\others\snappy\build\snappy.vcxproj]
[build] E:\work_e\others\snappy\snappy.cc(1233): error C2059: 语法错误:“const” [E:\work_e\others\snappy\build\snappy.vcxproj]
We have Apache Arrow set up on OSS-Fuzz. Arrow can optionally use Snappy to read Parquet files, but unfortunately Snappy cannot be enabled on some OSS-Fuzz builders because of incompatible compiler options.
See attempted CI run here:
https://github.com/google/oss-fuzz/actions/runs/10306444556/job/28529568675
and in particular these errors:
[1/5] Building CXX object CMakeFiles/snappy.dir/snappy-sinksource.cc.o
FAILED: CMakeFiles/snappy.dir/snappy-sinksource.cc.o
/usr/local/bin/clang++ -DHAVE_CONFIG_H -I/work/snappy_ep-prefix/src/snappy_ep -O1 -fno-omit-frame-pointer -gline-tables-only -Wno-error=enum-constexpr-conversion -Wno-error=incompatible-function-pointer-types -Wno-error=int-conversion -Wno-error=deprecated-declarations -Wno-error=implicit-function-declaration -Wno-error=implicit-int -DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION -fsanitize=array-bounds,bool,builtin,enum,function,integer-divide-by-zero,null,object-size,return,returns-nonnull-attribute,shift,signed-integer-overflow,unsigned-integer-overflow,unreachable,vla-bound,vptr -fno-sanitize-recover=array-bounds,bool,builtin,enum,function,integer-divide-by-zero,null,object-size,return,returns-nonnull-attribute,shift,signed-integer-overflow,unreachable,vla-bound,vptr -fsanitize=fuzzer-no-link -stdlib=libc++ -Qunused-arguments -fcolor-diagnostics -fPIC -Wall -Wextra -Werror -fno-exceptions -fno-rtti -O2 -g -DNDEBUG -ggdb -Wno-error -std=gnu++17 -MD -MT CMakeFiles/snappy.dir/snappy-sinksource.cc.o -MF CMakeFiles/snappy.dir/snappy-sinksource.cc.o.d -o CMakeFiles/snappy.dir/snappy-sinksource.cc.o -c /work/snappy_ep-prefix/src/snappy_ep/snappy-sinksource.cc
clang++: error: invalid argument '-fsanitize=vptr' not allowed with '-fno-rtti'
[etc.]
It would be nice if Snappy didn't force -fno-rtti
unconditionally.
Thank you for opening the issue tracker!
MacPorts recently updated to snappy 1.2.0 and @justinbb reported to us today that snappy 1.2.0 removes a symbol which existed in 1.1.10. The user discovered this by trying to run qgis3
after updating snappy to 1.2.0:
Symbol not found: __ZN6snappy11RawCompressEPKcmPcPm
Referenced from: <6B4C63E9-F153-35F2-B6E3-9B70D5205EB7> /opt/local/lib/libleveldb.1.23.0.dylib
Expected in: <21F5B8CD-DE83-3E89-BC9F-C6F6CD66E239> /opt/local/lib/libsnappy.1.1.10.dylib
The versioning of libsnappy from snappy 1.2.0 on macOS as installed by MacPorts was:
% otool -L /opt/local/lib/libsnappy.1.dylib
/opt/local/lib/libsnappy.1.dylib:
/opt/local/lib/libsnappy.1.dylib (compatibility version 1.0.0, current version 1.1.10)
/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 1200.3.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1311.0.0)
The library current version of 1.1.10
was a mistake corrected in #178. After applying that fix, the versioning is now:
% otool -L /opt/local/lib/libsnappy.1.dylib
/opt/local/lib/libsnappy.1.dylib:
/opt/local/lib/libsnappy.1.dylib (compatibility version 1.0.0, current version 1.2.0)
/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 1200.3.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1311.0.0)
Translating, this means that you are providing minor version 1.2.0 of major version 1 of libsnappy and it claims it is backward compatible with all minor versions of major version 1 of the library back to version 1.0.0. In other words, if I compiled a program against libsnappy major version 1 minor version 1.0.0, that program should still work if the runtime version of libsnappy is major version 1 minor version 1.2.0. But the failure to launch qgis3
due to the removed symbol shows that claim is not accurate.
Isn't it customary that removing a public symbol from a library would be accompanied by increasing its major version? In other words, snappy 1.2.0 should have included libsnappy.2.dylib not libsnappy.1.dylib. This would have clearly communicated (via a message that libsnappy.1.dylib could not be found when opening a program linking with that library) that everything linking with the library needed to be rebuilt to remove any references to the removed symbol(s).
Caveat: if __ZN6snappy11RawCompressEPKcmPcPm
was a private symbol that nobody should have been using, then the above does not apply and the fault would lie with whoever used your private symbol and should be solved by them not using that private symbol.
The problem is also mentioned at apache/arrow#41058 which refers to conda-forge/snappy-feedstock#35 which points the blame for the ABI break on 766d24c.
As an alternative to increasing the major library version to indicate the compatibility break, you could reinstate the removed symbol to restore compatibility and avoid the need to increase the major library version; if possible, this would be the least disruptive solution.
At least 2 depending projects fail with snappy-1.2.1:
The snzip-1.0.5 project fails:
c++ -O2 -pipe -fstack-protector-strong -fno-strict-aliasing -Wall -I/usr/local/include -fstack-protector-strong -L/usr/local/lib -o snzip snzip.o snzip-format.o framing-format.o framing2-format.o hadoop-snappy-format.o iwa-format.o snappy-java-format.o snappy-in-java-format.o comment-43-format.o crc32.o raw_format.o crc32_sse4_2.o -lsnappy
ld: error: undefined symbol: typeinfo for snappy::Source
>>> referenced by raw_format.cpp
>>> raw_format.o:(typeinfo for snzip::FileSource)
>>> did you mean: vtable for snappy::Source
>>> defined in: /usr/local/lib/libsnappy.so
And the proxygen-2024.05.20.00 project fails:
ld: error: /usr/local/lib/libfolly.so.0.58.0-dev: undefined reference to typeinfo for snappy::Source [--no-allow-shlib-undefined]
Within "main/snappy/testdata/urls.10K". I have identified ~23 instances of the offending URLs (adult content) on lines 323, 493, 1484, 1485, 1637, 1741, 2874, 3128, 4090, 4858, 5145, 6418, 6470, 7131, 7319, 7337, 7683, 7838, 8741, 8834, 9134, 9779, 9837
. There could be a possibility of more instances of the inappropriate content but I haven't stumbled upon them.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.