re2 1.24.1 → 1.25.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/LICENSE +15 -20
- package/README.md +62 -4
- package/binding.gyp +1 -2
- package/lib/addon.cc +7 -3
- package/lib/exec.cc +4 -4
- package/lib/match.cc +4 -4
- package/lib/pattern.cc +148 -1
- package/lib/replace.cc +5 -4
- package/lib/search.cc +1 -1
- package/lib/set.cc +75 -0
- package/lib/test.cc +1 -1
- package/lib/unicode_properties.h +15840 -0
- package/lib/wrapped_re2.h +11 -4
- package/lib/wrapped_re2_set.h +3 -1
- package/llms-full.txt +37 -7
- package/llms.txt +4 -1
- package/package.json +11 -10
- package/re2.d.ts +2 -0
- package/vendor/abseil-cpp/CMake/AbseilDll.cmake +87 -74
- package/vendor/abseil-cpp/CMakeLists.txt +3 -3
- package/vendor/abseil-cpp/FAQ.md +130 -79
- package/vendor/abseil-cpp/MODULE.bazel +6 -7
- package/vendor/abseil-cpp/absl/BUILD.bazel +6 -0
- package/vendor/abseil-cpp/absl/algorithm/BUILD.bazel +4 -0
- package/vendor/abseil-cpp/absl/algorithm/CMakeLists.txt +4 -0
- package/vendor/abseil-cpp/absl/algorithm/algorithm.h +34 -2
- package/vendor/abseil-cpp/absl/algorithm/container.h +164 -17
- package/vendor/abseil-cpp/absl/algorithm/container_test.cc +390 -13
- package/vendor/abseil-cpp/absl/base/BUILD.bazel +53 -6
- package/vendor/abseil-cpp/absl/base/CMakeLists.txt +28 -4
- package/vendor/abseil-cpp/absl/base/attributes.h +61 -42
- package/vendor/abseil-cpp/absl/base/call_once.h +1 -0
- package/vendor/abseil-cpp/absl/base/casts.h +8 -1
- package/vendor/abseil-cpp/absl/base/casts_test.cc +3 -6
- package/vendor/abseil-cpp/absl/base/config.h +54 -10
- package/vendor/abseil-cpp/absl/base/exception_safety_testing_test.cc +9 -9
- package/vendor/abseil-cpp/absl/base/fast_type_id.h +30 -2
- package/vendor/abseil-cpp/absl/base/fast_type_id_test.cc +3 -0
- package/vendor/abseil-cpp/absl/base/internal/exception_safety_testing.h +15 -12
- package/vendor/abseil-cpp/absl/base/internal/hardening.h +136 -0
- package/vendor/abseil-cpp/absl/base/internal/hardening_test.cc +168 -0
- package/vendor/abseil-cpp/absl/base/internal/iterator_traits.h +2 -2
- package/vendor/abseil-cpp/absl/base/internal/low_level_alloc.cc +6 -0
- package/vendor/abseil-cpp/absl/base/internal/low_level_scheduling.h +77 -15
- package/vendor/abseil-cpp/absl/base/internal/sysinfo.cc +1 -2
- package/vendor/abseil-cpp/absl/base/internal/thread_identity.h +52 -0
- package/vendor/abseil-cpp/absl/base/internal/unscaledcycleclock.h +5 -0
- package/vendor/abseil-cpp/absl/base/macros.h +36 -20
- package/vendor/abseil-cpp/absl/base/nullability.h +4 -3
- package/vendor/abseil-cpp/absl/base/optimization.h +3 -2
- package/vendor/abseil-cpp/absl/base/optimization_test.cc +4 -3
- package/vendor/abseil-cpp/absl/base/options.h +55 -1
- package/vendor/abseil-cpp/absl/base/policy_checks.h +5 -5
- package/vendor/abseil-cpp/absl/base/{internal/throw_delegate.cc → throw_delegate.cc} +9 -7
- package/vendor/abseil-cpp/absl/base/{internal/throw_delegate.h → throw_delegate.h} +4 -14
- package/vendor/abseil-cpp/absl/base/throw_delegate_test.cc +19 -28
- package/vendor/abseil-cpp/absl/cleanup/BUILD.bazel +2 -0
- package/vendor/abseil-cpp/absl/cleanup/CMakeLists.txt +2 -0
- package/vendor/abseil-cpp/absl/cleanup/cleanup.h +3 -2
- package/vendor/abseil-cpp/absl/cleanup/internal/cleanup.h +3 -2
- package/vendor/abseil-cpp/absl/container/BUILD.bazel +19 -7
- package/vendor/abseil-cpp/absl/container/CMakeLists.txt +6 -5
- package/vendor/abseil-cpp/absl/container/btree_benchmark.cc +3 -5
- package/vendor/abseil-cpp/absl/container/btree_set.h +5 -5
- package/vendor/abseil-cpp/absl/container/btree_test.cc +11 -14
- package/vendor/abseil-cpp/absl/container/chunked_queue.h +8 -6
- package/vendor/abseil-cpp/absl/container/chunked_queue_test.cc +5 -5
- package/vendor/abseil-cpp/absl/container/fixed_array.h +14 -13
- package/vendor/abseil-cpp/absl/container/fixed_array_test.cc +3 -3
- package/vendor/abseil-cpp/absl/container/flat_hash_map.h +18 -6
- package/vendor/abseil-cpp/absl/container/flat_hash_map_test.cc +34 -1
- package/vendor/abseil-cpp/absl/container/flat_hash_set.h +21 -7
- package/vendor/abseil-cpp/absl/container/flat_hash_set_test.cc +39 -7
- package/vendor/abseil-cpp/absl/container/inlined_vector.h +29 -29
- package/vendor/abseil-cpp/absl/container/inlined_vector_test.cc +2 -2
- package/vendor/abseil-cpp/absl/container/internal/btree.h +32 -24
- package/vendor/abseil-cpp/absl/container/internal/btree_container.h +16 -17
- package/vendor/abseil-cpp/absl/container/internal/common.h +6 -5
- package/vendor/abseil-cpp/absl/container/internal/common_policy_traits.h +1 -1
- package/vendor/abseil-cpp/absl/container/internal/compressed_tuple.h +16 -16
- package/vendor/abseil-cpp/absl/container/internal/compressed_tuple_test.cc +13 -13
- package/vendor/abseil-cpp/absl/container/internal/container_memory.h +41 -31
- package/vendor/abseil-cpp/absl/container/internal/hash_function_defaults.h +2 -2
- package/vendor/abseil-cpp/absl/container/internal/hash_generator_testing.h +4 -4
- package/vendor/abseil-cpp/absl/container/internal/hash_policy_traits.h +3 -3
- package/vendor/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +27 -19
- package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +2 -2
- package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.h +0 -17
- package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler_test.cc +12 -30
- package/vendor/abseil-cpp/absl/container/internal/inlined_vector.h +28 -28
- package/vendor/abseil-cpp/absl/container/internal/layout.h +13 -13
- package/vendor/abseil-cpp/absl/container/internal/layout_test.cc +3 -2
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_map.h +60 -62
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.cc +59 -39
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.h +619 -326
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_benchmark.cc +25 -2
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_probe_benchmark.cc +4 -4
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_test.cc +575 -159
- package/vendor/abseil-cpp/absl/container/linked_hash_map.h +2 -2
- package/vendor/abseil-cpp/absl/container/node_hash_map.h +27 -15
- package/vendor/abseil-cpp/absl/container/node_hash_map_test.cc +34 -0
- package/vendor/abseil-cpp/absl/container/node_hash_set.h +25 -11
- package/vendor/abseil-cpp/absl/container/node_hash_set_test.cc +39 -7
- package/vendor/abseil-cpp/absl/container/sample_element_size_test.cc +7 -4
- package/vendor/abseil-cpp/absl/crc/BUILD.bazel +0 -1
- package/vendor/abseil-cpp/absl/crc/CMakeLists.txt +2 -3
- package/vendor/abseil-cpp/absl/crc/crc32c_benchmark.cc +2 -1
- package/vendor/abseil-cpp/absl/crc/internal/cpu_detect.cc +6 -6
- package/vendor/abseil-cpp/absl/crc/internal/crc.cc +4 -6
- package/vendor/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +41 -0
- package/vendor/abseil-cpp/absl/crc/internal/crc_internal.h +0 -16
- package/vendor/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +143 -81
- package/vendor/abseil-cpp/absl/debugging/BUILD.bazel +9 -31
- package/vendor/abseil-cpp/absl/debugging/CMakeLists.txt +3 -33
- package/vendor/abseil-cpp/absl/debugging/internal/demangle_rust.h +8 -0
- package/vendor/abseil-cpp/absl/debugging/internal/demangle_test.cc +2 -1
- package/vendor/abseil-cpp/absl/debugging/internal/examine_stack.cc +12 -2
- package/vendor/abseil-cpp/absl/debugging/internal/examine_stack.h +2 -3
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +11 -0
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +13 -4
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +14 -7
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +4 -0
- package/vendor/abseil-cpp/absl/debugging/internal/symbolize.h +46 -36
- package/vendor/abseil-cpp/absl/debugging/stacktrace.cc +18 -58
- package/vendor/abseil-cpp/absl/debugging/stacktrace.h +5 -48
- package/vendor/abseil-cpp/absl/debugging/stacktrace_test.cc +10 -124
- package/vendor/abseil-cpp/absl/debugging/symbolize.cc +20 -2
- package/vendor/abseil-cpp/absl/debugging/symbolize_elf.inc +58 -106
- package/vendor/abseil-cpp/absl/debugging/symbolize_test.cc +37 -36
- package/vendor/abseil-cpp/absl/debugging/symbolize_unimplemented.inc +4 -4
- package/vendor/abseil-cpp/absl/flags/BUILD.bazel +6 -3
- package/vendor/abseil-cpp/absl/flags/CMakeLists.txt +1 -1
- package/vendor/abseil-cpp/absl/flags/commandlineflag.h +8 -6
- package/vendor/abseil-cpp/absl/flags/commandlineflag_test.cc +1 -1
- package/vendor/abseil-cpp/absl/flags/flag_benchmark.cc +5 -5
- package/vendor/abseil-cpp/absl/flags/flag_test.cc +30 -30
- package/vendor/abseil-cpp/absl/flags/internal/flag.cc +4 -4
- package/vendor/abseil-cpp/absl/flags/internal/flag.h +6 -6
- package/vendor/abseil-cpp/absl/flags/marshalling.h +2 -28
- package/vendor/abseil-cpp/absl/flags/marshalling_test.cc +12 -11
- package/vendor/abseil-cpp/absl/flags/reflection_test.cc +1 -1
- package/vendor/abseil-cpp/absl/functional/BUILD.bazel +26 -1
- package/vendor/abseil-cpp/absl/functional/CMakeLists.txt +29 -1
- package/vendor/abseil-cpp/absl/functional/any_invocable.h +13 -14
- package/vendor/abseil-cpp/absl/functional/any_invocable_test.cc +46 -47
- package/vendor/abseil-cpp/absl/functional/bind_back.h +79 -0
- package/vendor/abseil-cpp/absl/functional/bind_back_test.cc +237 -0
- package/vendor/abseil-cpp/absl/functional/bind_front.h +7 -1
- package/vendor/abseil-cpp/absl/functional/bind_front_test.cc +4 -4
- package/vendor/abseil-cpp/absl/functional/function_ref_test.cc +2 -2
- package/vendor/abseil-cpp/absl/functional/internal/any_invocable.h +28 -28
- package/vendor/abseil-cpp/absl/functional/internal/back_binder.h +95 -0
- package/vendor/abseil-cpp/absl/functional/internal/front_binder.h +4 -4
- package/vendor/abseil-cpp/absl/functional/internal/function_ref.h +2 -2
- package/vendor/abseil-cpp/absl/functional/overload_test.cc +13 -13
- package/vendor/abseil-cpp/absl/hash/BUILD.bazel +1 -2
- package/vendor/abseil-cpp/absl/hash/CMakeLists.txt +1 -2
- package/vendor/abseil-cpp/absl/hash/hash.h +1 -1
- package/vendor/abseil-cpp/absl/hash/hash_test.cc +14 -20
- package/vendor/abseil-cpp/absl/hash/hash_testing.h +11 -9
- package/vendor/abseil-cpp/absl/hash/internal/city.cc +39 -51
- package/vendor/abseil-cpp/absl/hash/internal/hash.cc +165 -47
- package/vendor/abseil-cpp/absl/hash/internal/hash.h +82 -26
- package/vendor/abseil-cpp/absl/hash/internal/low_level_hash_test.cc +36 -1
- package/vendor/abseil-cpp/absl/hash/internal/spy_hash_state.h +8 -5
- package/vendor/abseil-cpp/absl/log/BUILD.bazel +5 -2
- package/vendor/abseil-cpp/absl/log/CMakeLists.txt +5 -3
- package/vendor/abseil-cpp/absl/log/absl_vlog_is_on.h +0 -2
- package/vendor/abseil-cpp/absl/log/internal/BUILD.bazel +15 -1
- package/vendor/abseil-cpp/absl/log/internal/log_message.cc +5 -4
- package/vendor/abseil-cpp/absl/log/internal/log_message.h +14 -0
- package/vendor/abseil-cpp/absl/log/internal/nullstream.h +1 -1
- package/vendor/abseil-cpp/absl/log/internal/proto.cc +13 -0
- package/vendor/abseil-cpp/absl/log/internal/structured_proto.cc +5 -5
- package/vendor/abseil-cpp/absl/log/internal/structured_proto.h +6 -5
- package/vendor/abseil-cpp/absl/log/internal/structured_proto_test.cc +3 -3
- package/vendor/abseil-cpp/absl/log/internal/vlog_config.cc +2 -2
- package/vendor/abseil-cpp/absl/log/internal/vlog_config_benchmark.cc +3 -3
- package/vendor/abseil-cpp/absl/log/log_format_test.cc +19 -2
- package/vendor/abseil-cpp/absl/log/log_modifier_methods_test.cc +18 -0
- package/vendor/abseil-cpp/absl/log/log_streamer.h +29 -2
- package/vendor/abseil-cpp/absl/log/log_streamer_test.cc +18 -0
- package/vendor/abseil-cpp/absl/log/scoped_mock_log_test.cc +1 -1
- package/vendor/abseil-cpp/absl/log/vlog_is_on.h +0 -2
- package/vendor/abseil-cpp/absl/log/vlog_is_on_test.cc +6 -5
- package/vendor/abseil-cpp/absl/memory/memory.h +55 -5
- package/vendor/abseil-cpp/absl/memory/memory_test.cc +55 -1
- package/vendor/abseil-cpp/absl/meta/BUILD.bazel +2 -0
- package/vendor/abseil-cpp/absl/meta/internal/requires.h +1 -1
- package/vendor/abseil-cpp/absl/meta/type_traits.h +119 -55
- package/vendor/abseil-cpp/absl/meta/type_traits_test.cc +7 -7
- package/vendor/abseil-cpp/absl/numeric/int128_test.cc +6 -6
- package/vendor/abseil-cpp/absl/profiling/BUILD.bazel +3 -1
- package/vendor/abseil-cpp/absl/profiling/hashtable.cc +0 -4
- package/vendor/abseil-cpp/absl/profiling/internal/profile_builder.cc +32 -33
- package/vendor/abseil-cpp/absl/profiling/internal/profile_builder.h +25 -2
- package/vendor/abseil-cpp/absl/profiling/internal/sample_recorder_test.cc +8 -5
- package/vendor/abseil-cpp/absl/random/BUILD.bazel +13 -1
- package/vendor/abseil-cpp/absl/random/CMakeLists.txt +23 -2
- package/vendor/abseil-cpp/absl/random/benchmarks.cc +1 -1
- package/vendor/abseil-cpp/absl/random/beta_distribution.h +2 -2
- package/vendor/abseil-cpp/absl/random/bit_gen_ref.h +26 -53
- package/vendor/abseil-cpp/absl/random/bit_gen_ref_test.cc +43 -0
- package/vendor/abseil-cpp/absl/random/discrete_distribution.h +1 -1
- package/vendor/abseil-cpp/absl/random/distributions.h +17 -17
- package/vendor/abseil-cpp/absl/random/distributions_test.cc +4 -4
- package/vendor/abseil-cpp/absl/random/exponential_distribution.h +1 -1
- package/vendor/abseil-cpp/absl/random/internal/BUILD.bazel +4 -2
- package/vendor/abseil-cpp/absl/random/internal/distribution_caller.h +8 -21
- package/vendor/abseil-cpp/absl/random/internal/fast_uniform_bits.h +1 -1
- package/vendor/abseil-cpp/absl/random/internal/generate_real.h +1 -1
- package/vendor/abseil-cpp/absl/random/internal/iostream_state_saver.h +2 -2
- package/vendor/abseil-cpp/absl/random/internal/iostream_state_saver_test.cc +3 -2
- package/vendor/abseil-cpp/absl/random/internal/mock_helpers.h +14 -40
- package/vendor/abseil-cpp/absl/random/internal/nonsecure_base.h +2 -2
- package/vendor/abseil-cpp/absl/random/internal/nonsecure_base_test.cc +2 -2
- package/vendor/abseil-cpp/absl/random/internal/pcg_engine.h +6 -6
- package/vendor/abseil-cpp/absl/random/internal/pcg_engine_test.cc +3 -2
- package/vendor/abseil-cpp/absl/random/internal/randen_detect.cc +6 -6
- package/vendor/abseil-cpp/absl/random/internal/randen_engine.h +2 -2
- package/vendor/abseil-cpp/absl/random/internal/randen_engine_test.cc +3 -2
- package/vendor/abseil-cpp/absl/random/internal/randen_test.cc +3 -2
- package/vendor/abseil-cpp/absl/random/internal/salted_seed_seq.h +6 -5
- package/vendor/abseil-cpp/absl/random/internal/seed_material.cc +4 -4
- package/vendor/abseil-cpp/absl/random/internal/seed_material.h +2 -1
- package/vendor/abseil-cpp/absl/random/internal/traits.h +21 -0
- package/vendor/abseil-cpp/absl/random/internal/traits_test.cc +5 -0
- package/vendor/abseil-cpp/absl/random/internal/uniform_helper.h +23 -23
- package/vendor/abseil-cpp/absl/random/internal/uniform_helper_test.cc +2 -1
- package/vendor/abseil-cpp/absl/random/mocking_access.h +74 -0
- package/vendor/abseil-cpp/absl/random/mocking_bit_gen.h +9 -19
- package/vendor/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
- package/vendor/abseil-cpp/absl/status/BUILD.bazel +81 -0
- package/vendor/abseil-cpp/absl/status/CMakeLists.txt +91 -0
- package/vendor/abseil-cpp/absl/status/internal/status_internal.cc +63 -18
- package/vendor/abseil-cpp/absl/status/internal/status_internal.h +26 -2
- package/vendor/abseil-cpp/absl/status/internal/status_matchers.h +22 -8
- package/vendor/abseil-cpp/absl/status/internal/statusor_internal.h +43 -43
- package/vendor/abseil-cpp/absl/status/status.cc +62 -70
- package/vendor/abseil-cpp/absl/status/status.h +249 -23
- package/vendor/abseil-cpp/absl/status/status_benchmark.cc +12 -0
- package/vendor/abseil-cpp/absl/status/status_builder.cc +196 -0
- package/vendor/abseil-cpp/absl/status/status_builder.h +978 -0
- package/vendor/abseil-cpp/absl/status/status_builder_test.cc +380 -0
- package/vendor/abseil-cpp/absl/status/status_macros.h +484 -0
- package/vendor/abseil-cpp/absl/status/status_macros_test.cc +634 -0
- package/vendor/abseil-cpp/absl/status/status_matchers.h +2 -1
- package/vendor/abseil-cpp/absl/status/status_matchers_test.cc +3 -4
- package/vendor/abseil-cpp/absl/status/status_payload_printer.h +3 -2
- package/vendor/abseil-cpp/absl/status/status_test.cc +443 -13
- package/vendor/abseil-cpp/absl/status/statusor.h +69 -36
- package/vendor/abseil-cpp/absl/status/statusor_test.cc +132 -35
- package/vendor/abseil-cpp/absl/strings/BUILD.bazel +42 -7
- package/vendor/abseil-cpp/absl/strings/CMakeLists.txt +33 -4
- package/vendor/abseil-cpp/absl/strings/ascii.h +1 -2
- package/vendor/abseil-cpp/absl/strings/atod_manual_test.cc +5 -5
- package/vendor/abseil-cpp/absl/strings/cord.cc +26 -7
- package/vendor/abseil-cpp/absl/strings/cord.h +23 -13
- package/vendor/abseil-cpp/absl/strings/cord_buffer.h +4 -2
- package/vendor/abseil-cpp/absl/strings/cord_test.cc +85 -9
- package/vendor/abseil-cpp/absl/strings/escaping.cc +176 -30
- package/vendor/abseil-cpp/absl/strings/escaping.h +12 -2
- package/vendor/abseil-cpp/absl/strings/escaping_benchmark.cc +1 -3
- package/vendor/abseil-cpp/absl/strings/escaping_test.cc +18 -18
- package/vendor/abseil-cpp/absl/strings/has_absl_stringify_test.cc +2 -2
- package/vendor/abseil-cpp/absl/strings/has_ostream_operator_test.cc +2 -2
- package/vendor/abseil-cpp/absl/strings/internal/append_and_overwrite.h +10 -10
- package/vendor/abseil-cpp/absl/strings/internal/cordz_sample_token_test.cc +1 -1
- package/vendor/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.cc +6 -0
- package/vendor/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.h +1 -0
- package/vendor/abseil-cpp/absl/strings/internal/escaping.cc +0 -141
- package/vendor/abseil-cpp/absl/strings/internal/escaping.h +2 -26
- package/vendor/abseil-cpp/absl/strings/internal/generic_printer_internal.h +23 -2
- package/vendor/abseil-cpp/absl/strings/internal/generic_printer_test.cc +6 -2
- package/vendor/abseil-cpp/absl/strings/internal/resize_uninitialized.h +31 -24
- package/vendor/abseil-cpp/absl/strings/internal/resize_uninitialized_test.cc +16 -41
- package/vendor/abseil-cpp/absl/strings/internal/stl_type_traits.h +39 -39
- package/vendor/abseil-cpp/absl/strings/internal/str_format/arg.h +14 -22
- package/vendor/abseil-cpp/absl/strings/internal/str_format/bind.h +2 -2
- package/vendor/abseil-cpp/absl/strings/internal/str_format/convert_test.cc +12 -20
- package/vendor/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +510 -307
- package/vendor/abseil-cpp/absl/strings/internal/str_join_internal.h +0 -1
- package/vendor/abseil-cpp/absl/strings/internal/str_split_internal.h +9 -10
- package/vendor/abseil-cpp/absl/strings/internal/string_constant_test.cc +6 -5
- package/vendor/abseil-cpp/absl/strings/internal/stringify_sink.h +12 -0
- package/vendor/abseil-cpp/absl/strings/internal/stringify_stream.h +119 -0
- package/vendor/abseil-cpp/absl/strings/internal/stringify_stream_test.cc +111 -0
- package/vendor/abseil-cpp/absl/strings/numbers.cc +406 -0
- package/vendor/abseil-cpp/absl/strings/numbers.h +4 -0
- package/vendor/abseil-cpp/absl/strings/numbers_test.cc +33 -0
- package/vendor/abseil-cpp/absl/strings/resize_and_overwrite.h +10 -6
- package/vendor/abseil-cpp/absl/strings/str_cat.h +36 -1
- package/vendor/abseil-cpp/absl/strings/str_cat_benchmark.cc +1 -2
- package/vendor/abseil-cpp/absl/strings/str_cat_test.cc +28 -0
- package/vendor/abseil-cpp/absl/strings/str_join_test.cc +4 -4
- package/vendor/abseil-cpp/absl/strings/str_split.h +11 -6
- package/vendor/abseil-cpp/absl/strings/str_split_test.cc +13 -0
- package/vendor/abseil-cpp/absl/strings/substitute.h +2 -2
- package/vendor/abseil-cpp/absl/synchronization/BUILD.bazel +3 -0
- package/vendor/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +21 -0
- package/vendor/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +5 -0
- package/vendor/abseil-cpp/absl/synchronization/mutex.cc +13 -0
- package/vendor/abseil-cpp/absl/synchronization/mutex.h +32 -2
- package/vendor/abseil-cpp/absl/synchronization/mutex_test.cc +17 -3
- package/vendor/abseil-cpp/absl/time/BUILD.bazel +80 -0
- package/vendor/abseil-cpp/absl/time/CMakeLists.txt +73 -0
- package/vendor/abseil-cpp/absl/time/clock.h +3 -0
- package/vendor/abseil-cpp/absl/time/clock_interface.cc +71 -0
- package/vendor/abseil-cpp/absl/time/clock_interface.h +93 -0
- package/vendor/abseil-cpp/absl/time/clock_interface_test.cc +128 -0
- package/vendor/abseil-cpp/absl/time/format.cc +3 -10
- package/vendor/abseil-cpp/absl/time/format_test.cc +12 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +90 -89
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_format_test.cc +80 -5
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_name_win.cc +1 -2
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +10 -15
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/version +1 -1
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Vancouver +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Ho_Chi_Minh +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Phnom_Penh +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Saigon +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Tbilisi +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Vientiane +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Canada/Pacific +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Chisinau +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Tiraspol +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zone1970.tab +1 -1
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zonenow.tab +3 -3
- package/vendor/abseil-cpp/absl/time/simulated_clock.cc +225 -0
- package/vendor/abseil-cpp/absl/time/simulated_clock.h +109 -0
- package/vendor/abseil-cpp/absl/time/simulated_clock_test.cc +614 -0
- package/vendor/abseil-cpp/absl/types/BUILD.bazel +116 -0
- package/vendor/abseil-cpp/absl/types/CMakeLists.txt +100 -0
- package/vendor/abseil-cpp/absl/types/any.h +26 -4
- package/vendor/abseil-cpp/absl/types/any_span.h +1067 -0
- package/vendor/abseil-cpp/absl/types/any_span_benchmark.cc +258 -0
- package/vendor/abseil-cpp/absl/types/any_span_test.cc +1210 -0
- package/vendor/abseil-cpp/absl/types/compare.h +4 -4
- package/vendor/abseil-cpp/absl/types/internal/any_span.h +477 -0
- package/vendor/abseil-cpp/absl/types/internal/span.h +5 -6
- package/vendor/abseil-cpp/absl/types/optional.h +30 -3
- package/vendor/abseil-cpp/absl/types/optional_ref.h +295 -0
- package/vendor/abseil-cpp/absl/types/optional_ref_test.cc +370 -0
- package/vendor/abseil-cpp/absl/types/source_location.cc +18 -0
- package/vendor/abseil-cpp/absl/types/source_location.h +172 -0
- package/vendor/abseil-cpp/absl/types/source_location_test.cc +139 -0
- package/vendor/abseil-cpp/absl/types/span.h +19 -23
- package/vendor/abseil-cpp/absl/types/variant.h +75 -18
- package/vendor/abseil-cpp/absl/types/variant_test.cc +23 -23
- package/vendor/abseil-cpp/absl/utility/BUILD.bazel +1 -0
- package/vendor/abseil-cpp/absl/utility/CMakeLists.txt +1 -0
- package/vendor/abseil-cpp/absl/utility/utility.h +99 -16
- package/vendor/abseil-cpp/ci/absl_alternate_options.h +2 -0
- package/vendor/abseil-cpp/ci/linux_arm_clang-latest_libcxx_bazel.sh +10 -4
- package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_asan_bazel.sh +13 -6
- package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_bazel.sh +10 -4
- package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_tsan_bazel.sh +12 -5
- package/vendor/abseil-cpp/ci/linux_clang-latest_libstdcxx_bazel.sh +9 -2
- package/vendor/abseil-cpp/ci/linux_docker_containers.sh +4 -4
- package/vendor/abseil-cpp/ci/linux_gcc-floor_libstdcxx_bazel.sh +10 -3
- package/vendor/abseil-cpp/ci/linux_gcc-latest_libstdcxx_bazel.sh +8 -2
- package/vendor/abseil-cpp/ci/macos_xcode_bazel.sh +4 -3
- package/vendor/abseil-cpp/ci/macos_xcode_cmake.sh +2 -2
- package/vendor/abseil-cpp/ci/windows_clangcl_bazel.bat +1 -1
- package/vendor/abseil-cpp/ci/windows_msvc_bazel.bat +1 -1
- package/AGENTS.md +0 -131
- package/ARCHITECTURE.md +0 -152
- package/vendor/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer.cc +0 -118
- package/vendor/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer.h +0 -71
- package/vendor/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer_test.cc +0 -97
|
@@ -24,6 +24,7 @@
|
|
|
24
24
|
#include <iostream>
|
|
25
25
|
#include <iterator>
|
|
26
26
|
#include <limits>
|
|
27
|
+
#include <optional>
|
|
27
28
|
#include <random>
|
|
28
29
|
#include <set>
|
|
29
30
|
#include <sstream>
|
|
@@ -61,7 +62,7 @@
|
|
|
61
62
|
#include "absl/strings/str_format.h"
|
|
62
63
|
#include "absl/strings/string_view.h"
|
|
63
64
|
#include "absl/types/compare.h"
|
|
64
|
-
#include "absl/types/
|
|
65
|
+
#include "absl/types/span.h"
|
|
65
66
|
|
|
66
67
|
// convenience local constants
|
|
67
68
|
static constexpr auto FLAT = absl::cord_internal::FLAT;
|
|
@@ -416,7 +417,7 @@ TEST_P(CordTest, Assignment) {
|
|
|
416
417
|
absl::Cord x(absl::string_view("hi there"));
|
|
417
418
|
absl::Cord y(x);
|
|
418
419
|
MaybeHarden(y);
|
|
419
|
-
ASSERT_EQ(x.ExpectedChecksum(),
|
|
420
|
+
ASSERT_EQ(x.ExpectedChecksum(), std::nullopt);
|
|
420
421
|
ASSERT_EQ(std::string(x), "hi there");
|
|
421
422
|
ASSERT_EQ(std::string(y), "hi there");
|
|
422
423
|
ASSERT_TRUE(x == y);
|
|
@@ -618,7 +619,7 @@ TEST_P(CordTest, Subcord) {
|
|
|
618
619
|
std::string(sa))
|
|
619
620
|
<< a;
|
|
620
621
|
if (pos != 0 || end_pos != a.size()) {
|
|
621
|
-
ASSERT_EQ(sa.ExpectedChecksum(),
|
|
622
|
+
ASSERT_EQ(sa.ExpectedChecksum(), std::nullopt);
|
|
622
623
|
}
|
|
623
624
|
}
|
|
624
625
|
}
|
|
@@ -662,7 +663,7 @@ TEST_P(CordTest, Swap) {
|
|
|
662
663
|
MaybeHarden(x);
|
|
663
664
|
swap(x, y);
|
|
664
665
|
if (UseCrc()) {
|
|
665
|
-
ASSERT_EQ(x.ExpectedChecksum(),
|
|
666
|
+
ASSERT_EQ(x.ExpectedChecksum(), std::nullopt);
|
|
666
667
|
ASSERT_EQ(y.ExpectedChecksum(), 1);
|
|
667
668
|
}
|
|
668
669
|
ASSERT_EQ(x, absl::Cord(b));
|
|
@@ -670,7 +671,7 @@ TEST_P(CordTest, Swap) {
|
|
|
670
671
|
x.swap(y);
|
|
671
672
|
if (UseCrc()) {
|
|
672
673
|
ASSERT_EQ(x.ExpectedChecksum(), 1);
|
|
673
|
-
ASSERT_EQ(y.ExpectedChecksum(),
|
|
674
|
+
ASSERT_EQ(y.ExpectedChecksum(), std::nullopt);
|
|
674
675
|
}
|
|
675
676
|
ASSERT_EQ(x, absl::Cord(a));
|
|
676
677
|
ASSERT_EQ(y, absl::Cord(b));
|
|
@@ -735,6 +736,53 @@ TEST_P(CordTest, AppendToString) {
|
|
|
735
736
|
"appending ", "to ", "a ", "string."})));
|
|
736
737
|
}
|
|
737
738
|
|
|
739
|
+
static void VerifyCopyToSpan(const absl::Cord& cord) {
|
|
740
|
+
// Test with span exactly the same size as the cord.
|
|
741
|
+
{
|
|
742
|
+
std::string dst(cord.size(), '\0');
|
|
743
|
+
size_t copied = absl::CopyCordToSpan(cord, absl::MakeSpan(dst));
|
|
744
|
+
EXPECT_EQ(copied, cord.size());
|
|
745
|
+
EXPECT_EQ(dst, cord);
|
|
746
|
+
}
|
|
747
|
+
|
|
748
|
+
// Test with span larger than the cord.
|
|
749
|
+
{
|
|
750
|
+
std::string dst(cord.size() + 10, 'x');
|
|
751
|
+
size_t copied = absl::CopyCordToSpan(cord, absl::MakeSpan(dst));
|
|
752
|
+
EXPECT_EQ(copied, cord.size());
|
|
753
|
+
EXPECT_EQ(absl::string_view(dst).substr(0, copied), cord);
|
|
754
|
+
if (cord.size() < dst.size()) {
|
|
755
|
+
absl::string_view tail = absl::string_view(dst).substr(copied);
|
|
756
|
+
EXPECT_EQ(tail, std::string(tail.size(), 'x'));
|
|
757
|
+
}
|
|
758
|
+
}
|
|
759
|
+
|
|
760
|
+
// Test with span smaller than the cord.
|
|
761
|
+
{
|
|
762
|
+
size_t target_size = cord.size() / 2;
|
|
763
|
+
std::string dst(target_size, '\0');
|
|
764
|
+
size_t copied = absl::CopyCordToSpan(cord, absl::MakeSpan(dst));
|
|
765
|
+
EXPECT_EQ(copied, target_size);
|
|
766
|
+
EXPECT_EQ(dst, std::string(cord).substr(0, target_size));
|
|
767
|
+
}
|
|
768
|
+
|
|
769
|
+
// Test with empty span.
|
|
770
|
+
{
|
|
771
|
+
char c = 'x';
|
|
772
|
+
size_t copied = absl::CopyCordToSpan(cord, absl::MakeSpan(&c, 0));
|
|
773
|
+
EXPECT_EQ(copied, 0);
|
|
774
|
+
EXPECT_EQ(c, 'x');
|
|
775
|
+
}
|
|
776
|
+
}
|
|
777
|
+
|
|
778
|
+
TEST_P(CordTest, CopyToSpan) {
|
|
779
|
+
VerifyCopyToSpan(absl::Cord()); // Empty cords cannot be hardened.
|
|
780
|
+
VerifyCopyToSpan(MaybeHardened(absl::Cord("small cord")));
|
|
781
|
+
VerifyCopyToSpan(MaybeHardened(
|
|
782
|
+
absl::MakeFragmentedCord({"fragmented ", "cord ", "to ", "test ",
|
|
783
|
+
"copying ", "to ", "a ", "span."})));
|
|
784
|
+
}
|
|
785
|
+
|
|
738
786
|
TEST_P(CordTest, AppendEmptyBuffer) {
|
|
739
787
|
absl::Cord cord;
|
|
740
788
|
cord.Append(absl::CordBuffer());
|
|
@@ -1072,7 +1120,7 @@ TEST_P(CordTest, TryFlatSubstrFlat) {
|
|
|
1072
1120
|
TEST_P(CordTest, TryFlatConcat) {
|
|
1073
1121
|
absl::Cord c = absl::MakeFragmentedCord({"hel", "lo"});
|
|
1074
1122
|
MaybeHarden(c);
|
|
1075
|
-
EXPECT_EQ(c.TryFlat(),
|
|
1123
|
+
EXPECT_EQ(c.TryFlat(), std::nullopt);
|
|
1076
1124
|
}
|
|
1077
1125
|
|
|
1078
1126
|
TEST_P(CordTest, TryFlatExternal) {
|
|
@@ -1766,6 +1814,34 @@ TEST_P(CordTest, ConstructFromExternalMoveOnlyReleaser) {
|
|
|
1766
1814
|
EXPECT_TRUE(invoked);
|
|
1767
1815
|
}
|
|
1768
1816
|
|
|
1817
|
+
TEST_P(CordTest, ConstructFromExternalNonConstReleaser) {
|
|
1818
|
+
struct Releaser {
|
|
1819
|
+
explicit Releaser(bool* invoked) : invoked(invoked) {}
|
|
1820
|
+
// Non const method.
|
|
1821
|
+
void operator()(absl::string_view) { *invoked = true; }
|
|
1822
|
+
|
|
1823
|
+
bool* invoked;
|
|
1824
|
+
};
|
|
1825
|
+
|
|
1826
|
+
bool invoked = false;
|
|
1827
|
+
(void)MaybeHardened(absl::MakeCordFromExternal("dummy", Releaser(&invoked)));
|
|
1828
|
+
EXPECT_TRUE(invoked);
|
|
1829
|
+
}
|
|
1830
|
+
|
|
1831
|
+
TEST_P(CordTest, ConstructFromExternalNonConstNoArgReleaser) {
|
|
1832
|
+
struct Releaser {
|
|
1833
|
+
explicit Releaser(bool* invoked) : invoked(invoked) {}
|
|
1834
|
+
// Non const method.
|
|
1835
|
+
void operator()() { *invoked = true; }
|
|
1836
|
+
|
|
1837
|
+
bool* invoked;
|
|
1838
|
+
};
|
|
1839
|
+
|
|
1840
|
+
bool invoked = false;
|
|
1841
|
+
(void)MaybeHardened(absl::MakeCordFromExternal("dummy", Releaser(&invoked)));
|
|
1842
|
+
EXPECT_TRUE(invoked);
|
|
1843
|
+
}
|
|
1844
|
+
|
|
1769
1845
|
TEST_P(CordTest, ConstructFromExternalNoArgLambda) {
|
|
1770
1846
|
bool invoked = false;
|
|
1771
1847
|
(void)MaybeHardened(
|
|
@@ -3138,13 +3214,13 @@ TEST_P(CordTest, ExpectedChecksum) {
|
|
|
3138
3214
|
continue;
|
|
3139
3215
|
}
|
|
3140
3216
|
|
|
3141
|
-
EXPECT_EQ(c2.ExpectedChecksum(),
|
|
3217
|
+
EXPECT_EQ(c2.ExpectedChecksum(), std::nullopt);
|
|
3142
3218
|
|
|
3143
3219
|
if (mutator.CanUndo()) {
|
|
3144
3220
|
// Undoing an operation should not restore the checksum
|
|
3145
3221
|
mutator.Undo(c2);
|
|
3146
3222
|
EXPECT_EQ(c2, base_value);
|
|
3147
|
-
EXPECT_EQ(c2.ExpectedChecksum(),
|
|
3223
|
+
EXPECT_EQ(c2.ExpectedChecksum(), std::nullopt);
|
|
3148
3224
|
}
|
|
3149
3225
|
}
|
|
3150
3226
|
|
|
@@ -3254,7 +3330,7 @@ TEST_P(CordTest, ChecksummedEmptyCord) {
|
|
|
3254
3330
|
// Not a mutation
|
|
3255
3331
|
continue;
|
|
3256
3332
|
}
|
|
3257
|
-
EXPECT_EQ(c2.ExpectedChecksum(),
|
|
3333
|
+
EXPECT_EQ(c2.ExpectedChecksum(), std::nullopt);
|
|
3258
3334
|
|
|
3259
3335
|
if (mutator.CanUndo()) {
|
|
3260
3336
|
mutator.Undo(c2);
|
|
@@ -30,6 +30,7 @@
|
|
|
30
30
|
#include "absl/base/internal/unaligned_access.h"
|
|
31
31
|
#include "absl/base/macros.h"
|
|
32
32
|
#include "absl/base/nullability.h"
|
|
33
|
+
#include "absl/base/optimization.h"
|
|
33
34
|
#include "absl/strings/ascii.h"
|
|
34
35
|
#include "absl/strings/charset.h"
|
|
35
36
|
#include "absl/strings/internal/append_and_overwrite.h"
|
|
@@ -179,14 +180,17 @@ bool CUnescapeInternal(absl::string_view src, bool leave_nulls_escaped,
|
|
|
179
180
|
absl::ascii_isxdigit(static_cast<unsigned char>(src[p + 1]))) {
|
|
180
181
|
// Arbitrarily many hex digits
|
|
181
182
|
ch = (ch << 4) + hex_digit_to_int(src[++p]);
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
183
|
+
// If ch was 0xFF at the start of this loop, the most can it can be
|
|
184
|
+
// here is (0xFF << 4) + 0xF, which is 4095, thus ch cannot overflow
|
|
185
|
+
// 32-bits here. The check below is sufficient.
|
|
186
|
+
if (ch > 0xFF) {
|
|
187
|
+
if (error != nullptr) {
|
|
188
|
+
*error = "Value of \\" +
|
|
189
|
+
std::string(src.substr(hex_start, p + 1 - hex_start)) +
|
|
190
|
+
" exceeds 0xff";
|
|
191
|
+
}
|
|
192
|
+
return false;
|
|
188
193
|
}
|
|
189
|
-
return false;
|
|
190
194
|
}
|
|
191
195
|
if ((ch == 0) && leave_nulls_escaped) {
|
|
192
196
|
// Copy the escape sequence for the null character
|
|
@@ -464,6 +468,165 @@ void CEscapeAndAppendInternal(absl::string_view src,
|
|
|
464
468
|
});
|
|
465
469
|
}
|
|
466
470
|
|
|
471
|
+
// The two strings below provide maps from normal 6-bit characters to their
|
|
472
|
+
// base64-escaped equivalent.
|
|
473
|
+
// For the inverse case, see kUn(WebSafe)Base64 in the external
|
|
474
|
+
// escaping.cc.
|
|
475
|
+
constexpr char kBase64Chars[] =
|
|
476
|
+
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
|
477
|
+
|
|
478
|
+
constexpr char kWebSafeBase64Chars[] =
|
|
479
|
+
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";
|
|
480
|
+
|
|
481
|
+
// ----------------------------------------------------------------------
|
|
482
|
+
// Take the input in groups of 4 characters and turn each
|
|
483
|
+
// character into a code 0 to 63 thus:
|
|
484
|
+
// A-Z map to 0 to 25
|
|
485
|
+
// a-z map to 26 to 51
|
|
486
|
+
// 0-9 map to 52 to 61
|
|
487
|
+
// +(- for WebSafe) maps to 62
|
|
488
|
+
// /(_ for WebSafe) maps to 63
|
|
489
|
+
// There will be four numbers, all less than 64 which can be represented
|
|
490
|
+
// by a 6 digit binary number (aaaaaa, bbbbbb, cccccc, dddddd respectively).
|
|
491
|
+
// Arrange the 6 digit binary numbers into three bytes as such:
|
|
492
|
+
// aaaaaabb bbbbcccc ccdddddd
|
|
493
|
+
// Equals signs (one or two) are used at the end of the encoded block to
|
|
494
|
+
// indicate that the text was not an integer multiple of three bytes long.
|
|
495
|
+
// ----------------------------------------------------------------------
|
|
496
|
+
size_t Base64EscapeInternal(const unsigned char* src, size_t szsrc, char* dest,
|
|
497
|
+
size_t szdest, const char* base64,
|
|
498
|
+
bool do_padding) {
|
|
499
|
+
constexpr char kPad64 = '=';
|
|
500
|
+
|
|
501
|
+
constexpr size_t kMaxSize = (std::numeric_limits<size_t>::max() - 1) / 4 * 3;
|
|
502
|
+
if (ABSL_PREDICT_FALSE(szsrc > kMaxSize || szsrc * 4 > szdest * 3)) return 0;
|
|
503
|
+
|
|
504
|
+
char* cur_dest = dest;
|
|
505
|
+
const unsigned char* cur_src = src;
|
|
506
|
+
|
|
507
|
+
char* const limit_dest = dest + szdest;
|
|
508
|
+
const unsigned char* const limit_src = src + szsrc;
|
|
509
|
+
|
|
510
|
+
// (from https://tools.ietf.org/html/rfc3548)
|
|
511
|
+
// Special processing is performed if fewer than 24 bits are available
|
|
512
|
+
// at the end of the data being encoded. A full encoding quantum is
|
|
513
|
+
// always completed at the end of a quantity. When fewer than 24 input
|
|
514
|
+
// bits are available in an input group, zero bits are added (on the
|
|
515
|
+
// right) to form an integral number of 6-bit groups.
|
|
516
|
+
//
|
|
517
|
+
// If do_padding is true, padding at the end of the data is performed. This
|
|
518
|
+
// output padding uses the '=' character.
|
|
519
|
+
|
|
520
|
+
// Three bytes of data encodes to four characters of cyphertext.
|
|
521
|
+
// So we can pump through three-byte chunks atomically.
|
|
522
|
+
if (szsrc >= 3) { // "limit_src - 3" is UB if szsrc < 3.
|
|
523
|
+
while (cur_src < limit_src - 3) { // While we have >= 32 bits.
|
|
524
|
+
uint32_t in = absl::big_endian::Load32(cur_src) >> 8;
|
|
525
|
+
|
|
526
|
+
cur_dest[0] = base64[in >> 18];
|
|
527
|
+
in &= 0x3FFFF;
|
|
528
|
+
cur_dest[1] = base64[in >> 12];
|
|
529
|
+
in &= 0xFFF;
|
|
530
|
+
cur_dest[2] = base64[in >> 6];
|
|
531
|
+
in &= 0x3F;
|
|
532
|
+
cur_dest[3] = base64[in];
|
|
533
|
+
|
|
534
|
+
cur_dest += 4;
|
|
535
|
+
cur_src += 3;
|
|
536
|
+
}
|
|
537
|
+
}
|
|
538
|
+
// To save time, we didn't update szdest or szsrc in the loop. So do it now.
|
|
539
|
+
szdest = static_cast<size_t>(limit_dest - cur_dest);
|
|
540
|
+
szsrc = static_cast<size_t>(limit_src - cur_src);
|
|
541
|
+
|
|
542
|
+
/* now deal with the tail (<=3 bytes) */
|
|
543
|
+
switch (szsrc) {
|
|
544
|
+
case 0:
|
|
545
|
+
// Nothing left; nothing more to do.
|
|
546
|
+
break;
|
|
547
|
+
case 1: {
|
|
548
|
+
// One byte left: this encodes to two characters, and (optionally)
|
|
549
|
+
// two pad characters to round out the four-character cypherblock.
|
|
550
|
+
if (szdest < 2) return 0;
|
|
551
|
+
uint32_t in = cur_src[0];
|
|
552
|
+
cur_dest[0] = base64[in >> 2];
|
|
553
|
+
in &= 0x3;
|
|
554
|
+
cur_dest[1] = base64[in << 4];
|
|
555
|
+
cur_dest += 2;
|
|
556
|
+
szdest -= 2;
|
|
557
|
+
if (do_padding) {
|
|
558
|
+
if (szdest < 2) return 0;
|
|
559
|
+
cur_dest[0] = kPad64;
|
|
560
|
+
cur_dest[1] = kPad64;
|
|
561
|
+
cur_dest += 2;
|
|
562
|
+
szdest -= 2;
|
|
563
|
+
}
|
|
564
|
+
break;
|
|
565
|
+
}
|
|
566
|
+
case 2: {
|
|
567
|
+
// Two bytes left: this encodes to three characters, and (optionally)
|
|
568
|
+
// one pad character to round out the four-character cypherblock.
|
|
569
|
+
if (szdest < 3) return 0;
|
|
570
|
+
uint32_t in = absl::big_endian::Load16(cur_src);
|
|
571
|
+
cur_dest[0] = base64[in >> 10];
|
|
572
|
+
in &= 0x3FF;
|
|
573
|
+
cur_dest[1] = base64[in >> 4];
|
|
574
|
+
in &= 0x00F;
|
|
575
|
+
cur_dest[2] = base64[in << 2];
|
|
576
|
+
cur_dest += 3;
|
|
577
|
+
szdest -= 3;
|
|
578
|
+
if (do_padding) {
|
|
579
|
+
if (szdest < 1) return 0;
|
|
580
|
+
cur_dest[0] = kPad64;
|
|
581
|
+
cur_dest += 1;
|
|
582
|
+
szdest -= 1;
|
|
583
|
+
}
|
|
584
|
+
break;
|
|
585
|
+
}
|
|
586
|
+
case 3: {
|
|
587
|
+
// Three bytes left: same as in the big loop above. We can't do this in
|
|
588
|
+
// the loop because the loop above always reads 4 bytes, and the fourth
|
|
589
|
+
// byte is past the end of the input.
|
|
590
|
+
if (szdest < 4) return 0;
|
|
591
|
+
uint32_t in =
|
|
592
|
+
(uint32_t{cur_src[0]} << 16) + absl::big_endian::Load16(cur_src + 1);
|
|
593
|
+
cur_dest[0] = base64[in >> 18];
|
|
594
|
+
in &= 0x3FFFF;
|
|
595
|
+
cur_dest[1] = base64[in >> 12];
|
|
596
|
+
in &= 0xFFF;
|
|
597
|
+
cur_dest[2] = base64[in >> 6];
|
|
598
|
+
in &= 0x3F;
|
|
599
|
+
cur_dest[3] = base64[in];
|
|
600
|
+
cur_dest += 4;
|
|
601
|
+
szdest -= 4;
|
|
602
|
+
break;
|
|
603
|
+
}
|
|
604
|
+
default:
|
|
605
|
+
// Should not be reached: blocks of 4 bytes are handled
|
|
606
|
+
// in the while loop before this switch statement.
|
|
607
|
+
ABSL_RAW_LOG(FATAL, "Logic problem? szsrc = %zu", szsrc);
|
|
608
|
+
break;
|
|
609
|
+
}
|
|
610
|
+
return static_cast<size_t>(cur_dest - dest);
|
|
611
|
+
}
|
|
612
|
+
|
|
613
|
+
std::string Base64EscapeToStringInternal(const unsigned char* src, size_t szsrc,
|
|
614
|
+
bool do_padding,
|
|
615
|
+
const char* base64_chars) {
|
|
616
|
+
std::string escaped;
|
|
617
|
+
const size_t calc_escaped_size =
|
|
618
|
+
strings_internal::CalculateBase64EscapedLenInternal(szsrc, do_padding);
|
|
619
|
+
StringResizeAndOverwrite(
|
|
620
|
+
escaped, calc_escaped_size,
|
|
621
|
+
[src, szsrc, base64_chars, do_padding](char* buf, size_t buf_size) {
|
|
622
|
+
const size_t escaped_len = Base64EscapeInternal(
|
|
623
|
+
src, szsrc, buf, buf_size, base64_chars, do_padding);
|
|
624
|
+
assert(escaped_len == buf_size);
|
|
625
|
+
return escaped_len;
|
|
626
|
+
});
|
|
627
|
+
return escaped;
|
|
628
|
+
}
|
|
629
|
+
|
|
467
630
|
// Reverses the mapping in Base64EscapeInternal; see that method's
|
|
468
631
|
// documentation for details of the mapping.
|
|
469
632
|
bool Base64UnescapeInternal(const char* absl_nullable src_param, size_t szsrc,
|
|
@@ -951,33 +1114,16 @@ bool WebSafeBase64Unescape(absl::string_view src,
|
|
|
951
1114
|
return Base64UnescapeInternal(src.data(), src.size(), dest, kUnWebSafeBase64);
|
|
952
1115
|
}
|
|
953
1116
|
|
|
954
|
-
void Base64Escape(absl::string_view src, std::string* absl_nonnull dest) {
|
|
955
|
-
strings_internal::Base64EscapeInternal(
|
|
956
|
-
reinterpret_cast<const unsigned char*>(src.data()), src.size(), dest,
|
|
957
|
-
true, strings_internal::kBase64Chars);
|
|
958
|
-
}
|
|
959
|
-
|
|
960
|
-
void WebSafeBase64Escape(absl::string_view src,
|
|
961
|
-
std::string* absl_nonnull dest) {
|
|
962
|
-
strings_internal::Base64EscapeInternal(
|
|
963
|
-
reinterpret_cast<const unsigned char*>(src.data()), src.size(), dest,
|
|
964
|
-
false, strings_internal::kWebSafeBase64Chars);
|
|
965
|
-
}
|
|
966
|
-
|
|
967
1117
|
std::string Base64Escape(absl::string_view src) {
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
true, strings_internal::kBase64Chars);
|
|
972
|
-
return dest;
|
|
1118
|
+
return Base64EscapeToStringInternal(
|
|
1119
|
+
reinterpret_cast<const unsigned char*>(src.data()), src.size(), true,
|
|
1120
|
+
kBase64Chars);
|
|
973
1121
|
}
|
|
974
1122
|
|
|
975
1123
|
std::string WebSafeBase64Escape(absl::string_view src) {
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
false, strings_internal::kWebSafeBase64Chars);
|
|
980
|
-
return dest;
|
|
1124
|
+
return Base64EscapeToStringInternal(
|
|
1125
|
+
reinterpret_cast<const unsigned char*>(src.data()), src.size(), false,
|
|
1126
|
+
kWebSafeBase64Chars);
|
|
981
1127
|
}
|
|
982
1128
|
|
|
983
1129
|
bool HexStringToBytes(absl::string_view hex, std::string* absl_nonnull bytes) {
|
|
@@ -126,16 +126,26 @@ std::string Utf8SafeCHexEscape(absl::string_view src);
|
|
|
126
126
|
// Encodes a `src` string into a base64-encoded 'dest' string with padding
|
|
127
127
|
// characters. This function conforms with RFC 4648 section 4 (base64) and RFC
|
|
128
128
|
// 2045.
|
|
129
|
-
void Base64Escape(absl::string_view src, std::string* absl_nonnull dest);
|
|
130
129
|
std::string Base64Escape(absl::string_view src);
|
|
130
|
+
[[deprecated(
|
|
131
|
+
"Use the string-returning version of "
|
|
132
|
+
"Base64Escape()")]] ABSL_REFACTOR_INLINE inline void
|
|
133
|
+
Base64Escape(absl::string_view src, std::string* absl_nonnull dest) {
|
|
134
|
+
*dest = Base64Escape(src);
|
|
135
|
+
}
|
|
131
136
|
|
|
132
137
|
// WebSafeBase64Escape()
|
|
133
138
|
//
|
|
134
139
|
// Encodes a `src` string into a base64 string, like Base64Escape() does, but
|
|
135
140
|
// outputs '-' instead of '+' and '_' instead of '/', and does not pad 'dest'.
|
|
136
141
|
// This function conforms with RFC 4648 section 5 (base64url).
|
|
137
|
-
void WebSafeBase64Escape(absl::string_view src, std::string* absl_nonnull dest);
|
|
138
142
|
std::string WebSafeBase64Escape(absl::string_view src);
|
|
143
|
+
[[deprecated(
|
|
144
|
+
"Use the string-returning version of "
|
|
145
|
+
"WebSafeBase64Escape()")]] ABSL_REFACTOR_INLINE inline void
|
|
146
|
+
WebSafeBase64Escape(absl::string_view src, std::string* absl_nonnull dest) {
|
|
147
|
+
*dest = WebSafeBase64Escape(src);
|
|
148
|
+
}
|
|
139
149
|
|
|
140
150
|
// Base64Unescape()
|
|
141
151
|
//
|
|
@@ -49,9 +49,7 @@ void BM_WebSafeBase64Escape_string(benchmark::State& state) {
|
|
|
49
49
|
}
|
|
50
50
|
}
|
|
51
51
|
for (auto _ : state) {
|
|
52
|
-
std::string escaped;
|
|
53
|
-
benchmark::DoNotOptimize(raw);
|
|
54
|
-
absl::WebSafeBase64Escape(raw, &escaped);
|
|
52
|
+
std::string escaped = absl::WebSafeBase64Escape(raw);
|
|
55
53
|
benchmark::DoNotOptimize(escaped);
|
|
56
54
|
}
|
|
57
55
|
}
|
|
@@ -170,22 +170,23 @@ TEST(Unescape, BasicFunction) {
|
|
|
170
170
|
EXPECT_EQ(out, val.unescaped);
|
|
171
171
|
}
|
|
172
172
|
constexpr absl::string_view bad[] = {
|
|
173
|
-
"\\u1",
|
|
174
|
-
"\\U1",
|
|
175
|
-
"\\Uffffff",
|
|
176
|
-
"\\U00110000",
|
|
177
|
-
"\\uD835",
|
|
178
|
-
"\\U0000DD04",
|
|
179
|
-
"\\777",
|
|
180
|
-
"\\xABCD",
|
|
181
|
-
"
|
|
182
|
-
"endswith\\
|
|
183
|
-
"endswith\\
|
|
184
|
-
"\\
|
|
185
|
-
"\\
|
|
186
|
-
"\\
|
|
187
|
-
"\\
|
|
188
|
-
"
|
|
173
|
+
"\\u1", // too short
|
|
174
|
+
"\\U1", // too short
|
|
175
|
+
"\\Uffffff", // exceeds 0x10ffff (largest Unicode)
|
|
176
|
+
"\\U00110000", // exceeds 0x10ffff (largest Unicode)
|
|
177
|
+
"\\uD835", // surrogate character (D800-DFFF)
|
|
178
|
+
"\\U0000DD04", // surrogate character (D800-DFFF)
|
|
179
|
+
"\\777", // exceeds 0xff
|
|
180
|
+
"\\xABCD", // exceeds 0xff
|
|
181
|
+
"\\x100000041", // overflows uint32_t
|
|
182
|
+
"endswith\\", // ends with "\"
|
|
183
|
+
"endswith\\x", // ends with "\x"
|
|
184
|
+
"endswith\\X", // ends with "\X"
|
|
185
|
+
"\\x.2345678", // non-hex follows "\x"
|
|
186
|
+
"\\X.2345678", // non-hex follows "\X"
|
|
187
|
+
"\\u.2345678", // non-hex follows "\U"
|
|
188
|
+
"\\U.2345678", // non-hex follows "\U"
|
|
189
|
+
"\\.unknown", // unknown escape sequence
|
|
189
190
|
};
|
|
190
191
|
for (const auto e : bad) {
|
|
191
192
|
std::string error;
|
|
@@ -682,8 +683,7 @@ TEST(Base64, DISABLED_HugeData) {
|
|
|
682
683
|
static_assert(kSize % 3 == 0, "kSize must be divisible by 3");
|
|
683
684
|
const std::string huge(kSize, 'x');
|
|
684
685
|
|
|
685
|
-
std::string escaped;
|
|
686
|
-
absl::Base64Escape(huge, &escaped);
|
|
686
|
+
std::string escaped = absl::Base64Escape(huge);
|
|
687
687
|
|
|
688
688
|
// Generates the string that should match a base64 encoded "xxx..." string.
|
|
689
689
|
// "xxx" in base64 is "eHh4".
|
|
@@ -14,10 +14,10 @@
|
|
|
14
14
|
|
|
15
15
|
#include "absl/strings/has_absl_stringify.h"
|
|
16
16
|
|
|
17
|
+
#include <optional>
|
|
17
18
|
#include <string>
|
|
18
19
|
|
|
19
20
|
#include "gtest/gtest.h"
|
|
20
|
-
#include "absl/types/optional.h"
|
|
21
21
|
|
|
22
22
|
namespace {
|
|
23
23
|
|
|
@@ -34,7 +34,7 @@ TEST(HasAbslStringifyTest, Works) {
|
|
|
34
34
|
EXPECT_FALSE(absl::HasAbslStringify<TypeWithoutAbslStringify>::value);
|
|
35
35
|
EXPECT_TRUE(absl::HasAbslStringify<TypeWithAbslStringify>::value);
|
|
36
36
|
EXPECT_FALSE(
|
|
37
|
-
absl::HasAbslStringify<
|
|
37
|
+
absl::HasAbslStringify<std::optional<TypeWithAbslStringify>>::value);
|
|
38
38
|
}
|
|
39
39
|
|
|
40
40
|
} // namespace
|
|
@@ -14,11 +14,11 @@
|
|
|
14
14
|
|
|
15
15
|
#include "absl/strings/has_ostream_operator.h"
|
|
16
16
|
|
|
17
|
+
#include <optional>
|
|
17
18
|
#include <ostream>
|
|
18
19
|
#include <string>
|
|
19
20
|
|
|
20
21
|
#include "gtest/gtest.h"
|
|
21
|
-
#include "absl/types/optional.h"
|
|
22
22
|
|
|
23
23
|
namespace {
|
|
24
24
|
|
|
@@ -33,7 +33,7 @@ struct TypeWithOstreamOp {
|
|
|
33
33
|
TEST(HasOstreamOperatorTest, Works) {
|
|
34
34
|
EXPECT_TRUE(absl::HasOstreamOperator<int>::value);
|
|
35
35
|
EXPECT_TRUE(absl::HasOstreamOperator<std::string>::value);
|
|
36
|
-
EXPECT_FALSE(absl::HasOstreamOperator<
|
|
36
|
+
EXPECT_FALSE(absl::HasOstreamOperator<std::optional<int>>::value);
|
|
37
37
|
EXPECT_FALSE(absl::HasOstreamOperator<TypeWithoutOstreamOp>::value);
|
|
38
38
|
EXPECT_TRUE(absl::HasOstreamOperator<TypeWithOstreamOp>::value);
|
|
39
39
|
}
|
|
@@ -16,9 +16,10 @@
|
|
|
16
16
|
#define ABSL_STRINGS_INTERNAL_APPEND_AND_OVERWRITE_H_
|
|
17
17
|
|
|
18
18
|
#include "absl/base/config.h"
|
|
19
|
-
#include "absl/base/internal/
|
|
19
|
+
#include "absl/base/internal/hardening.h"
|
|
20
20
|
#include "absl/base/macros.h"
|
|
21
21
|
#include "absl/base/optimization.h"
|
|
22
|
+
#include "absl/base/throw_delegate.h"
|
|
22
23
|
#include "absl/strings/resize_and_overwrite.h"
|
|
23
24
|
|
|
24
25
|
namespace absl {
|
|
@@ -46,8 +47,7 @@ template <typename T, typename Op>
|
|
|
46
47
|
void StringAppendAndOverwrite(T& str, typename T::size_type append_n,
|
|
47
48
|
Op append_op) {
|
|
48
49
|
if (ABSL_PREDICT_FALSE(append_n > str.max_size() - str.size())) {
|
|
49
|
-
absl::
|
|
50
|
-
"absl::strings_internal::StringAppendAndOverwrite");
|
|
50
|
+
ThrowStdLengthError("absl::strings_internal::StringAppendAndOverwrite");
|
|
51
51
|
}
|
|
52
52
|
|
|
53
53
|
auto old_size = str.size();
|
|
@@ -57,12 +57,10 @@ void StringAppendAndOverwrite(T& str, typename T::size_type append_n,
|
|
|
57
57
|
// Make sure to always grow by at least a factor of 2x.
|
|
58
58
|
const auto min_growth = str.capacity();
|
|
59
59
|
if (ABSL_PREDICT_FALSE(str.capacity() > str.max_size() - min_growth)) {
|
|
60
|
-
|
|
60
|
+
str.reserve(str.max_size());
|
|
61
61
|
} else if (resize < str.capacity() + min_growth) {
|
|
62
|
-
|
|
62
|
+
str.reserve(str.capacity() + min_growth);
|
|
63
63
|
}
|
|
64
|
-
} else {
|
|
65
|
-
resize = str.capacity();
|
|
66
64
|
}
|
|
67
65
|
|
|
68
66
|
// Avoid calling StringResizeAndOverwrite() here since it does an MSAN
|
|
@@ -72,9 +70,11 @@ void StringAppendAndOverwrite(T& str, typename T::size_type append_n,
|
|
|
72
70
|
str, resize,
|
|
73
71
|
[old_size, append_n, do_append = std::move(append_op)](
|
|
74
72
|
typename T::value_type* data_ptr, typename T::size_type) mutable {
|
|
75
|
-
|
|
76
|
-
std::move(do_append)(data_ptr + old_size, append_n);
|
|
77
|
-
|
|
73
|
+
typename T::size_type num_appended = static_cast<typename T::size_type>(
|
|
74
|
+
std::move(do_append)(data_ptr + old_size, append_n));
|
|
75
|
+
absl::base_internal::HardeningAssertGE(num_appended,
|
|
76
|
+
typename T::size_type{0});
|
|
77
|
+
absl::base_internal::HardeningAssertLE(num_appended, append_n);
|
|
78
78
|
return old_size + num_appended;
|
|
79
79
|
});
|
|
80
80
|
|
|
@@ -16,9 +16,15 @@
|
|
|
16
16
|
|
|
17
17
|
#include <algorithm>
|
|
18
18
|
#include <array>
|
|
19
|
+
#include <cstddef>
|
|
20
|
+
#include <cstdint>
|
|
19
21
|
#include <numeric>
|
|
22
|
+
#include <utility>
|
|
20
23
|
|
|
24
|
+
#include "absl/base/config.h"
|
|
25
|
+
#include "absl/strings/match.h"
|
|
21
26
|
#include "absl/strings/string_view.h"
|
|
27
|
+
|
|
22
28
|
namespace absl {
|
|
23
29
|
ABSL_NAMESPACE_BEGIN
|
|
24
30
|
namespace strings_internal {
|