react-native-quick-crypto 1.0.18 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/QuickCrypto.podspec +12 -38
- package/README.md +2 -0
- package/android/CMakeLists.txt +3 -0
- package/cpp/utils/HybridUtils.cpp +39 -77
- package/deps/simdutf/.clang-format +4 -0
- package/deps/simdutf/.github/ISSUE_TEMPLATE/bug_report.md +62 -0
- package/deps/simdutf/.github/ISSUE_TEMPLATE/config.yml +1 -0
- package/deps/simdutf/.github/ISSUE_TEMPLATE/feature_request.md +35 -0
- package/deps/simdutf/.github/ISSUE_TEMPLATE/standard-issue-template.md +29 -0
- package/deps/simdutf/.github/pull_request_template.md +51 -0
- package/deps/simdutf/.github/workflows/aarch64.yml +39 -0
- package/deps/simdutf/.github/workflows/alpine.yml +27 -0
- package/deps/simdutf/.github/workflows/amalgamation_demos.yml +34 -0
- package/deps/simdutf/.github/workflows/armv7.yml +32 -0
- package/deps/simdutf/.github/workflows/atomic_fuzz.yml +25 -0
- package/deps/simdutf/.github/workflows/cifuzz.yml +37 -0
- package/deps/simdutf/.github/workflows/clangformat.yml +36 -0
- package/deps/simdutf/.github/workflows/debian-latestcxxstandards.yml +40 -0
- package/deps/simdutf/.github/workflows/debian.yml +33 -0
- package/deps/simdutf/.github/workflows/documentation.yml +36 -0
- package/deps/simdutf/.github/workflows/emscripten.yml +19 -0
- package/deps/simdutf/.github/workflows/loongarch64-gcc-14.2.yml +39 -0
- package/deps/simdutf/.github/workflows/macos-latest.yml +29 -0
- package/deps/simdutf/.github/workflows/msys2-clang.yml +48 -0
- package/deps/simdutf/.github/workflows/msys2.yml +50 -0
- package/deps/simdutf/.github/workflows/ppc64le.yml +29 -0
- package/deps/simdutf/.github/workflows/rvv-1024-clang-18.yml +35 -0
- package/deps/simdutf/.github/workflows/rvv-128-clang-17.yml +35 -0
- package/deps/simdutf/.github/workflows/rvv-256-gcc-14.yml +31 -0
- package/deps/simdutf/.github/workflows/s390x.yml +29 -0
- package/deps/simdutf/.github/workflows/selective-amalgamation.yml +29 -0
- package/deps/simdutf/.github/workflows/typos.yml +19 -0
- package/deps/simdutf/.github/workflows/ubuntu22-cxx20.yml +30 -0
- package/deps/simdutf/.github/workflows/ubuntu22.yml +32 -0
- package/deps/simdutf/.github/workflows/ubuntu22_gcc12.yml +27 -0
- package/deps/simdutf/.github/workflows/ubuntu22sani.yml +29 -0
- package/deps/simdutf/.github/workflows/ubuntu24-cxxstandards.yml +34 -0
- package/deps/simdutf/.github/workflows/ubuntu24-unsignedchar.yml +34 -0
- package/deps/simdutf/.github/workflows/ubuntu24.yml +32 -0
- package/deps/simdutf/.github/workflows/ubuntu24sani.yml +36 -0
- package/deps/simdutf/.github/workflows/ubuntu24sani_clang.yml +29 -0
- package/deps/simdutf/.github/workflows/vs17-arm-ci.yml +21 -0
- package/deps/simdutf/.github/workflows/vs17-ci-cxx20.yml +41 -0
- package/deps/simdutf/.github/workflows/vs17-ci.yml +41 -0
- package/deps/simdutf/.github/workflows/vs17-clang-ci.yml +41 -0
- package/deps/simdutf/.github/workflows/vs17-cxxstandards.yml +36 -0
- package/deps/simdutf/AI_USAGE_POLICY.md +56 -0
- package/deps/simdutf/AUTHORS +6 -0
- package/deps/simdutf/CMakeLists.txt +231 -0
- package/deps/simdutf/CONTRIBUTING.md +214 -0
- package/deps/simdutf/CONTRIBUTORS +1 -0
- package/deps/simdutf/Doxyfile +2584 -0
- package/deps/simdutf/LICENSE-APACHE +201 -0
- package/deps/simdutf/LICENSE-MIT +18 -0
- package/deps/simdutf/Makefile.crosscompile +54 -0
- package/deps/simdutf/README-RVV.md +16 -0
- package/deps/simdutf/README.md +2782 -0
- package/deps/simdutf/SECURITY.md +8 -0
- package/deps/simdutf/benchmarks/CMakeLists.txt +101 -0
- package/deps/simdutf/benchmarks/alignment.cpp +150 -0
- package/deps/simdutf/benchmarks/base64/CMakeLists.txt +30 -0
- package/deps/simdutf/benchmarks/base64/benchmark_base64.cpp +875 -0
- package/deps/simdutf/benchmarks/base64/libbase64_spaces.h +49 -0
- package/deps/simdutf/benchmarks/base64/node_base64.h +227 -0
- package/deps/simdutf/benchmarks/base64/openssl3_base64.h +334 -0
- package/deps/simdutf/benchmarks/benchmark.cpp +65 -0
- package/deps/simdutf/benchmarks/benchmark_to_well_formed_utf16.cpp +347 -0
- package/deps/simdutf/benchmarks/competition/.clang-format-ignore +5 -0
- package/deps/simdutf/benchmarks/competition/CppCon2018/utf_utils.cpp +1276 -0
- package/deps/simdutf/benchmarks/competition/CppCon2018/utf_utils.h +595 -0
- package/deps/simdutf/benchmarks/competition/README.md +7 -0
- package/deps/simdutf/benchmarks/competition/hoehrmann/hoehrmann.h +91 -0
- package/deps/simdutf/benchmarks/competition/inoue2008/inoue_utf8_to_utf16.h +444 -0
- package/deps/simdutf/benchmarks/competition/inoue2008/inoue_utf8_to_utf16_tables.h +13183 -0
- package/deps/simdutf/benchmarks/competition/inoue2008/script.py +73 -0
- package/deps/simdutf/benchmarks/competition/llvm/ConvertUTF.cpp +738 -0
- package/deps/simdutf/benchmarks/competition/llvm/ConvertUTF.h +293 -0
- package/deps/simdutf/benchmarks/competition/u8u16/COPYRIGHT +8 -0
- package/deps/simdutf/benchmarks/competition/u8u16/Makefile +44 -0
- package/deps/simdutf/benchmarks/competition/u8u16/OSL3.0.txt +169 -0
- package/deps/simdutf/benchmarks/competition/u8u16/Profiling/BOM_Profiler.h +148 -0
- package/deps/simdutf/benchmarks/competition/u8u16/Profiling/i386_timer.h +45 -0
- package/deps/simdutf/benchmarks/competition/u8u16/Profiling/ppc_timer.c +34 -0
- package/deps/simdutf/benchmarks/competition/u8u16/README +56 -0
- package/deps/simdutf/benchmarks/competition/u8u16/config/config_defs.h +43 -0
- package/deps/simdutf/benchmarks/competition/u8u16/config/g4_config.h +27 -0
- package/deps/simdutf/benchmarks/competition/u8u16/config/mmx_config.h +16 -0
- package/deps/simdutf/benchmarks/competition/u8u16/config/p4_config.h +18 -0
- package/deps/simdutf/benchmarks/competition/u8u16/config/p4_ideal_config.h +16 -0
- package/deps/simdutf/benchmarks/competition/u8u16/config/spu_config.h +28 -0
- package/deps/simdutf/benchmarks/competition/u8u16/config/ssse3_config.h +20 -0
- package/deps/simdutf/benchmarks/competition/u8u16/iconv_u8u16.c +2 -0
- package/deps/simdutf/benchmarks/competition/u8u16/lib/altivec_simd.h +440 -0
- package/deps/simdutf/benchmarks/competition/u8u16/lib/libgen/make_basic_ops.py +121 -0
- package/deps/simdutf/benchmarks/competition/u8u16/lib/libgen/make_half_operand_versions.py +158 -0
- package/deps/simdutf/benchmarks/competition/u8u16/lib/libgen/make_test.py +270 -0
- package/deps/simdutf/benchmarks/competition/u8u16/lib/mmx_simd.h +141 -0
- package/deps/simdutf/benchmarks/competition/u8u16/lib/mmx_simd_basic.h +216 -0
- package/deps/simdutf/benchmarks/competition/u8u16/lib/mmx_simd_built_in.h +119 -0
- package/deps/simdutf/benchmarks/competition/u8u16/lib/mmx_simd_modified.h +2430 -0
- package/deps/simdutf/benchmarks/competition/u8u16/lib/outline.txt +39 -0
- package/deps/simdutf/benchmarks/competition/u8u16/lib/spu_simd.h +421 -0
- package/deps/simdutf/benchmarks/competition/u8u16/lib/sse_simd.h +836 -0
- package/deps/simdutf/benchmarks/competition/u8u16/lib/stdint.h +222 -0
- package/deps/simdutf/benchmarks/competition/u8u16/libu8u16_BE.c +4 -0
- package/deps/simdutf/benchmarks/competition/u8u16/libu8u16_LE.c +5 -0
- package/deps/simdutf/benchmarks/competition/u8u16/proto/u8u16.py +390 -0
- package/deps/simdutf/benchmarks/competition/u8u16/src/Makefile +18 -0
- package/deps/simdutf/benchmarks/competition/u8u16/src/bytelex.h +448 -0
- package/deps/simdutf/benchmarks/competition/u8u16/src/charsets/ASCII_EBCDIC.h +284 -0
- package/deps/simdutf/benchmarks/competition/u8u16/src/libu8u16.c +1975 -0
- package/deps/simdutf/benchmarks/competition/u8u16/src/libu8u16.pdf +0 -0
- package/deps/simdutf/benchmarks/competition/u8u16/src/libu8u16.w +2263 -0
- package/deps/simdutf/benchmarks/competition/u8u16/src/multiliteral.h +239 -0
- package/deps/simdutf/benchmarks/competition/u8u16/src/u8u16.c +232 -0
- package/deps/simdutf/benchmarks/competition/u8u16/src/x8x16.c +194 -0
- package/deps/simdutf/benchmarks/competition/u8u16/src/xml_error.c +193 -0
- package/deps/simdutf/benchmarks/competition/u8u16/src/xml_error.h +167 -0
- package/deps/simdutf/benchmarks/competition/u8u16/src/xmldecl.c +288 -0
- package/deps/simdutf/benchmarks/competition/u8u16/src/xmldecl.h +117 -0
- package/deps/simdutf/benchmarks/competition/u8u16/u8u16_g4.c +2 -0
- package/deps/simdutf/benchmarks/competition/u8u16/u8u16_mmx.c +2 -0
- package/deps/simdutf/benchmarks/competition/u8u16/u8u16_p4.c +3 -0
- package/deps/simdutf/benchmarks/competition/u8u16/u8u16_p4_ideal.c +2 -0
- package/deps/simdutf/benchmarks/competition/u8u16/u8u16_spu.c +2 -0
- package/deps/simdutf/benchmarks/competition/u8u16/u8u16_ssse3.c +3 -0
- package/deps/simdutf/benchmarks/competition/u8u16/x8x16_p4.c +2 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/LICENSE +23 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/data/test_minimal.txt +44 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/readme.md +106 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_clang_corr_tests.cmd +11 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_clang_corr_tests.sh +13 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_gcc_corr_tests.sh +13 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_gcc_example.sh +13 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_gcc_file_conv.sh +14 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_gcc_iconv_lib.sh +11 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_gcc_iconv_sample.sh +8 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_mingw_corr_tests.cmd +12 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_mingw_example.cmd +13 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_mingw_file_conv.cmd +14 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_mingw_iconv_lib.cmd +11 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_mingw_iconv_sample.cmd +8 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_msvc_corr_tests.cmd +11 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_msvc_example.cmd +12 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_msvc_file_conv.cmd +13 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_msvc_iconv_lib.cmd +10 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_msvc_iconv_sample.cmd +9 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/html_table.py +25 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/measure.py +94 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/resize.py +20 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/wipe_all.cmd +2 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/wipe_interm.cmd +1 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/base/CustomMemcpy.h +75 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/base/PerfDefs.h +47 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/base/Timing.cpp +17 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/base/Timing.h +76 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/buffer/AllProcessors.cpp +35 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/buffer/BaseBufferProcessor.cpp +117 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/buffer/BaseBufferProcessor.h +210 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/buffer/BufferDecoder.h +158 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/buffer/BufferEncoder.h +104 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/buffer/ProcessorPlugins.h +334 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/buffer/ProcessorSelector.h +186 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/core/DecoderLut.cpp +140 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/core/DecoderLut.h +42 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/core/DecoderProcess.h +100 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/core/Dfa.h +57 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/core/EncoderLut.cpp +85 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/core/EncoderLut.h +27 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/core/EncoderProcess.h +126 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/core/ProcessTrivial.h +108 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/iconv/iconv.cpp +139 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/iconv/iconv.h +74 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/message/MessageConverter.cpp +65 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/message/MessageConverter.h +91 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/tests/CorrectnessTests.cpp +772 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/tests/Example.cpp +12 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/tests/FileConverter.cpp +486 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/tests/iconv_sample.c +162 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/utf8lut.h +15 -0
- package/deps/simdutf/benchmarks/competition/utf8sse4/fromutf8-sse.cpp +292 -0
- package/deps/simdutf/benchmarks/competition/utfcpp/LICENSE +23 -0
- package/deps/simdutf/benchmarks/competition/utfcpp/README.md +1503 -0
- package/deps/simdutf/benchmarks/competition/utfcpp/source/utf8/checked.h +335 -0
- package/deps/simdutf/benchmarks/competition/utfcpp/source/utf8/core.h +338 -0
- package/deps/simdutf/benchmarks/competition/utfcpp/source/utf8/cpp11.h +103 -0
- package/deps/simdutf/benchmarks/competition/utfcpp/source/utf8/cpp17.h +103 -0
- package/deps/simdutf/benchmarks/competition/utfcpp/source/utf8/unchecked.h +274 -0
- package/deps/simdutf/benchmarks/competition/utfcpp/source/utf8.h +34 -0
- package/deps/simdutf/benchmarks/dataset/README.md +155 -0
- package/deps/simdutf/benchmarks/dataset/emoji.txt +204 -0
- package/deps/simdutf/benchmarks/dataset/scripts/utf8type.py +40 -0
- package/deps/simdutf/benchmarks/dataset/wikipedia_mars/Makefile +80 -0
- package/deps/simdutf/benchmarks/dataset/wikipedia_mars/convert_to_utf6.py +20 -0
- package/deps/simdutf/benchmarks/find/CMakeLists.txt +6 -0
- package/deps/simdutf/benchmarks/find/findbenchmark.cpp +63 -0
- package/deps/simdutf/benchmarks/find/findbenchmarker.h +46 -0
- package/deps/simdutf/benchmarks/shortbench.cpp +555 -0
- package/deps/simdutf/benchmarks/src/CMakeLists.txt +52 -0
- package/deps/simdutf/benchmarks/src/apple_arm_events.h +1104 -0
- package/deps/simdutf/benchmarks/src/benchmark.cpp +3899 -0
- package/deps/simdutf/benchmarks/src/benchmark.h +317 -0
- package/deps/simdutf/benchmarks/src/benchmark_base.cpp +144 -0
- package/deps/simdutf/benchmarks/src/benchmark_base.h +98 -0
- package/deps/simdutf/benchmarks/src/cmdline.cpp +176 -0
- package/deps/simdutf/benchmarks/src/cmdline.h +35 -0
- package/deps/simdutf/benchmarks/src/event_counter.h +162 -0
- package/deps/simdutf/benchmarks/src/linux-perf-events.h +104 -0
- package/deps/simdutf/benchmarks/stream.cpp +209 -0
- package/deps/simdutf/benchmarks/threaded.cpp +123 -0
- package/deps/simdutf/cmake/CPM.cmake +1363 -0
- package/deps/simdutf/cmake/JoinPaths.cmake +23 -0
- package/deps/simdutf/cmake/add_cpp_test.cmake +68 -0
- package/deps/simdutf/cmake/simdutf-config.cmake.in +2 -0
- package/deps/simdutf/cmake/simdutf-flags.cmake +26 -0
- package/deps/simdutf/cmake/toolchains-ci/riscv64-linux-gnu.cmake +4 -0
- package/deps/simdutf/cmake/toolchains-dev/README.md +32 -0
- package/deps/simdutf/cmake/toolchains-dev/aarch64.cmake +14 -0
- package/deps/simdutf/cmake/toolchains-dev/loongarch64.cmake +22 -0
- package/deps/simdutf/cmake/toolchains-dev/powerpc64.cmake +16 -0
- package/deps/simdutf/cmake/toolchains-dev/powerpc64le.cmake +16 -0
- package/deps/simdutf/cmake/toolchains-dev/riscv64.cmake +16 -0
- package/deps/simdutf/cmake/toolchains-dev/rvv-spike.cmake +38 -0
- package/deps/simdutf/doc/avx512.png +0 -0
- package/deps/simdutf/doc/logo.png +0 -0
- package/deps/simdutf/doc/logo.svg +165 -0
- package/deps/simdutf/doc/node2023.png +0 -0
- package/deps/simdutf/doc/shortinput.md +78 -0
- package/deps/simdutf/doc/utf16utf8.png +0 -0
- package/deps/simdutf/doc/utf8utf16.png +0 -0
- package/deps/simdutf/doc/widelogo.png +0 -0
- package/deps/simdutf/doxygen.py +50 -0
- package/deps/simdutf/fuzz/.clang-format +9 -0
- package/deps/simdutf/fuzz/CMakeLists.txt +45 -0
- package/deps/simdutf/fuzz/README.md +168 -0
- package/deps/simdutf/fuzz/atomic_base64.cpp +448 -0
- package/deps/simdutf/fuzz/base64.cpp +278 -0
- package/deps/simdutf/fuzz/build.sh +83 -0
- package/deps/simdutf/fuzz/conversion.cpp +669 -0
- package/deps/simdutf/fuzz/helpers/.clang-format-ignore +1 -0
- package/deps/simdutf/fuzz/helpers/common.h +135 -0
- package/deps/simdutf/fuzz/helpers/nameof.hpp +1258 -0
- package/deps/simdutf/fuzz/main.cpp +72 -0
- package/deps/simdutf/fuzz/minimize_and_cleanse.sh +87 -0
- package/deps/simdutf/fuzz/misc.cpp +216 -0
- package/deps/simdutf/fuzz/random_fuzz.sh +154 -0
- package/deps/simdutf/fuzz/roundtrip.cpp +588 -0
- package/deps/simdutf/fuzz/safe_conversion.cpp +104 -0
- package/deps/simdutf/include/simdutf/avx512.h +79 -0
- package/deps/simdutf/include/simdutf/base64_implementation.h +158 -0
- package/deps/simdutf/include/simdutf/base64_tables.h +887 -0
- package/deps/simdutf/include/simdutf/common_defs.h +186 -0
- package/deps/simdutf/include/simdutf/compiler_check.h +50 -0
- package/deps/simdutf/include/simdutf/constexpr_ptr.h +138 -0
- package/deps/simdutf/include/simdutf/encoding_types.h +189 -0
- package/deps/simdutf/include/simdutf/error.h +126 -0
- package/deps/simdutf/include/simdutf/implementation.h +7081 -0
- package/deps/simdutf/include/simdutf/internal/isadetection.h +325 -0
- package/deps/simdutf/include/simdutf/portability.h +285 -0
- package/deps/simdutf/include/simdutf/scalar/ascii.h +86 -0
- package/deps/simdutf/include/simdutf/scalar/atomic_util.h +105 -0
- package/deps/simdutf/include/simdutf/scalar/base64.h +911 -0
- package/deps/simdutf/include/simdutf/scalar/latin1.h +26 -0
- package/deps/simdutf/include/simdutf/scalar/latin1_to_utf16/latin1_to_utf16.h +52 -0
- package/deps/simdutf/include/simdutf/scalar/latin1_to_utf32/latin1_to_utf32.h +27 -0
- package/deps/simdutf/include/simdutf/scalar/latin1_to_utf8/latin1_to_utf8.h +191 -0
- package/deps/simdutf/include/simdutf/scalar/swap_bytes.h +35 -0
- package/deps/simdutf/include/simdutf/scalar/utf16.h +226 -0
- package/deps/simdutf/include/simdutf/scalar/utf16_to_latin1/utf16_to_latin1.h +108 -0
- package/deps/simdutf/include/simdutf/scalar/utf16_to_latin1/valid_utf16_to_latin1.h +40 -0
- package/deps/simdutf/include/simdutf/scalar/utf16_to_utf32/utf16_to_utf32.h +86 -0
- package/deps/simdutf/include/simdutf/scalar/utf16_to_utf32/valid_utf16_to_utf32.h +44 -0
- package/deps/simdutf/include/simdutf/scalar/utf16_to_utf8/utf16_to_utf8.h +295 -0
- package/deps/simdutf/include/simdutf/scalar/utf16_to_utf8/valid_utf16_to_utf8.h +91 -0
- package/deps/simdutf/include/simdutf/scalar/utf32.h +82 -0
- package/deps/simdutf/include/simdutf/scalar/utf32_to_latin1/utf32_to_latin1.h +68 -0
- package/deps/simdutf/include/simdutf/scalar/utf32_to_latin1/valid_utf32_to_latin1.h +67 -0
- package/deps/simdutf/include/simdutf/scalar/utf32_to_utf16/utf32_to_utf16.h +84 -0
- package/deps/simdutf/include/simdutf/scalar/utf32_to_utf16/valid_utf32_to_utf16.h +44 -0
- package/deps/simdutf/include/simdutf/scalar/utf32_to_utf8/utf32_to_utf8.h +142 -0
- package/deps/simdutf/include/simdutf/scalar/utf32_to_utf8/valid_utf32_to_utf8.h +72 -0
- package/deps/simdutf/include/simdutf/scalar/utf8.h +326 -0
- package/deps/simdutf/include/simdutf/scalar/utf8_to_latin1/utf8_to_latin1.h +225 -0
- package/deps/simdutf/include/simdutf/scalar/utf8_to_latin1/valid_utf8_to_latin1.h +87 -0
- package/deps/simdutf/include/simdutf/scalar/utf8_to_utf16/utf8_to_utf16.h +342 -0
- package/deps/simdutf/include/simdutf/scalar/utf8_to_utf16/valid_utf8_to_utf16.h +106 -0
- package/deps/simdutf/include/simdutf/scalar/utf8_to_utf32/utf8_to_utf32.h +299 -0
- package/deps/simdutf/include/simdutf/scalar/utf8_to_utf32/valid_utf8_to_utf32.h +83 -0
- package/deps/simdutf/include/simdutf/simdutf_version.h +26 -0
- package/deps/simdutf/include/simdutf.h +26 -0
- package/deps/simdutf/include/simdutf_c.h +342 -0
- package/deps/simdutf/riscv/Dockerfile +16 -0
- package/deps/simdutf/riscv/README.md +24 -0
- package/deps/simdutf/riscv/remove-docker-station +8 -0
- package/deps/simdutf/riscv/run-docker-station +31 -0
- package/deps/simdutf/scripts/.flake8 +2 -0
- package/deps/simdutf/scripts/Makefile +2 -0
- package/deps/simdutf/scripts/README_ADD_FUNCTION.md +49 -0
- package/deps/simdutf/scripts/add_function.py +330 -0
- package/deps/simdutf/scripts/amalgamation_tests.py +156 -0
- package/deps/simdutf/scripts/base64/Makefile +2 -0
- package/deps/simdutf/scripts/base64/README.md +2 -0
- package/deps/simdutf/scripts/base64/avx512.py +76 -0
- package/deps/simdutf/scripts/base64/neon_decode.py +143 -0
- package/deps/simdutf/scripts/base64/neon_generate_lut.py +101 -0
- package/deps/simdutf/scripts/base64/sse.py +252 -0
- package/deps/simdutf/scripts/base64/sseregular.py +160 -0
- package/deps/simdutf/scripts/base64/sseurl.py +283 -0
- package/deps/simdutf/scripts/base64/table.py +59 -0
- package/deps/simdutf/scripts/base64bench_print.py +145 -0
- package/deps/simdutf/scripts/benchmark-all.py +119 -0
- package/deps/simdutf/scripts/benchmark_print.py +324 -0
- package/deps/simdutf/scripts/check_feature_macros.py +156 -0
- package/deps/simdutf/scripts/check_typos.sh +13 -0
- package/deps/simdutf/scripts/clang_format.sh +35 -0
- package/deps/simdutf/scripts/clang_format_docker.sh +38 -0
- package/deps/simdutf/scripts/common.py +24 -0
- package/deps/simdutf/scripts/compilation_benchmark.py +55 -0
- package/deps/simdutf/scripts/compile_many_variations.sh +64 -0
- package/deps/simdutf/scripts/create_latex_table.py +62 -0
- package/deps/simdutf/scripts/docker/Dockerfile +14 -0
- package/deps/simdutf/scripts/docker/Makefile +9 -0
- package/deps/simdutf/scripts/docker/README.md +30 -0
- package/deps/simdutf/scripts/docker/llvm.gpg +0 -0
- package/deps/simdutf/scripts/ppc64_convert_utf16_to_utf8.py +155 -0
- package/deps/simdutf/scripts/prepare_doxygen.sh +21 -0
- package/deps/simdutf/scripts/release.py +197 -0
- package/deps/simdutf/scripts/shortinputplots.py +97 -0
- package/deps/simdutf/scripts/sse_convert_utf16_to_utf8.py +422 -0
- package/deps/simdutf/scripts/sse_convert_utf32_to_utf16.py +105 -0
- package/deps/simdutf/scripts/sse_utf8_utf16_decode.py +186 -0
- package/deps/simdutf/scripts/sse_validate_utf16le_proof.py +137 -0
- package/deps/simdutf/scripts/sse_validate_utf16le_testcases.py +129 -0
- package/deps/simdutf/scripts/table.py +207 -0
- package/deps/simdutf/scripts/tests/new.txt +33 -0
- package/deps/simdutf/scripts/tests/old.txt +33 -0
- package/deps/simdutf/scripts/tests/results.txt +272 -0
- package/deps/simdutf/simdutf.pc.in +11 -0
- package/deps/simdutf/singleheader/.flake8 +2 -0
- package/deps/simdutf/singleheader/CMakeLists.txt +64 -0
- package/deps/simdutf/singleheader/README-dev.md +81 -0
- package/deps/simdutf/singleheader/README.md +19 -0
- package/deps/simdutf/singleheader/amalgamate.py +513 -0
- package/deps/simdutf/singleheader/amalgamation_demo.c +59 -0
- package/deps/simdutf/singleheader/amalgamation_demo.cpp +54 -0
- package/deps/simdutf/singleheader/test-features.py +262 -0
- package/deps/simdutf/src/CMakeLists.txt +78 -0
- package/deps/simdutf/src/arm64/arm_base64.cpp +791 -0
- package/deps/simdutf/src/arm64/arm_convert_latin1_to_utf16.cpp +24 -0
- package/deps/simdutf/src/arm64/arm_convert_latin1_to_utf32.cpp +24 -0
- package/deps/simdutf/src/arm64/arm_convert_latin1_to_utf8.cpp +70 -0
- package/deps/simdutf/src/arm64/arm_convert_utf16_to_latin1.cpp +61 -0
- package/deps/simdutf/src/arm64/arm_convert_utf16_to_utf32.cpp +185 -0
- package/deps/simdutf/src/arm64/arm_convert_utf16_to_utf8.cpp +780 -0
- package/deps/simdutf/src/arm64/arm_convert_utf32_to_latin1.cpp +60 -0
- package/deps/simdutf/src/arm64/arm_convert_utf32_to_utf16.cpp +208 -0
- package/deps/simdutf/src/arm64/arm_convert_utf32_to_utf8.cpp +505 -0
- package/deps/simdutf/src/arm64/arm_convert_utf8_to_latin1.cpp +69 -0
- package/deps/simdutf/src/arm64/arm_convert_utf8_to_utf16.cpp +313 -0
- package/deps/simdutf/src/arm64/arm_convert_utf8_to_utf32.cpp +179 -0
- package/deps/simdutf/src/arm64/arm_find.cpp +199 -0
- package/deps/simdutf/src/arm64/arm_utf16fix.cpp +185 -0
- package/deps/simdutf/src/arm64/arm_validate_utf16.cpp +165 -0
- package/deps/simdutf/src/arm64/arm_validate_utf32le.cpp +65 -0
- package/deps/simdutf/src/arm64/implementation.cpp +1442 -0
- package/deps/simdutf/src/encoding_types.cpp +67 -0
- package/deps/simdutf/src/error.cpp +3 -0
- package/deps/simdutf/src/fallback/implementation.cpp +589 -0
- package/deps/simdutf/src/generic/ascii_validation.h +50 -0
- package/deps/simdutf/src/generic/base64.h +233 -0
- package/deps/simdutf/src/generic/base64lengths.h +63 -0
- package/deps/simdutf/src/generic/buf_block_reader.h +109 -0
- package/deps/simdutf/src/generic/find.h +75 -0
- package/deps/simdutf/src/generic/utf16/change_endianness.h +24 -0
- package/deps/simdutf/src/generic/utf16/count_code_points_bytemask.h +58 -0
- package/deps/simdutf/src/generic/utf16/to_well_formed.h +93 -0
- package/deps/simdutf/src/generic/utf16/utf32_length_from_utf16.h +15 -0
- package/deps/simdutf/src/generic/utf16/utf8_length_from_utf16.h +35 -0
- package/deps/simdutf/src/generic/utf16/utf8_length_from_utf16_bytemask.h +199 -0
- package/deps/simdutf/src/generic/utf16.h +73 -0
- package/deps/simdutf/src/generic/utf32.h +136 -0
- package/deps/simdutf/src/generic/utf8/utf16_length_from_utf8_bytemask.h +53 -0
- package/deps/simdutf/src/generic/utf8.h +92 -0
- package/deps/simdutf/src/generic/utf8_to_latin1/utf8_to_latin1.h +316 -0
- package/deps/simdutf/src/generic/utf8_to_latin1/valid_utf8_to_latin1.h +78 -0
- package/deps/simdutf/src/generic/utf8_to_utf16/utf8_to_utf16.h +332 -0
- package/deps/simdutf/src/generic/utf8_to_utf16/valid_utf8_to_utf16.h +74 -0
- package/deps/simdutf/src/generic/utf8_to_utf32/utf8_to_utf32.h +318 -0
- package/deps/simdutf/src/generic/utf8_to_utf32/valid_utf8_to_utf32.h +42 -0
- package/deps/simdutf/src/generic/utf8_validation/utf8_lookup4_algorithm.h +223 -0
- package/deps/simdutf/src/generic/utf8_validation/utf8_validator.h +84 -0
- package/deps/simdutf/src/generic/validate_utf16.h +164 -0
- package/deps/simdutf/src/generic/validate_utf32.h +99 -0
- package/deps/simdutf/src/haswell/avx2_base64.cpp +837 -0
- package/deps/simdutf/src/haswell/avx2_convert_latin1_to_utf16.cpp +28 -0
- package/deps/simdutf/src/haswell/avx2_convert_latin1_to_utf32.cpp +20 -0
- package/deps/simdutf/src/haswell/avx2_convert_latin1_to_utf8.cpp +83 -0
- package/deps/simdutf/src/haswell/avx2_convert_utf16_to_latin1.cpp +83 -0
- package/deps/simdutf/src/haswell/avx2_convert_utf16_to_utf32.cpp +210 -0
- package/deps/simdutf/src/haswell/avx2_convert_utf16_to_utf8.cpp +602 -0
- package/deps/simdutf/src/haswell/avx2_convert_utf32_to_latin1.cpp +116 -0
- package/deps/simdutf/src/haswell/avx2_convert_utf32_to_utf16.cpp +164 -0
- package/deps/simdutf/src/haswell/avx2_convert_utf32_to_utf8.cpp +569 -0
- package/deps/simdutf/src/haswell/avx2_convert_utf8_to_latin1.cpp +60 -0
- package/deps/simdutf/src/haswell/avx2_convert_utf8_to_utf16.cpp +195 -0
- package/deps/simdutf/src/haswell/avx2_convert_utf8_to_utf32.cpp +135 -0
- package/deps/simdutf/src/haswell/avx2_utf16fix.cpp +173 -0
- package/deps/simdutf/src/haswell/avx2_validate_utf16.cpp +17 -0
- package/deps/simdutf/src/haswell/implementation.cpp +1447 -0
- package/deps/simdutf/src/icelake/icelake_ascii_validation.inl.cpp +19 -0
- package/deps/simdutf/src/icelake/icelake_base64.inl.cpp +630 -0
- package/deps/simdutf/src/icelake/icelake_common.inl.cpp +37 -0
- package/deps/simdutf/src/icelake/icelake_convert_latin1_to_utf16.inl.cpp +36 -0
- package/deps/simdutf/src/icelake/icelake_convert_latin1_to_utf32.inl.cpp +23 -0
- package/deps/simdutf/src/icelake/icelake_convert_latin1_to_utf8.inl.cpp +107 -0
- package/deps/simdutf/src/icelake/icelake_convert_utf16_to_latin1.inl.cpp +103 -0
- package/deps/simdutf/src/icelake/icelake_convert_utf16_to_utf32.inl.cpp +136 -0
- package/deps/simdutf/src/icelake/icelake_convert_utf16_to_utf8.inl.cpp +206 -0
- package/deps/simdutf/src/icelake/icelake_convert_utf32_to_latin1.inl.cpp +74 -0
- package/deps/simdutf/src/icelake/icelake_convert_utf32_to_utf16.inl.cpp +338 -0
- package/deps/simdutf/src/icelake/icelake_convert_utf32_to_utf8.inl.cpp +574 -0
- package/deps/simdutf/src/icelake/icelake_convert_utf8_to_latin1.inl.cpp +104 -0
- package/deps/simdutf/src/icelake/icelake_convert_utf8_to_utf16.inl.cpp +75 -0
- package/deps/simdutf/src/icelake/icelake_convert_valid_utf8_to_latin1.inl.cpp +69 -0
- package/deps/simdutf/src/icelake/icelake_find.inl.cpp +146 -0
- package/deps/simdutf/src/icelake/icelake_from_utf8.inl.cpp +266 -0
- package/deps/simdutf/src/icelake/icelake_from_valid_utf8.inl.cpp +136 -0
- package/deps/simdutf/src/icelake/icelake_macros.inl.cpp +143 -0
- package/deps/simdutf/src/icelake/icelake_utf16fix.cpp +138 -0
- package/deps/simdutf/src/icelake/icelake_utf32_validation.inl.cpp +63 -0
- package/deps/simdutf/src/icelake/icelake_utf8_common.inl.cpp +753 -0
- package/deps/simdutf/src/icelake/icelake_utf8_length_from_utf16.inl.cpp +269 -0
- package/deps/simdutf/src/icelake/icelake_utf8_validation.inl.cpp +116 -0
- package/deps/simdutf/src/icelake/implementation.cpp +1903 -0
- package/deps/simdutf/src/implementation.cpp +2526 -0
- package/deps/simdutf/src/lasx/implementation.cpp +1531 -0
- package/deps/simdutf/src/lasx/lasx_base64.cpp +695 -0
- package/deps/simdutf/src/lasx/lasx_convert_latin1_to_utf16.cpp +76 -0
- package/deps/simdutf/src/lasx/lasx_convert_latin1_to_utf32.cpp +55 -0
- package/deps/simdutf/src/lasx/lasx_convert_latin1_to_utf8.cpp +65 -0
- package/deps/simdutf/src/lasx/lasx_convert_utf16_to_latin1.cpp +64 -0
- package/deps/simdutf/src/lasx/lasx_convert_utf16_to_utf32.cpp +183 -0
- package/deps/simdutf/src/lasx/lasx_convert_utf16_to_utf8.cpp +550 -0
- package/deps/simdutf/src/lasx/lasx_convert_utf32_to_latin1.cpp +73 -0
- package/deps/simdutf/src/lasx/lasx_convert_utf32_to_utf16.cpp +218 -0
- package/deps/simdutf/src/lasx/lasx_convert_utf32_to_utf8.cpp +589 -0
- package/deps/simdutf/src/lasx/lasx_convert_utf8_to_latin1.cpp +72 -0
- package/deps/simdutf/src/lasx/lasx_convert_utf8_to_utf16.cpp +296 -0
- package/deps/simdutf/src/lasx/lasx_convert_utf8_to_utf32.cpp +190 -0
- package/deps/simdutf/src/lasx/lasx_find.cpp +64 -0
- package/deps/simdutf/src/lasx/lasx_validate_utf16.cpp +13 -0
- package/deps/simdutf/src/lasx/lasx_validate_utf32le.cpp +84 -0
- package/deps/simdutf/src/lsx/implementation.cpp +1417 -0
- package/deps/simdutf/src/lsx/lsx_base64.cpp +675 -0
- package/deps/simdutf/src/lsx/lsx_convert_latin1_to_utf16.cpp +39 -0
- package/deps/simdutf/src/lsx/lsx_convert_latin1_to_utf32.cpp +27 -0
- package/deps/simdutf/src/lsx/lsx_convert_latin1_to_utf8.cpp +56 -0
- package/deps/simdutf/src/lsx/lsx_convert_utf16_to_latin1.cpp +64 -0
- package/deps/simdutf/src/lsx/lsx_convert_utf16_to_utf32.cpp +133 -0
- package/deps/simdutf/src/lsx/lsx_convert_utf16_to_utf8.cpp +518 -0
- package/deps/simdutf/src/lsx/lsx_convert_utf32_to_latin1.cpp +66 -0
- package/deps/simdutf/src/lsx/lsx_convert_utf32_to_utf16.cpp +155 -0
- package/deps/simdutf/src/lsx/lsx_convert_utf32_to_utf8.cpp +459 -0
- package/deps/simdutf/src/lsx/lsx_convert_utf8_to_latin1.cpp +75 -0
- package/deps/simdutf/src/lsx/lsx_convert_utf8_to_utf16.cpp +291 -0
- package/deps/simdutf/src/lsx/lsx_convert_utf8_to_utf32.cpp +179 -0
- package/deps/simdutf/src/lsx/lsx_find.cpp +60 -0
- package/deps/simdutf/src/lsx/lsx_validate_utf16.cpp +13 -0
- package/deps/simdutf/src/lsx/lsx_validate_utf32le.cpp +68 -0
- package/deps/simdutf/src/ppc64/implementation.cpp +992 -0
- package/deps/simdutf/src/ppc64/ppc64_base64.cpp +480 -0
- package/deps/simdutf/src/ppc64/ppc64_base64_internal_tests.cpp +401 -0
- package/deps/simdutf/src/ppc64/ppc64_convert_latin1_to_utf16.cpp +12 -0
- package/deps/simdutf/src/ppc64/ppc64_convert_latin1_to_utf32.cpp +12 -0
- package/deps/simdutf/src/ppc64/ppc64_convert_latin1_to_utf8.cpp +149 -0
- package/deps/simdutf/src/ppc64/ppc64_convert_utf16_to_latin1.cpp +67 -0
- package/deps/simdutf/src/ppc64/ppc64_convert_utf16_to_utf32.cpp +87 -0
- package/deps/simdutf/src/ppc64/ppc64_convert_utf16_to_utf8.cpp +296 -0
- package/deps/simdutf/src/ppc64/ppc64_convert_utf32_to_latin1.cpp +57 -0
- package/deps/simdutf/src/ppc64/ppc64_convert_utf32_to_utf16.cpp +117 -0
- package/deps/simdutf/src/ppc64/ppc64_convert_utf32_to_utf8.cpp +166 -0
- package/deps/simdutf/src/ppc64/ppc64_convert_utf8_to_latin1.cpp +69 -0
- package/deps/simdutf/src/ppc64/ppc64_convert_utf8_to_utf16.cpp +211 -0
- package/deps/simdutf/src/ppc64/ppc64_convert_utf8_to_utf32.cpp +153 -0
- package/deps/simdutf/src/ppc64/ppc64_utf16_to_utf8_tables.h +1011 -0
- package/deps/simdutf/src/ppc64/ppc64_utf8_length_from_latin1.cpp +37 -0
- package/deps/simdutf/src/ppc64/ppc64_validate_utf16.cpp +19 -0
- package/deps/simdutf/src/ppc64/templates.cpp +91 -0
- package/deps/simdutf/src/rvv/implementation.cpp +138 -0
- package/deps/simdutf/src/rvv/rvv_find.cpp +27 -0
- package/deps/simdutf/src/rvv/rvv_helpers.inl.cpp +23 -0
- package/deps/simdutf/src/rvv/rvv_latin1_to.inl.cpp +71 -0
- package/deps/simdutf/src/rvv/rvv_length_from.inl.cpp +164 -0
- package/deps/simdutf/src/rvv/rvv_utf16_to.inl.cpp +399 -0
- package/deps/simdutf/src/rvv/rvv_utf16fix.cpp +110 -0
- package/deps/simdutf/src/rvv/rvv_utf32_to.inl.cpp +307 -0
- package/deps/simdutf/src/rvv/rvv_utf8_to.inl.cpp +435 -0
- package/deps/simdutf/src/rvv/rvv_validate.inl.cpp +275 -0
- package/deps/simdutf/src/simdutf/arm64/begin.h +2 -0
- package/deps/simdutf/src/simdutf/arm64/bitmanipulation.h +34 -0
- package/deps/simdutf/src/simdutf/arm64/end.h +2 -0
- package/deps/simdutf/src/simdutf/arm64/implementation.h +307 -0
- package/deps/simdutf/src/simdutf/arm64/intrinsics.h +10 -0
- package/deps/simdutf/src/simdutf/arm64/simd.h +547 -0
- package/deps/simdutf/src/simdutf/arm64/simd16-inl.h +403 -0
- package/deps/simdutf/src/simdutf/arm64/simd32-inl.h +129 -0
- package/deps/simdutf/src/simdutf/arm64/simd64-inl.h +28 -0
- package/deps/simdutf/src/simdutf/arm64.h +43 -0
- package/deps/simdutf/src/simdutf/fallback/begin.h +1 -0
- package/deps/simdutf/src/simdutf/fallback/bitmanipulation.h +13 -0
- package/deps/simdutf/src/simdutf/fallback/end.h +1 -0
- package/deps/simdutf/src/simdutf/fallback/implementation.h +331 -0
- package/deps/simdutf/src/simdutf/fallback.h +42 -0
- package/deps/simdutf/src/simdutf/haswell/begin.h +15 -0
- package/deps/simdutf/src/simdutf/haswell/bitmanipulation.h +35 -0
- package/deps/simdutf/src/simdutf/haswell/end.h +13 -0
- package/deps/simdutf/src/simdutf/haswell/implementation.h +338 -0
- package/deps/simdutf/src/simdutf/haswell/intrinsics.h +67 -0
- package/deps/simdutf/src/simdutf/haswell/simd.h +363 -0
- package/deps/simdutf/src/simdutf/haswell/simd16-inl.h +261 -0
- package/deps/simdutf/src/simdutf/haswell/simd32-inl.h +111 -0
- package/deps/simdutf/src/simdutf/haswell/simd64-inl.h +34 -0
- package/deps/simdutf/src/simdutf/haswell.h +63 -0
- package/deps/simdutf/src/simdutf/icelake/begin.h +14 -0
- package/deps/simdutf/src/simdutf/icelake/bitmanipulation.h +44 -0
- package/deps/simdutf/src/simdutf/icelake/end.h +12 -0
- package/deps/simdutf/src/simdutf/icelake/implementation.h +346 -0
- package/deps/simdutf/src/simdutf/icelake/intrinsics.h +138 -0
- package/deps/simdutf/src/simdutf/icelake/simd.h +17 -0
- package/deps/simdutf/src/simdutf/icelake/simd16-inl.h +90 -0
- package/deps/simdutf/src/simdutf/icelake/simd32-inl.h +47 -0
- package/deps/simdutf/src/simdutf/icelake.h +81 -0
- package/deps/simdutf/src/simdutf/lasx/begin.h +8 -0
- package/deps/simdutf/src/simdutf/lasx/bitmanipulation.h +25 -0
- package/deps/simdutf/src/simdutf/lasx/end.h +8 -0
- package/deps/simdutf/src/simdutf/lasx/implementation.h +310 -0
- package/deps/simdutf/src/simdutf/lasx/intrinsics.h +319 -0
- package/deps/simdutf/src/simdutf/lasx/simd.h +551 -0
- package/deps/simdutf/src/simdutf/lasx/simd16-inl.h +234 -0
- package/deps/simdutf/src/simdutf/lasx/simd32-inl.h +74 -0
- package/deps/simdutf/src/simdutf/lasx/simd64-inl.h +52 -0
- package/deps/simdutf/src/simdutf/lasx.h +49 -0
- package/deps/simdutf/src/simdutf/lsx/begin.h +2 -0
- package/deps/simdutf/src/simdutf/lsx/bitmanipulation.h +25 -0
- package/deps/simdutf/src/simdutf/lsx/end.h +2 -0
- package/deps/simdutf/src/simdutf/lsx/implementation.h +309 -0
- package/deps/simdutf/src/simdutf/lsx/intrinsics.h +196 -0
- package/deps/simdutf/src/simdutf/lsx/simd.h +421 -0
- package/deps/simdutf/src/simdutf/lsx/simd16-inl.h +242 -0
- package/deps/simdutf/src/simdutf/lsx/simd32-inl.h +69 -0
- package/deps/simdutf/src/simdutf/lsx/simd64-inl.h +50 -0
- package/deps/simdutf/src/simdutf/lsx.h +52 -0
- package/deps/simdutf/src/simdutf/ppc64/begin.h +1 -0
- package/deps/simdutf/src/simdutf/ppc64/bitmanipulation.h +29 -0
- package/deps/simdutf/src/simdutf/ppc64/end.h +1 -0
- package/deps/simdutf/src/simdutf/ppc64/implementation.h +348 -0
- package/deps/simdutf/src/simdutf/ppc64/intrinsics.h +19 -0
- package/deps/simdutf/src/simdutf/ppc64/simd.h +177 -0
- package/deps/simdutf/src/simdutf/ppc64/simd16-inl.h +327 -0
- package/deps/simdutf/src/simdutf/ppc64/simd32-inl.h +247 -0
- package/deps/simdutf/src/simdutf/ppc64/simd8-inl.h +618 -0
- package/deps/simdutf/src/simdutf/ppc64.h +40 -0
- package/deps/simdutf/src/simdutf/rvv/begin.h +7 -0
- package/deps/simdutf/src/simdutf/rvv/end.h +7 -0
- package/deps/simdutf/src/simdutf/rvv/implementation.h +321 -0
- package/deps/simdutf/src/simdutf/rvv/intrinsics.h +131 -0
- package/deps/simdutf/src/simdutf/rvv.h +41 -0
- package/deps/simdutf/src/simdutf/westmere/begin.h +8 -0
- package/deps/simdutf/src/simdutf/westmere/bitmanipulation.h +37 -0
- package/deps/simdutf/src/simdutf/westmere/end.h +8 -0
- package/deps/simdutf/src/simdutf/westmere/implementation.h +338 -0
- package/deps/simdutf/src/simdutf/westmere/intrinsics.h +38 -0
- package/deps/simdutf/src/simdutf/westmere/simd.h +379 -0
- package/deps/simdutf/src/simdutf/westmere/simd16-inl.h +242 -0
- package/deps/simdutf/src/simdutf/westmere/simd32-inl.h +151 -0
- package/deps/simdutf/src/simdutf/westmere/simd64-inl.h +33 -0
- package/deps/simdutf/src/simdutf/westmere.h +59 -0
- package/deps/simdutf/src/simdutf.cpp +152 -0
- package/deps/simdutf/src/simdutf_c.cpp +525 -0
- package/deps/simdutf/src/tables/utf16_to_utf8_tables.h +768 -0
- package/deps/simdutf/src/tables/utf32_to_utf16_tables.h +53 -0
- package/deps/simdutf/src/tables/utf8_to_utf16_tables.h +826 -0
- package/deps/simdutf/src/westmere/implementation.cpp +1479 -0
- package/deps/simdutf/src/westmere/internal/loader.cpp +7 -0
- package/deps/simdutf/src/westmere/internal/write_v_u16_11bits_to_utf8.cpp +66 -0
- package/deps/simdutf/src/westmere/sse_base64.cpp +672 -0
- package/deps/simdutf/src/westmere/sse_convert_latin1_to_utf16.cpp +21 -0
- package/deps/simdutf/src/westmere/sse_convert_latin1_to_utf32.cpp +31 -0
- package/deps/simdutf/src/westmere/sse_convert_latin1_to_utf8.cpp +71 -0
- package/deps/simdutf/src/westmere/sse_convert_utf16_to_latin1.cpp +70 -0
- package/deps/simdutf/src/westmere/sse_convert_utf16_to_utf32.cpp +206 -0
- package/deps/simdutf/src/westmere/sse_convert_utf16_to_utf8.cpp +504 -0
- package/deps/simdutf/src/westmere/sse_convert_utf32_to_latin1.cpp +82 -0
- package/deps/simdutf/src/westmere/sse_convert_utf32_to_utf16.cpp +209 -0
- package/deps/simdutf/src/westmere/sse_convert_utf32_to_utf8.cpp +589 -0
- package/deps/simdutf/src/westmere/sse_convert_utf8_to_latin1.cpp +58 -0
- package/deps/simdutf/src/westmere/sse_convert_utf8_to_utf16.cpp +197 -0
- package/deps/simdutf/src/westmere/sse_convert_utf8_to_utf32.cpp +141 -0
- package/deps/simdutf/src/westmere/sse_utf16fix.cpp +82 -0
- package/deps/simdutf/src/westmere/sse_validate_utf16.cpp +17 -0
- package/deps/simdutf/tests/CMakeLists.txt +483 -0
- package/deps/simdutf/tests/atomic_base64_tests.cpp +2845 -0
- package/deps/simdutf/tests/base64_tests.cpp +3617 -0
- package/deps/simdutf/tests/basic_fuzzer.cpp +805 -0
- package/deps/simdutf/tests/bele_tests.cpp +182 -0
- package/deps/simdutf/tests/constexpr_base64_tests.cpp +387 -0
- package/deps/simdutf/tests/convert_latin1_to_utf16be_tests.cpp +52 -0
- package/deps/simdutf/tests/convert_latin1_to_utf16le_tests.cpp +80 -0
- package/deps/simdutf/tests/convert_latin1_to_utf32_tests.cpp +66 -0
- package/deps/simdutf/tests/convert_latin1_to_utf8_tests.cpp +120 -0
- package/deps/simdutf/tests/convert_utf16_to_utf8_safe_tests.cpp +203 -0
- package/deps/simdutf/tests/convert_utf16_to_utf8_with_replacement_tests.cpp +276 -0
- package/deps/simdutf/tests/convert_utf16be_to_latin1_tests.cpp +109 -0
- package/deps/simdutf/tests/convert_utf16be_to_latin1_tests_with_errors.cpp +136 -0
- package/deps/simdutf/tests/convert_utf16be_to_utf32_tests.cpp +193 -0
- package/deps/simdutf/tests/convert_utf16be_to_utf32_with_errors_tests.cpp +381 -0
- package/deps/simdutf/tests/convert_utf16be_to_utf8_tests.cpp +259 -0
- package/deps/simdutf/tests/convert_utf16be_to_utf8_with_errors_tests.cpp +266 -0
- package/deps/simdutf/tests/convert_utf16le_to_latin1_tests.cpp +148 -0
- package/deps/simdutf/tests/convert_utf16le_to_latin1_tests_with_errors.cpp +176 -0
- package/deps/simdutf/tests/convert_utf16le_to_utf32_tests.cpp +213 -0
- package/deps/simdutf/tests/convert_utf16le_to_utf32_with_errors_tests.cpp +318 -0
- package/deps/simdutf/tests/convert_utf16le_to_utf8_tests.cpp +343 -0
- package/deps/simdutf/tests/convert_utf16le_to_utf8_with_errors_tests.cpp +271 -0
- package/deps/simdutf/tests/convert_utf32_to_latin1_tests.cpp +111 -0
- package/deps/simdutf/tests/convert_utf32_to_latin1_with_errors_tests.cpp +96 -0
- package/deps/simdutf/tests/convert_utf32_to_utf16be_tests.cpp +148 -0
- package/deps/simdutf/tests/convert_utf32_to_utf16be_with_errors_tests.cpp +192 -0
- package/deps/simdutf/tests/convert_utf32_to_utf16le_tests.cpp +166 -0
- package/deps/simdutf/tests/convert_utf32_to_utf16le_with_errors_tests.cpp +215 -0
- package/deps/simdutf/tests/convert_utf32_to_utf8_tests.cpp +181 -0
- package/deps/simdutf/tests/convert_utf32_to_utf8_with_errors_tests.cpp +261 -0
- package/deps/simdutf/tests/convert_utf8_to_latin1_tests.cpp +516 -0
- package/deps/simdutf/tests/convert_utf8_to_latin1_with_errors_tests.cpp +579 -0
- package/deps/simdutf/tests/convert_utf8_to_utf16be_tests.cpp +412 -0
- package/deps/simdutf/tests/convert_utf8_to_utf16be_with_errors_tests.cpp +480 -0
- package/deps/simdutf/tests/convert_utf8_to_utf16le_tests.cpp +671 -0
- package/deps/simdutf/tests/convert_utf8_to_utf16le_with_errors_tests.cpp +455 -0
- package/deps/simdutf/tests/convert_utf8_to_utf32_tests.cpp +1204 -0
- package/deps/simdutf/tests/convert_utf8_to_utf32_with_errors_tests.cpp +337 -0
- package/deps/simdutf/tests/convert_valid_utf16be_to_latin1_tests.cpp +37 -0
- package/deps/simdutf/tests/convert_valid_utf16be_to_utf32_tests.cpp +97 -0
- package/deps/simdutf/tests/convert_valid_utf16be_to_utf8_tests.cpp +126 -0
- package/deps/simdutf/tests/convert_valid_utf16le_to_latin1_tests.cpp +71 -0
- package/deps/simdutf/tests/convert_valid_utf16le_to_utf32_tests.cpp +122 -0
- package/deps/simdutf/tests/convert_valid_utf16le_to_utf8_tests.cpp +244 -0
- package/deps/simdutf/tests/convert_valid_utf32_to_latin1_tests.cpp +49 -0
- package/deps/simdutf/tests/convert_valid_utf32_to_utf16be_tests.cpp +92 -0
- package/deps/simdutf/tests/convert_valid_utf32_to_utf16le_tests.cpp +114 -0
- package/deps/simdutf/tests/convert_valid_utf32_to_utf8_tests.cpp +109 -0
- package/deps/simdutf/tests/convert_valid_utf8_to_latin1_tests.cpp +84 -0
- package/deps/simdutf/tests/convert_valid_utf8_to_utf16be_tests.cpp +124 -0
- package/deps/simdutf/tests/convert_valid_utf8_to_utf16le_tests.cpp +221 -0
- package/deps/simdutf/tests/convert_valid_utf8_to_utf32_tests.cpp +155 -0
- package/deps/simdutf/tests/count_utf16be.cpp +64 -0
- package/deps/simdutf/tests/count_utf16le.cpp +61 -0
- package/deps/simdutf/tests/count_utf8.cpp +87 -0
- package/deps/simdutf/tests/detect_encodings_tests.cpp +312 -0
- package/deps/simdutf/tests/embed/valid_utf8.txt +1 -0
- package/deps/simdutf/tests/embed_tests.cpp +22 -0
- package/deps/simdutf/tests/find_tests.cpp +77 -0
- package/deps/simdutf/tests/fixed_string_tests.cpp +153 -0
- package/deps/simdutf/tests/helpers/CMakeLists.txt +25 -0
- package/deps/simdutf/tests/helpers/compiletime_conversions.h +222 -0
- package/deps/simdutf/tests/helpers/fixed_string.h +267 -0
- package/deps/simdutf/tests/helpers/random_int.cpp +30 -0
- package/deps/simdutf/tests/helpers/random_int.h +39 -0
- package/deps/simdutf/tests/helpers/random_utf16.cpp +123 -0
- package/deps/simdutf/tests/helpers/random_utf16.h +52 -0
- package/deps/simdutf/tests/helpers/random_utf32.cpp +41 -0
- package/deps/simdutf/tests/helpers/random_utf32.h +40 -0
- package/deps/simdutf/tests/helpers/random_utf8.cpp +93 -0
- package/deps/simdutf/tests/helpers/random_utf8.h +36 -0
- package/deps/simdutf/tests/helpers/test.cpp +231 -0
- package/deps/simdutf/tests/helpers/test.h +193 -0
- package/deps/simdutf/tests/helpers/transcode_test_base.cpp +1257 -0
- package/deps/simdutf/tests/helpers/transcode_test_base.h +683 -0
- package/deps/simdutf/tests/helpers/utf16.h +27 -0
- package/deps/simdutf/tests/installation_tests/find/CMakeLists.txt +43 -0
- package/deps/simdutf/tests/installation_tests/from_fetch/CMakeLists.txt +47 -0
- package/deps/simdutf/tests/internal_tests.cpp +27 -0
- package/deps/simdutf/tests/null_safety_tests.cpp +94 -0
- package/deps/simdutf/tests/random_fuzzer.cpp +779 -0
- package/deps/simdutf/tests/readme_tests.cpp +274 -0
- package/deps/simdutf/tests/reference/CMakeLists.txt +23 -0
- package/deps/simdutf/tests/reference/decode_utf16.h +81 -0
- package/deps/simdutf/tests/reference/decode_utf32.h +47 -0
- package/deps/simdutf/tests/reference/encode_latin1.cpp +1 -0
- package/deps/simdutf/tests/reference/encode_latin1.h +32 -0
- package/deps/simdutf/tests/reference/encode_utf16.cpp +49 -0
- package/deps/simdutf/tests/reference/encode_utf16.h +20 -0
- package/deps/simdutf/tests/reference/encode_utf32.cpp +1 -0
- package/deps/simdutf/tests/reference/encode_utf32.h +36 -0
- package/deps/simdutf/tests/reference/encode_utf8.cpp +1 -0
- package/deps/simdutf/tests/reference/encode_utf8.h +40 -0
- package/deps/simdutf/tests/reference/validate_utf16.cpp +60 -0
- package/deps/simdutf/tests/reference/validate_utf16.h +14 -0
- package/deps/simdutf/tests/reference/validate_utf16_to_latin1.cpp +35 -0
- package/deps/simdutf/tests/reference/validate_utf16_to_latin1.h +13 -0
- package/deps/simdutf/tests/reference/validate_utf32.cpp +27 -0
- package/deps/simdutf/tests/reference/validate_utf32.h +12 -0
- package/deps/simdutf/tests/reference/validate_utf32_to_latin1.cpp +27 -0
- package/deps/simdutf/tests/reference/validate_utf32_to_latin1.h +12 -0
- package/deps/simdutf/tests/reference/validate_utf8.cpp +82 -0
- package/deps/simdutf/tests/reference/validate_utf8.h +11 -0
- package/deps/simdutf/tests/reference/validate_utf8_to_latin1.cpp +43 -0
- package/deps/simdutf/tests/reference/validate_utf8_to_latin1.h +12 -0
- package/deps/simdutf/tests/select_implementation.cpp +43 -0
- package/deps/simdutf/tests/simdutf_c_tests.cpp +244 -0
- package/deps/simdutf/tests/span_tests.cpp +401 -0
- package/deps/simdutf/tests/special_tests.cpp +559 -0
- package/deps/simdutf/tests/straight_c_test.c +187 -0
- package/deps/simdutf/tests/text_encoding_tests.cpp +77 -0
- package/deps/simdutf/tests/to_well_formed_utf16_tests.cpp +377 -0
- package/deps/simdutf/tests/utf8_length_from_utf16_tests.cpp +202 -0
- package/deps/simdutf/tests/validate_ascii_basic_tests.cpp +165 -0
- package/deps/simdutf/tests/validate_ascii_with_errors_tests.cpp +77 -0
- package/deps/simdutf/tests/validate_utf16be_basic_tests.cpp +175 -0
- package/deps/simdutf/tests/validate_utf16be_with_errors_tests.cpp +188 -0
- package/deps/simdutf/tests/validate_utf16le_basic_tests.cpp +268 -0
- package/deps/simdutf/tests/validate_utf16le_with_errors_tests.cpp +274 -0
- package/deps/simdutf/tests/validate_utf32_basic_tests.cpp +92 -0
- package/deps/simdutf/tests/validate_utf32_with_errors_tests.cpp +114 -0
- package/deps/simdutf/tests/validate_utf8_basic_tests.cpp +178 -0
- package/deps/simdutf/tests/validate_utf8_brute_force_tests.cpp +88 -0
- package/deps/simdutf/tests/validate_utf8_puzzler_tests.cpp +33 -0
- package/deps/simdutf/tests/validate_utf8_with_errors_tests.cpp +228 -0
- package/deps/simdutf/tools/CMakeLists.txt +85 -0
- package/deps/simdutf/tools/fastbase64.cpp +250 -0
- package/deps/simdutf/tools/sutf.cpp +556 -0
- package/deps/simdutf/tools/sutf.h +40 -0
- package/lib/commonjs/blake3.js +2 -1
- package/lib/commonjs/blake3.js.map +1 -1
- package/lib/commonjs/diffie-hellman.js +5 -4
- package/lib/commonjs/diffie-hellman.js.map +1 -1
- package/lib/commonjs/ecdh.js +5 -4
- package/lib/commonjs/ecdh.js.map +1 -1
- package/lib/module/blake3.js +2 -1
- package/lib/module/blake3.js.map +1 -1
- package/lib/module/diffie-hellman.js +5 -4
- package/lib/module/diffie-hellman.js.map +1 -1
- package/lib/module/ecdh.js +5 -4
- package/lib/module/ecdh.js.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/lib/typescript/blake3.d.ts.map +1 -1
- package/lib/typescript/diffie-hellman.d.ts.map +1 -1
- package/lib/typescript/ecdh.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/blake3.ts +2 -1
- package/src/diffie-hellman.ts +5 -7
- package/src/ecdh.ts +5 -8
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# this library provides main() for compilers that do not have libfuzzer (everyone except clang)
|
|
2
|
+
# so the source code is compiled regardless of compiler, which prevents code rot.
|
|
3
|
+
# also, the library provides a way to invoke the fuzzer on external data which is
|
|
4
|
+
# useful to run the fuzz corpus through code also when not using clang.
|
|
5
|
+
add_library(main STATIC main.cpp)
|
|
6
|
+
target_compile_features(main PRIVATE cxx_std_20)
|
|
7
|
+
|
|
8
|
+
# see if libfuzzer is supported - this gets more complicated than just checking
|
|
9
|
+
# for clang, because apple clang does not seem to support it and windows also
|
|
10
|
+
# support clang nowadays (and perhaps libfuzzer)
|
|
11
|
+
|
|
12
|
+
include(CheckSourceCompiles)
|
|
13
|
+
set(CMAKE_REQUIRED_LINK_OPTIONS -fsanitize=fuzzer)
|
|
14
|
+
check_source_compiles(CXX "
|
|
15
|
+
#include <cstddef>
|
|
16
|
+
#include <cstdint>
|
|
17
|
+
extern \"C\" int LLVMFuzzerTestOneInput(const uint8_t* Data, size_t Size)
|
|
18
|
+
{ return 0;}
|
|
19
|
+
" haslibfuzzer)
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
macro(create_fuzztest testname)
|
|
23
|
+
add_executable(${testname} ${testname}.cpp)
|
|
24
|
+
target_compile_features(${testname} PRIVATE cxx_std_20)
|
|
25
|
+
target_link_libraries(${testname} PRIVATE simdutf)
|
|
26
|
+
|
|
27
|
+
if(haslibfuzzer)
|
|
28
|
+
target_compile_options(${testname} PUBLIC -fsanitize=fuzzer)
|
|
29
|
+
target_link_options(${testname} PUBLIC -fsanitize=fuzzer)
|
|
30
|
+
else()
|
|
31
|
+
# supply a separate main
|
|
32
|
+
target_link_libraries(${testname} PRIVATE main)
|
|
33
|
+
endif()
|
|
34
|
+
|
|
35
|
+
endmacro()
|
|
36
|
+
|
|
37
|
+
create_fuzztest(conversion)
|
|
38
|
+
create_fuzztest(safe_conversion)
|
|
39
|
+
create_fuzztest(misc)
|
|
40
|
+
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
|
41
|
+
# this file uses FuzzedDataProvider.h which is provided by clang
|
|
42
|
+
create_fuzztest(roundtrip)
|
|
43
|
+
endif()
|
|
44
|
+
create_fuzztest(base64)
|
|
45
|
+
create_fuzztest(atomic_base64)
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
# Fuzzing
|
|
2
|
+
|
|
3
|
+
All non deprecated functions part of the public API are fuzzed.
|
|
4
|
+
|
|
5
|
+
There have been quite a few bugs uncovered by this,
|
|
6
|
+
showing the effectiveness of this type of testing.
|
|
7
|
+
|
|
8
|
+
The fuzzers are doing differential fuzzing where applicable, meaning the output
|
|
9
|
+
of the different implementations are compared against each other. Deviations
|
|
10
|
+
are not tolerated, unless in some special cases. For instance, if the result of
|
|
11
|
+
a conversion is that the input was invalid, the (possibly partially) converted
|
|
12
|
+
output is allowed to differ.
|
|
13
|
+
|
|
14
|
+
Because simdutf does runtime cpu dispatching, you have to run the fuzzers at
|
|
15
|
+
different systems to ensure all code is exercised. For instance, the icelake
|
|
16
|
+
code is not run if you have an older x86 cpu.
|
|
17
|
+
|
|
18
|
+
simdutf is participating in the oss-fuzz project. The upstream instructions for
|
|
19
|
+
how to run, debug and develop fuzzers are applicable in addition to the
|
|
20
|
+
instructions here.
|
|
21
|
+
|
|
22
|
+
## Useful links
|
|
23
|
+
- [OSS fuzz build logs](https://oss-fuzz-build-logs.storage.googleapis.com/index.html#simdutf)
|
|
24
|
+
- [OSS fuzz bugs reported](https://bugs.chromium.org/p/oss-fuzz/issues/list?sort=-id&q=proj%3Dsimdutf)
|
|
25
|
+
- [fuzz introspector (requires login)](https://storage.googleapis.com/oss-fuzz-introspector/simdutf/inspector-report/20240816/fuzz_report.html)
|
|
26
|
+
- [libfuzzer documentation](https://llvm.org/docs/LibFuzzer.html)
|
|
27
|
+
## Building the fuzzers locally
|
|
28
|
+
|
|
29
|
+
Ensure you have clang installed with fuzzing support. Under macOS or other platforms, fuzzing support may not be enabled by default.
|
|
30
|
+
|
|
31
|
+
```shell
|
|
32
|
+
cd fuzz
|
|
33
|
+
./build.sh
|
|
34
|
+
mkdir -p corpus/base64
|
|
35
|
+
out/base64 corpus/base64
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Developing fuzzers in an IDE
|
|
39
|
+
Using an IDE is nice because it gives code completion, debug support etc.
|
|
40
|
+
Make sure the SIMDUTF_FUZZ_FUZZERS is set to on. This should work regardless
|
|
41
|
+
of platform, regardless if libFuzzer is available. There will however be no
|
|
42
|
+
instrumentation, to get that CXXFLAGS have to be set. Easiest is to use the
|
|
43
|
+
build.sh script outside of the IDE and have two builds, one in the IDE to work
|
|
44
|
+
with and the one created by the build.sh script.
|
|
45
|
+
|
|
46
|
+
## Run files through a non-fuzz enabled build
|
|
47
|
+
This is useful for instance to test that a gcc build has no errors
|
|
48
|
+
on fuzz input.
|
|
49
|
+
|
|
50
|
+
Example using a sanitized build:
|
|
51
|
+
```shell
|
|
52
|
+
export CXX=/usr/lib/ccache/g++-14
|
|
53
|
+
cmake -B /tmp/build-gcc -DSIMDUTF_SANITIZE=On -DSIMDUTF_SANITIZE_UNDEFINED=On -DSIMDUTF_FUZZERS=On -S . -GNinja
|
|
54
|
+
cmake --build /tmp/build-gcc
|
|
55
|
+
/tmp/build-gcc/fuzz/conversion corpus/conversion
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Or, running through valgrind:
|
|
59
|
+
```shell
|
|
60
|
+
export CXX=/usr/lib/ccache/g++-14
|
|
61
|
+
cmake -B /tmp/build-gcc-for-valgrind -DSIMDUTF_FUZZERS=On -S . -GNinja
|
|
62
|
+
cmake --build /tmp/build-gcc-for-valgrind
|
|
63
|
+
/tmp/build-gcc-for-valgrind/fuzz/conversion corpus/conversion
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## Minimizing a crash
|
|
67
|
+
This is easiest shown with an example:
|
|
68
|
+
```shell
|
|
69
|
+
./build.sh
|
|
70
|
+
mkdir -p corpus/conversion
|
|
71
|
+
out/conversion corpus/conversion
|
|
72
|
+
# ...crashes...
|
|
73
|
+
# crash-XXXX is created where XXXX is a hash of the crashing input
|
|
74
|
+
./minimize_and_cleanse.sh out/conversion crash-*
|
|
75
|
+
# you now find cleaned_crash.conversion in the current directory
|
|
76
|
+
# see if it reproduces (it should)
|
|
77
|
+
out/conversion cleaned_crash.conversion
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Some of the fuzzers support printing out a reproducer, which makes it easy to
|
|
81
|
+
convert the fuzz finding into a unit test.
|
|
82
|
+
|
|
83
|
+
## Continuous fuzzing
|
|
84
|
+
|
|
85
|
+
There is a script in `random_fuzz.sh` which is useful to do ad-hoc fuzzing.
|
|
86
|
+
It selects a random compiler optimization level, sanitizer setup and runs the
|
|
87
|
+
fuzzers for a limited time. Then it pulls from git and repeats. This way, it is
|
|
88
|
+
easy to take a system and run some fuzzing. It is recommended to run it in tmux
|
|
89
|
+
or gnu screen, to avoid having it interrupt in case the network goes down.
|
|
90
|
+
|
|
91
|
+
The script has so far been tested on
|
|
92
|
+
- debian bookworm (amd64/icelake, aarch64)
|
|
93
|
+
- rocky linux 9 (amd64/icelake)
|
|
94
|
+
- freebsd (aarch64)
|
|
95
|
+
|
|
96
|
+
We are happy to get some testing on architectures which are not fuzzed already.
|
|
97
|
+
If you have a power, riscv or lsx system, it would be great if you can run this
|
|
98
|
+
for a few days and report back.
|
|
99
|
+
|
|
100
|
+
Assuming clang and cmake are available, testing this should be as easy as:
|
|
101
|
+
```shell
|
|
102
|
+
git clone https://github.com/simdutf/simdutf
|
|
103
|
+
simdutf/fuzz/random_fuzz.sh
|
|
104
|
+
# let it run as long as you wish for
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## Fuzzing using qemu
|
|
108
|
+
|
|
109
|
+
It is useful to use virtualization for fuzzing on architectures when it
|
|
110
|
+
is for some reason difficult or impractical to run on matching hardware.
|
|
111
|
+
|
|
112
|
+
The [qemu project](https://www.qemu.org/) is very capable and already used for
|
|
113
|
+
CI in this project.
|
|
114
|
+
|
|
115
|
+
### Fuzzing on emulated riscv64 with vector extensions
|
|
116
|
+
|
|
117
|
+
Debian is used, which provides a clang version with sanitizers enabled. There
|
|
118
|
+
is a [project providing prebuilt qemu images](https://people.debian.org/~gio/dqib/)
|
|
119
|
+
which are easy to use.
|
|
120
|
+
|
|
121
|
+
This shows how to get the fuzzers running on a debian system (tested on
|
|
122
|
+
Debian Trixie running amd64):
|
|
123
|
+
|
|
124
|
+
- install qemu: `apt install qemu-system-riscv`
|
|
125
|
+
- download the qemu image: `wget https://gitlab.com/api/v4/projects/giomasce%2Fdqib/jobs/artifacts/master/download?job=convert_riscv64-virt`
|
|
126
|
+
- unpack it: `unzip "download?job=convert_riscv64-virt"`
|
|
127
|
+
|
|
128
|
+
Some adoption is needed for the provided readme.txt in the unpacked
|
|
129
|
+
folder:
|
|
130
|
+
|
|
131
|
+
- set the number of cpus and memory
|
|
132
|
+
- remove the `-bios` argument
|
|
133
|
+
- specify vector extensions by adding to the `-cpu` flag
|
|
134
|
+
|
|
135
|
+
The following commandlines worked successfully (pick one of them):
|
|
136
|
+
```
|
|
137
|
+
# 128 bit simd
|
|
138
|
+
qemu-system-riscv64 -machine 'virt' -cpu 'rv64,v=on,vlen=128,rvv_ta_all_1s=on,rvv_ma_all_1s=on' -m 8G -smp 5 -device virtio-blk-device,drive=hd -drive file=image.qcow2,if=none,id=hd -device virtio-net-device,netdev=net -netdev user,id=net -kernel /usr/lib/u-boot/qemu-riscv64_smode/uboot.elf -object rng-random,filename=/dev/urandom,id=rng -device virtio-rng-device,rng=rng -nographic -append "root=LABEL=rootfs console=ttyS0"
|
|
139
|
+
# 256 bit simd
|
|
140
|
+
qemu-system-riscv64 -machine 'virt' -cpu 'rv64,v=on,zvbb=on,vlen=256,rvv_ta_all_1s=on,rvv_ma_all_1s=on' -m 8G -smp 5 -device virtio-blk-device,drive=hd -drive file=image.qcow2,if=none,id=hd -device virtio-net-device,netdev=net -netdev user,id=net -kernel /usr/lib/u-boot/qemu-riscv64_smode/uboot.elf -object rng-random,filename=/dev/urandom,id=rng -device virtio-rng-device,rng=rng -nographic -append "root=LABEL=rootfs console=ttyS0"
|
|
141
|
+
" 1024 bit simd
|
|
142
|
+
qemu-system-riscv64 -machine 'virt' -cpu 'rv64,v=on,zvbb=on,vlen=1024,rvv_ta_all_1s=on,rvv_ma_all_1s=on' -m 8G -smp 5 -device virtio-blk-device,drive=hd -drive file=image.qcow2,if=none,id=hd -device virtio-net-device,netdev=net -netdev user,id=net -kernel /usr/lib/u-boot/qemu-riscv64_smode/uboot.elf -object rng-random,filename=/dev/urandom,id=rng -device virtio-rng-device,rng=rng -nographic -append "root=LABEL=rootfs console=ttyS0"
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
Note: with a recent qemu (9.2.0 works fine), it is possible to append
|
|
146
|
+
`,rvv_vl_half_avl=on` to the back of the -cpu option and exercise the code
|
|
147
|
+
somewhat differently.
|
|
148
|
+
|
|
149
|
+
Once the machine has booted, login with root/root. Update the machine with `apt
|
|
150
|
+
update && apt dist-upgrade` and reboot it with ctrl-x ctrl-a, then login again.
|
|
151
|
+
Install necessary packages with `apt install cmake clang-19 wget unzip`
|
|
152
|
+
|
|
153
|
+
Inside the machine, follow the instructions in "Continuous fuzzing" above.
|
|
154
|
+
|
|
155
|
+
The speed of emulation is pretty good. The conversion fuzzer currently reaches
|
|
156
|
+
about 3300 executions/second per core on real hardware (Banana Pi BPI-F3) while
|
|
157
|
+
emulation with 256 bit SIMD gives roughly 2/3 of that speed.
|
|
158
|
+
|
|
159
|
+
### Fuzzing on emulated s390x
|
|
160
|
+
|
|
161
|
+
Use the same approach as described in the riscv64 section above, but use the 390x image instead. Boot with the following line instead of what is proposed in the readme.txt (tune memory and number of cores flags to your liking):
|
|
162
|
+
|
|
163
|
+
```
|
|
164
|
+
wget 'https://gitlab.com/api/v4/projects/giomasce%2Fdqib/jobs/artifacts/master/download?job=convert_s390x-virt'
|
|
165
|
+
unzip 'download?job=convert_s390x-virt'
|
|
166
|
+
cd dqib_s390x-virt
|
|
167
|
+
qemu-system-s390x -machine s390-ccw-virtio -cpu max,zpci=on -m 4G -smp 2 -drive file=image.qcow2 -device virtio-net-ccw,netdev=net -netdev user,id=net,hostfwd=tcp::2222-:22 -kernel kernel -initrd initrd -nographic -append root=LABEL=rootfs console=ttyAMA0
|
|
168
|
+
```
|
|
@@ -0,0 +1,448 @@
|
|
|
1
|
+
#include <chrono>
|
|
2
|
+
#include <cstddef>
|
|
3
|
+
#include <cstdint>
|
|
4
|
+
#include <array>
|
|
5
|
+
#include <format>
|
|
6
|
+
#include <iomanip>
|
|
7
|
+
#include <iostream>
|
|
8
|
+
#include <variant>
|
|
9
|
+
|
|
10
|
+
#include "helpers/common.h"
|
|
11
|
+
#include "simdutf.h"
|
|
12
|
+
|
|
13
|
+
constexpr std::array options = {
|
|
14
|
+
simdutf::base64_default,
|
|
15
|
+
simdutf::base64_url,
|
|
16
|
+
simdutf::base64_default_no_padding,
|
|
17
|
+
simdutf::base64_url_with_padding,
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
constexpr std::array last_chunk = {
|
|
21
|
+
simdutf::last_chunk_handling_options::loose,
|
|
22
|
+
simdutf::last_chunk_handling_options::strict,
|
|
23
|
+
simdutf::last_chunk_handling_options::stop_before_partial};
|
|
24
|
+
|
|
25
|
+
struct decode_result {
|
|
26
|
+
std::vector<char> binary;
|
|
27
|
+
simdutf::result result;
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
template <typename T> std::string get_code(T c) {
|
|
31
|
+
static_assert(std::is_same_v<T, char> || std::is_same_v<T, char16_t>,
|
|
32
|
+
"T must be char or char16_t");
|
|
33
|
+
|
|
34
|
+
using output_type =
|
|
35
|
+
std::conditional_t<std::is_same_v<T, char>, uint8_t, uint16_t>;
|
|
36
|
+
auto value = static_cast<output_type>(c);
|
|
37
|
+
if (c == '\n') {
|
|
38
|
+
return "'\\n'";
|
|
39
|
+
} else if (c == '\r') {
|
|
40
|
+
return "'\\r'";
|
|
41
|
+
} else if (c == '\t') {
|
|
42
|
+
return "'\\t'";
|
|
43
|
+
} else if (c == '\f') {
|
|
44
|
+
return "'\\f'";
|
|
45
|
+
} else if (c == '\\') {
|
|
46
|
+
return "'\\\\'";
|
|
47
|
+
} else if (value >= 32 && value <= 126) { // Printable ASCII range
|
|
48
|
+
return "'" + std::string(1, static_cast<char>(value)) + "'";
|
|
49
|
+
} else {
|
|
50
|
+
std::ostringstream oss;
|
|
51
|
+
oss << "'" << (std::is_same_v<T, char> ? "\\x" : "\\u") << std::hex
|
|
52
|
+
<< std::setw(std::is_same_v<T, char> ? 2 : 4) << std::setfill('0')
|
|
53
|
+
<< static_cast<unsigned>(value) << "'";
|
|
54
|
+
return oss.str();
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
std::string get_test_name() {
|
|
58
|
+
auto now = std::chrono::system_clock::now();
|
|
59
|
+
return std::format("TEST(issue_{:%Y%m%d%H%M}) {{\n", now);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/*
|
|
63
|
+
* decodes the base64 coded input
|
|
64
|
+
*/
|
|
65
|
+
template <typename FromChar, bool atomic>
|
|
66
|
+
decode_result
|
|
67
|
+
decode_impl(std::span<const FromChar> base64_, const auto selected_option,
|
|
68
|
+
const std::size_t decode_buf_size, const auto last_chunk_option,
|
|
69
|
+
const bool decode_up_to_bad_char) {
|
|
70
|
+
std::vector<FromChar> base64(begin(base64_), end(base64_));
|
|
71
|
+
std::size_t outlen = decode_buf_size;
|
|
72
|
+
|
|
73
|
+
decode_result ret;
|
|
74
|
+
ret.binary.resize(decode_buf_size);
|
|
75
|
+
if constexpr (atomic) {
|
|
76
|
+
ret.result = simdutf::atomic_base64_to_binary_safe(
|
|
77
|
+
base64.data(), base64.size(), ret.binary.data(), outlen,
|
|
78
|
+
selected_option, last_chunk_option, decode_up_to_bad_char);
|
|
79
|
+
} else {
|
|
80
|
+
ret.result = simdutf::base64_to_binary_safe(
|
|
81
|
+
base64.data(), base64.size(), ret.binary.data(), outlen,
|
|
82
|
+
selected_option, last_chunk_option, decode_up_to_bad_char);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// the number of written bytes must always be less than the supplied buffer
|
|
86
|
+
assert(outlen <= decode_buf_size);
|
|
87
|
+
|
|
88
|
+
switch (ret.result.error) {
|
|
89
|
+
case simdutf::error_code::OUTPUT_BUFFER_TOO_SMALL: {
|
|
90
|
+
if (!(ret.result.count <= base64.size())) {
|
|
91
|
+
std::cerr << " decode_buf_size=" << decode_buf_size
|
|
92
|
+
<< " outlen=" << outlen << " and result=" << ret.result << '\n';
|
|
93
|
+
std::abort();
|
|
94
|
+
}
|
|
95
|
+
} break;
|
|
96
|
+
case simdutf::error_code::INVALID_BASE64_CHARACTER: {
|
|
97
|
+
assert(ret.result.count < base64.size());
|
|
98
|
+
} break;
|
|
99
|
+
case simdutf::error_code::BASE64_INPUT_REMAINDER: {
|
|
100
|
+
if (!(ret.result.count <= base64.size())) {
|
|
101
|
+
std::cerr << "on input with size=" << base64.size()
|
|
102
|
+
<< ": got BASE64_INPUT_REMAINDER decode_buf_size="
|
|
103
|
+
<< decode_buf_size << " outlen=" << outlen
|
|
104
|
+
<< " and result=" << ret.result << '\n';
|
|
105
|
+
std::abort();
|
|
106
|
+
}
|
|
107
|
+
} break;
|
|
108
|
+
default:;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
// strip away the part that was not written to (this is a temporary workaround
|
|
112
|
+
// to not stop the fuzzing when base64_to_binary_safe writes outside what it
|
|
113
|
+
// reports in outlen)
|
|
114
|
+
ret.binary.resize(outlen);
|
|
115
|
+
|
|
116
|
+
return ret;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
[[nodiscard]] std::uint64_t compute_hash(const auto& data) noexcept {
|
|
120
|
+
constexpr std::uint64_t fnv_prime = 1099511628211ULL;
|
|
121
|
+
constexpr std::uint64_t fnv_offset = 14695981039346656037ULL;
|
|
122
|
+
|
|
123
|
+
std::uint64_t hash = fnv_offset;
|
|
124
|
+
for (const auto& item : data) {
|
|
125
|
+
hash ^= static_cast<std::uint64_t>(item);
|
|
126
|
+
hash *= fnv_prime;
|
|
127
|
+
}
|
|
128
|
+
return hash;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
// For debugging purposes, we want to see a careful comparison of the
|
|
132
|
+
// output of the two implementations.
|
|
133
|
+
bool compare_decode_verbose(
|
|
134
|
+
const auto& b64_input, const std::size_t decodesize,
|
|
135
|
+
const simdutf::base64_options options,
|
|
136
|
+
const simdutf::last_chunk_handling_options last_chunk_options,
|
|
137
|
+
const bool decode_up_to_bad_char) {
|
|
138
|
+
std::cerr << "// input size: " << b64_input.size() << "\n";
|
|
139
|
+
std::cerr << "// decode buffer size: " << decodesize << "\n";
|
|
140
|
+
std::cerr << "// options: " << options << "\n";
|
|
141
|
+
std::cerr << "// last chunk options: " << last_chunk_options << "\n";
|
|
142
|
+
std::cerr << "// decode up to bad char: " << decode_up_to_bad_char << "\n";
|
|
143
|
+
std::cerr << "// hash: " << compute_hash(b64_input) << "\n";
|
|
144
|
+
std::cerr << "// implementation tested: "
|
|
145
|
+
<< simdutf::get_active_implementation()->name() << "\n";
|
|
146
|
+
std::cerr << "// ";
|
|
147
|
+
for (std::size_t i = 0; i < b64_input.size(); ++i) {
|
|
148
|
+
std::cerr << uint64_t(b64_input[i]) << ", ";
|
|
149
|
+
if ((i + 1) % 16 == 0) {
|
|
150
|
+
std::cerr << "\n";
|
|
151
|
+
std::cerr << "// ";
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
std::cerr << "\n";
|
|
155
|
+
|
|
156
|
+
const auto s = [&]() {
|
|
157
|
+
if constexpr (sizeof(b64_input[0]) == 1) {
|
|
158
|
+
return std::span<const char>(
|
|
159
|
+
reinterpret_cast<const char*>(b64_input.data()), b64_input.size());
|
|
160
|
+
} else {
|
|
161
|
+
return std::span<const char16_t>(
|
|
162
|
+
reinterpret_cast<const char16_t*>(b64_input.data()),
|
|
163
|
+
b64_input.size());
|
|
164
|
+
}
|
|
165
|
+
}();
|
|
166
|
+
|
|
167
|
+
{
|
|
168
|
+
// We are going to compute the 'true' answer.
|
|
169
|
+
std::vector<char> largebuffer(s.size());
|
|
170
|
+
simdutf::full_result tr =
|
|
171
|
+
simdutf::get_active_implementation()->base64_to_binary_details(
|
|
172
|
+
s.data(), s.size(), largebuffer.data(), options,
|
|
173
|
+
last_chunk_options);
|
|
174
|
+
std::cerr << "// 'correct' output " << tr.output_count << " bytes\n";
|
|
175
|
+
std::cerr << "// 'correct' consumes " << tr.input_count << " characters\n";
|
|
176
|
+
std::cerr << "// 'correct' has error " << tr.error << "\n";
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
std::vector<char> outbuf1(decodesize);
|
|
180
|
+
std::size_t outlen1 = outbuf1.size();
|
|
181
|
+
const auto r1 = simdutf::base64_to_binary_safe(
|
|
182
|
+
s.data(), s.size(), outbuf1.data(), outlen1, options, last_chunk_options,
|
|
183
|
+
decode_up_to_bad_char);
|
|
184
|
+
// Check that the output is zeroed out
|
|
185
|
+
for (std::size_t i = outlen1; i < decodesize; ++i) {
|
|
186
|
+
if (uint8_t(outbuf1.at(i)) != 0) {
|
|
187
|
+
return false;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
std::cerr << "// regular safe produces " << outlen1 << " bytes\n";
|
|
191
|
+
std::cerr << "// regular safe consumes " << r1.count << " characters\n";
|
|
192
|
+
std::cerr << "// regular has error " << r1.error << "\n";
|
|
193
|
+
if (r1.error == simdutf::error_code::INVALID_BASE64_CHARACTER) {
|
|
194
|
+
std::cerr << "// regular has error INVALID_BASE64_CHARACTER\n";
|
|
195
|
+
if (r1.count < s.size()) {
|
|
196
|
+
std::cerr << "// at character " << get_code(s[r1.count]) << "\n";
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
if (r1.error == simdutf::error_code::BASE64_INPUT_REMAINDER) {
|
|
200
|
+
std::cerr << "// regular has error BASE64_INPUT_REMAINDER\n";
|
|
201
|
+
}
|
|
202
|
+
if (r1.error == simdutf::error_code::OUTPUT_BUFFER_TOO_SMALL) {
|
|
203
|
+
std::cerr << "// regular has error OUTPUT_BUFFER_TOO_SMALL\n";
|
|
204
|
+
}
|
|
205
|
+
if (r1.error == simdutf::error_code::SUCCESS) {
|
|
206
|
+
std::cerr << "// regular has error SUCCESS\n";
|
|
207
|
+
}
|
|
208
|
+
std::vector<char> outbuf2(decodesize);
|
|
209
|
+
const auto [r2, outlen2] = simdutf::atomic_base64_to_binary_safe(
|
|
210
|
+
s, outbuf2, options, last_chunk_options, decode_up_to_bad_char);
|
|
211
|
+
for (std::size_t i = outlen2; i < decodesize; ++i) {
|
|
212
|
+
if (uint8_t(outbuf2.at(i)) != 0) {
|
|
213
|
+
return false;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
std::cerr << "// atomic produces " << outlen2 << " bytes\n";
|
|
217
|
+
std::cerr << "// atomic consumes " << r2.count << " characters\n";
|
|
218
|
+
std::cerr << "// atomic has error " << r2.error << "\n";
|
|
219
|
+
if (r2.error == simdutf::error_code::INVALID_BASE64_CHARACTER) {
|
|
220
|
+
std::cerr << "// atomic has error INVALID_BASE64_CHARACTER\n";
|
|
221
|
+
if (r2.count < s.size()) {
|
|
222
|
+
std::cerr << "// at character " << get_code(s[r2.count]) << "\n";
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
if (r2.error == simdutf::error_code::BASE64_INPUT_REMAINDER) {
|
|
226
|
+
std::cerr << "// atomic has error BASE64_INPUT_REMAINDER\n";
|
|
227
|
+
}
|
|
228
|
+
if (r2.error == simdutf::error_code::OUTPUT_BUFFER_TOO_SMALL) {
|
|
229
|
+
std::cerr << "// atomic has error OUTPUT_BUFFER_TOO_SMALL\n";
|
|
230
|
+
}
|
|
231
|
+
if (r2.error == simdutf::error_code::SUCCESS) {
|
|
232
|
+
std::cerr << "// atomic has error SUCCESS\n";
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
// Both must agree on the kind of error
|
|
236
|
+
if (decode_up_to_bad_char) {
|
|
237
|
+
if (r1.error != r2.error) {
|
|
238
|
+
return false;
|
|
239
|
+
}
|
|
240
|
+
} else {
|
|
241
|
+
if ((r1.error == simdutf::error_code::SUCCESS) !=
|
|
242
|
+
(r2.error == simdutf::error_code::SUCCESS)) {
|
|
243
|
+
return false;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
// On success, must agree on the output
|
|
248
|
+
if (r1.error == simdutf::error_code::SUCCESS) {
|
|
249
|
+
if (outlen1 != outlen2 || r1.count != r2.count) {
|
|
250
|
+
return false;
|
|
251
|
+
}
|
|
252
|
+
for (std::size_t i = 0; i < outlen1; ++i) {
|
|
253
|
+
if (+outbuf1.at(i) != +outbuf2.at(i)) {
|
|
254
|
+
return false;
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
// Ensure remainder of the output is equal
|
|
258
|
+
for (std::size_t i = outlen1; i < decodesize; ++i) {
|
|
259
|
+
if (+outbuf1.at(i) != +outbuf2.at(i)) {
|
|
260
|
+
return false;
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
return true;
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
template <typename FromChar>
|
|
268
|
+
void decode(std::span<const FromChar> base64_, const auto selected_option,
|
|
269
|
+
const std::size_t decode_buf_size, const auto last_chunk_option,
|
|
270
|
+
const bool decode_up_to_bad_char) {
|
|
271
|
+
|
|
272
|
+
const auto atomic =
|
|
273
|
+
decode_impl<FromChar, true>(base64_, selected_option, decode_buf_size,
|
|
274
|
+
last_chunk_option, decode_up_to_bad_char);
|
|
275
|
+
const auto non_atomic =
|
|
276
|
+
decode_impl<FromChar, false>(base64_, selected_option, decode_buf_size,
|
|
277
|
+
last_chunk_option, decode_up_to_bad_char);
|
|
278
|
+
|
|
279
|
+
bool bad = false;
|
|
280
|
+
// When decode_up_to_bad_char is true, the error code should be consistent
|
|
281
|
+
if (decode_up_to_bad_char) {
|
|
282
|
+
if (atomic.result.error != non_atomic.result.error) {
|
|
283
|
+
std::cerr << "different error reported! " << atomic.result.error << " vs "
|
|
284
|
+
<< non_atomic.result.error << '\n';
|
|
285
|
+
bad = true;
|
|
286
|
+
}
|
|
287
|
+
} else {
|
|
288
|
+
// When decode_up_to_bad_char is false, they either both succeed or
|
|
289
|
+
// both fail, although the error codes may differ.
|
|
290
|
+
if ((atomic.result.error == simdutf::SUCCESS) !=
|
|
291
|
+
(non_atomic.result.error == simdutf::SUCCESS)) {
|
|
292
|
+
std::cerr << "different error reported! " << atomic.result.error << " vs "
|
|
293
|
+
<< non_atomic.result.error << '\n';
|
|
294
|
+
bad = true;
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
// When they both succeed, the count should be the same.
|
|
298
|
+
if ((atomic.result.error == simdutf::SUCCESS) &&
|
|
299
|
+
(non_atomic.result.error == simdutf::SUCCESS)) {
|
|
300
|
+
if (atomic.result.count != non_atomic.result.count) {
|
|
301
|
+
std::cerr << "different count reported! " << atomic.result.count << " vs "
|
|
302
|
+
<< non_atomic.result.count << '\n';
|
|
303
|
+
bad = true;
|
|
304
|
+
} else if (atomic.binary.size() != non_atomic.binary.size()) {
|
|
305
|
+
if (non_atomic.result.error == simdutf::SUCCESS) {
|
|
306
|
+
// suppress this output, it happens all the time otherwise
|
|
307
|
+
std::cerr << "different data size! " << atomic.binary.size() << " vs "
|
|
308
|
+
<< non_atomic.binary.size() << '\n';
|
|
309
|
+
bad = true;
|
|
310
|
+
}
|
|
311
|
+
} else if (atomic.binary != non_atomic.binary) {
|
|
312
|
+
std::cerr << "different data content! (but same size)\n";
|
|
313
|
+
for (std::size_t i = 0; i < non_atomic.binary.size(); ++i) {
|
|
314
|
+
const auto e1 = non_atomic.binary.at(i);
|
|
315
|
+
const auto e2 = atomic.binary.at(i);
|
|
316
|
+
if (e1 != e2) {
|
|
317
|
+
std::cerr << "non_atomic[" << i << "]=" << +e1 << " != atomic[" << i
|
|
318
|
+
<< "]=" << +e2 << "\n";
|
|
319
|
+
}
|
|
320
|
+
++i;
|
|
321
|
+
}
|
|
322
|
+
bad = true;
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
if (!bad) {
|
|
327
|
+
return;
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
std::cerr << get_test_name();
|
|
331
|
+
bool is_ok = compare_decode_verbose(base64_, decode_buf_size, selected_option,
|
|
332
|
+
last_chunk_option, decode_up_to_bad_char);
|
|
333
|
+
std::cerr << "// implementation tested: "
|
|
334
|
+
<< simdutf::get_active_implementation()->name() << "\n";
|
|
335
|
+
if (is_ok) {
|
|
336
|
+
std::cerr << "// MIGHT NOT BE A FAILURE?????\n";
|
|
337
|
+
} else {
|
|
338
|
+
std::cerr << "// FAILURE VERIFIED\n";
|
|
339
|
+
}
|
|
340
|
+
constexpr bool is_one_byte = (sizeof(FromChar) == 1);
|
|
341
|
+
if (is_one_byte) {
|
|
342
|
+
std::cerr << "// input is char\n";
|
|
343
|
+
} else {
|
|
344
|
+
std::cerr << "// input is char16_t\n";
|
|
345
|
+
}
|
|
346
|
+
if constexpr (is_one_byte) {
|
|
347
|
+
|
|
348
|
+
std::cerr << "// input:\n";
|
|
349
|
+
std::cerr << "// ";
|
|
350
|
+
size_t count = 0;
|
|
351
|
+
|
|
352
|
+
for (auto b : base64_) {
|
|
353
|
+
count++;
|
|
354
|
+
if (count % 128 == 0) {
|
|
355
|
+
std::cerr << "\n// ";
|
|
356
|
+
}
|
|
357
|
+
if (b >= 0x20 && b < 0x7f) {
|
|
358
|
+
std::cerr << static_cast<char>(b);
|
|
359
|
+
} else if (b == '\n' || b == '\r' || b == '\t' || b == '\f' || b == ' ') {
|
|
360
|
+
std::cerr << " ";
|
|
361
|
+
} else {
|
|
362
|
+
std::cerr << "!";
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
std::cerr << "\n";
|
|
366
|
+
std::cerr << "// count=" << count << "\n";
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
std::cerr << "const std::vector<" << (is_one_byte ? "char" : "char16_t")
|
|
370
|
+
<< "> base64{";
|
|
371
|
+
for (auto b : base64_) {
|
|
372
|
+
std::cerr << get_code(b) << ", ";
|
|
373
|
+
}
|
|
374
|
+
std::cerr << "};\n";
|
|
375
|
+
std::cerr << "compare_decode(base64, " << std::dec << decode_buf_size
|
|
376
|
+
<< ", simdutf::" << NAMEOF_ENUM(selected_option) << ",\n";
|
|
377
|
+
std::cerr << "simdutf::last_chunk_handling_options::"
|
|
378
|
+
<< NAMEOF_ENUM(last_chunk_option) << ", "
|
|
379
|
+
<< (decode_up_to_bad_char ? "true" : "false") << ");\n";
|
|
380
|
+
|
|
381
|
+
std::cerr << "ASSERT_TRUE(compare_decode_verbose(base64, " << std::dec
|
|
382
|
+
<< decode_buf_size << ", simdutf::" << NAMEOF_ENUM(selected_option)
|
|
383
|
+
<< ",\n";
|
|
384
|
+
std::cerr << "simdutf::last_chunk_handling_options::"
|
|
385
|
+
<< NAMEOF_ENUM(last_chunk_option) << ", "
|
|
386
|
+
<< (decode_up_to_bad_char ? "true" : "false") << "));\n";
|
|
387
|
+
std::cerr << "};\n";
|
|
388
|
+
// std::abort();
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
|
|
392
|
+
// pick one of the function pointers, based on the fuzz data
|
|
393
|
+
// the first byte is which action to take. step forward
|
|
394
|
+
// several bytes so the input is aligned.
|
|
395
|
+
constexpr auto optionbytes = 6u;
|
|
396
|
+
static_assert(optionbytes % 2 == 0,
|
|
397
|
+
"optionbytes must be even to avoid misaligned char16 pointers");
|
|
398
|
+
|
|
399
|
+
if (size < optionbytes) {
|
|
400
|
+
return 0;
|
|
401
|
+
}
|
|
402
|
+
constexpr auto Ncases = 2u;
|
|
403
|
+
constexpr auto actionmask = std::bit_ceil(Ncases) - 1;
|
|
404
|
+
const auto action = data[0] & actionmask;
|
|
405
|
+
|
|
406
|
+
// pick a random option
|
|
407
|
+
const auto selected_option = [](auto index) {
|
|
408
|
+
if (index >= options.size())
|
|
409
|
+
return options[0];
|
|
410
|
+
else {
|
|
411
|
+
return options[index];
|
|
412
|
+
}
|
|
413
|
+
}(data[1] & (std::bit_ceil(options.size()) - 1));
|
|
414
|
+
const auto selected_last_chunk =
|
|
415
|
+
(selected_option == simdutf::base64_url ||
|
|
416
|
+
selected_option == simdutf::base64_default_no_padding)
|
|
417
|
+
? simdutf::last_chunk_handling_options::loose
|
|
418
|
+
: [](auto index) {
|
|
419
|
+
if (index >= last_chunk.size())
|
|
420
|
+
return last_chunk[0];
|
|
421
|
+
else {
|
|
422
|
+
return last_chunk[index];
|
|
423
|
+
}
|
|
424
|
+
}(data[2] & (std::bit_ceil(last_chunk.size()) - 1));
|
|
425
|
+
|
|
426
|
+
// decode buffer size
|
|
427
|
+
const std::size_t decode_buffer_size = (data[4] << 8) + data[3];
|
|
428
|
+
|
|
429
|
+
const bool decode_up_to_bad_char = data[5] & 0x1;
|
|
430
|
+
|
|
431
|
+
data += optionbytes;
|
|
432
|
+
size -= optionbytes;
|
|
433
|
+
|
|
434
|
+
switch (action) {
|
|
435
|
+
case 0: {
|
|
436
|
+
const std::span<const char> chardata{(const char*)data, size};
|
|
437
|
+
decode(chardata, selected_option, decode_buffer_size, selected_last_chunk,
|
|
438
|
+
decode_up_to_bad_char);
|
|
439
|
+
} break;
|
|
440
|
+
case 1: {
|
|
441
|
+
const std::span<const char16_t> chardata{(const char16_t*)data, size / 2};
|
|
442
|
+
decode(chardata, selected_option, decode_buffer_size, selected_last_chunk,
|
|
443
|
+
decode_up_to_bad_char);
|
|
444
|
+
} break;
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
return 0;
|
|
448
|
+
}
|