re2 1.24.0 → 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.
Files changed (370) hide show
  1. package/LICENSE +15 -20
  2. package/README.md +63 -4
  3. package/binding.gyp +1 -2
  4. package/lib/addon.cc +9 -5
  5. package/lib/exec.cc +4 -4
  6. package/lib/match.cc +4 -4
  7. package/lib/new.cc +6 -6
  8. package/lib/pattern.cc +148 -1
  9. package/lib/replace.cc +5 -4
  10. package/lib/search.cc +1 -1
  11. package/lib/set.cc +85 -10
  12. package/lib/test.cc +1 -1
  13. package/lib/unicode_properties.h +15840 -0
  14. package/lib/wrapped_re2.h +40 -4
  15. package/lib/wrapped_re2_set.h +3 -1
  16. package/llms-full.txt +497 -0
  17. package/llms.txt +135 -0
  18. package/package.json +19 -11
  19. package/re2.d.ts +2 -0
  20. package/re2.js +1 -0
  21. package/vendor/abseil-cpp/CMake/AbseilDll.cmake +87 -74
  22. package/vendor/abseil-cpp/CMakeLists.txt +3 -3
  23. package/vendor/abseil-cpp/FAQ.md +130 -79
  24. package/vendor/abseil-cpp/MODULE.bazel +6 -7
  25. package/vendor/abseil-cpp/absl/BUILD.bazel +6 -0
  26. package/vendor/abseil-cpp/absl/algorithm/BUILD.bazel +4 -0
  27. package/vendor/abseil-cpp/absl/algorithm/CMakeLists.txt +4 -0
  28. package/vendor/abseil-cpp/absl/algorithm/algorithm.h +34 -2
  29. package/vendor/abseil-cpp/absl/algorithm/container.h +164 -17
  30. package/vendor/abseil-cpp/absl/algorithm/container_test.cc +390 -13
  31. package/vendor/abseil-cpp/absl/base/BUILD.bazel +53 -6
  32. package/vendor/abseil-cpp/absl/base/CMakeLists.txt +28 -4
  33. package/vendor/abseil-cpp/absl/base/attributes.h +61 -42
  34. package/vendor/abseil-cpp/absl/base/call_once.h +1 -0
  35. package/vendor/abseil-cpp/absl/base/casts.h +8 -1
  36. package/vendor/abseil-cpp/absl/base/casts_test.cc +3 -6
  37. package/vendor/abseil-cpp/absl/base/config.h +53 -9
  38. package/vendor/abseil-cpp/absl/base/exception_safety_testing_test.cc +9 -9
  39. package/vendor/abseil-cpp/absl/base/fast_type_id.h +30 -2
  40. package/vendor/abseil-cpp/absl/base/fast_type_id_test.cc +3 -0
  41. package/vendor/abseil-cpp/absl/base/internal/exception_safety_testing.h +15 -12
  42. package/vendor/abseil-cpp/absl/base/internal/hardening.h +136 -0
  43. package/vendor/abseil-cpp/absl/base/internal/hardening_test.cc +168 -0
  44. package/vendor/abseil-cpp/absl/base/internal/iterator_traits.h +2 -2
  45. package/vendor/abseil-cpp/absl/base/internal/low_level_alloc.cc +6 -0
  46. package/vendor/abseil-cpp/absl/base/internal/low_level_scheduling.h +77 -15
  47. package/vendor/abseil-cpp/absl/base/internal/sysinfo.cc +1 -2
  48. package/vendor/abseil-cpp/absl/base/internal/thread_identity.h +52 -0
  49. package/vendor/abseil-cpp/absl/base/internal/unscaledcycleclock.h +5 -0
  50. package/vendor/abseil-cpp/absl/base/macros.h +36 -20
  51. package/vendor/abseil-cpp/absl/base/nullability.h +4 -3
  52. package/vendor/abseil-cpp/absl/base/optimization.h +3 -2
  53. package/vendor/abseil-cpp/absl/base/optimization_test.cc +4 -3
  54. package/vendor/abseil-cpp/absl/base/options.h +55 -1
  55. package/vendor/abseil-cpp/absl/base/policy_checks.h +5 -5
  56. package/vendor/abseil-cpp/absl/base/{internal/throw_delegate.cc → throw_delegate.cc} +9 -7
  57. package/vendor/abseil-cpp/absl/base/{internal/throw_delegate.h → throw_delegate.h} +4 -14
  58. package/vendor/abseil-cpp/absl/base/throw_delegate_test.cc +19 -28
  59. package/vendor/abseil-cpp/absl/cleanup/BUILD.bazel +2 -0
  60. package/vendor/abseil-cpp/absl/cleanup/CMakeLists.txt +2 -0
  61. package/vendor/abseil-cpp/absl/cleanup/cleanup.h +3 -2
  62. package/vendor/abseil-cpp/absl/cleanup/internal/cleanup.h +3 -2
  63. package/vendor/abseil-cpp/absl/container/BUILD.bazel +19 -7
  64. package/vendor/abseil-cpp/absl/container/CMakeLists.txt +6 -5
  65. package/vendor/abseil-cpp/absl/container/btree_benchmark.cc +3 -5
  66. package/vendor/abseil-cpp/absl/container/btree_set.h +5 -5
  67. package/vendor/abseil-cpp/absl/container/btree_test.cc +11 -14
  68. package/vendor/abseil-cpp/absl/container/chunked_queue.h +8 -6
  69. package/vendor/abseil-cpp/absl/container/chunked_queue_test.cc +5 -5
  70. package/vendor/abseil-cpp/absl/container/fixed_array.h +14 -13
  71. package/vendor/abseil-cpp/absl/container/fixed_array_test.cc +3 -3
  72. package/vendor/abseil-cpp/absl/container/flat_hash_map.h +18 -6
  73. package/vendor/abseil-cpp/absl/container/flat_hash_map_test.cc +34 -1
  74. package/vendor/abseil-cpp/absl/container/flat_hash_set.h +21 -7
  75. package/vendor/abseil-cpp/absl/container/flat_hash_set_test.cc +39 -7
  76. package/vendor/abseil-cpp/absl/container/inlined_vector.h +29 -29
  77. package/vendor/abseil-cpp/absl/container/inlined_vector_test.cc +2 -2
  78. package/vendor/abseil-cpp/absl/container/internal/btree.h +32 -24
  79. package/vendor/abseil-cpp/absl/container/internal/btree_container.h +16 -17
  80. package/vendor/abseil-cpp/absl/container/internal/common.h +6 -5
  81. package/vendor/abseil-cpp/absl/container/internal/common_policy_traits.h +1 -1
  82. package/vendor/abseil-cpp/absl/container/internal/compressed_tuple.h +16 -16
  83. package/vendor/abseil-cpp/absl/container/internal/compressed_tuple_test.cc +13 -13
  84. package/vendor/abseil-cpp/absl/container/internal/container_memory.h +41 -31
  85. package/vendor/abseil-cpp/absl/container/internal/hash_function_defaults.h +2 -2
  86. package/vendor/abseil-cpp/absl/container/internal/hash_generator_testing.h +4 -4
  87. package/vendor/abseil-cpp/absl/container/internal/hash_policy_traits.h +3 -3
  88. package/vendor/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +27 -19
  89. package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +2 -2
  90. package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.h +0 -17
  91. package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler_test.cc +12 -30
  92. package/vendor/abseil-cpp/absl/container/internal/inlined_vector.h +28 -28
  93. package/vendor/abseil-cpp/absl/container/internal/layout.h +13 -13
  94. package/vendor/abseil-cpp/absl/container/internal/layout_test.cc +3 -2
  95. package/vendor/abseil-cpp/absl/container/internal/raw_hash_map.h +60 -62
  96. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.cc +59 -39
  97. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.h +619 -326
  98. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_benchmark.cc +25 -2
  99. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_probe_benchmark.cc +4 -4
  100. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_test.cc +575 -159
  101. package/vendor/abseil-cpp/absl/container/linked_hash_map.h +2 -2
  102. package/vendor/abseil-cpp/absl/container/node_hash_map.h +27 -15
  103. package/vendor/abseil-cpp/absl/container/node_hash_map_test.cc +34 -0
  104. package/vendor/abseil-cpp/absl/container/node_hash_set.h +25 -11
  105. package/vendor/abseil-cpp/absl/container/node_hash_set_test.cc +39 -7
  106. package/vendor/abseil-cpp/absl/container/sample_element_size_test.cc +7 -4
  107. package/vendor/abseil-cpp/absl/crc/BUILD.bazel +0 -1
  108. package/vendor/abseil-cpp/absl/crc/CMakeLists.txt +2 -3
  109. package/vendor/abseil-cpp/absl/crc/crc32c_benchmark.cc +2 -1
  110. package/vendor/abseil-cpp/absl/crc/internal/cpu_detect.cc +6 -6
  111. package/vendor/abseil-cpp/absl/crc/internal/crc.cc +4 -6
  112. package/vendor/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +41 -0
  113. package/vendor/abseil-cpp/absl/crc/internal/crc_internal.h +0 -16
  114. package/vendor/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +143 -81
  115. package/vendor/abseil-cpp/absl/debugging/BUILD.bazel +9 -31
  116. package/vendor/abseil-cpp/absl/debugging/CMakeLists.txt +3 -33
  117. package/vendor/abseil-cpp/absl/debugging/internal/demangle_rust.h +8 -0
  118. package/vendor/abseil-cpp/absl/debugging/internal/demangle_test.cc +2 -1
  119. package/vendor/abseil-cpp/absl/debugging/internal/examine_stack.cc +12 -2
  120. package/vendor/abseil-cpp/absl/debugging/internal/examine_stack.h +2 -3
  121. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +11 -0
  122. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +13 -4
  123. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +14 -7
  124. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +4 -0
  125. package/vendor/abseil-cpp/absl/debugging/internal/symbolize.h +46 -36
  126. package/vendor/abseil-cpp/absl/debugging/stacktrace.cc +18 -58
  127. package/vendor/abseil-cpp/absl/debugging/stacktrace.h +5 -48
  128. package/vendor/abseil-cpp/absl/debugging/stacktrace_test.cc +10 -124
  129. package/vendor/abseil-cpp/absl/debugging/symbolize.cc +20 -2
  130. package/vendor/abseil-cpp/absl/debugging/symbolize_elf.inc +58 -106
  131. package/vendor/abseil-cpp/absl/debugging/symbolize_test.cc +37 -36
  132. package/vendor/abseil-cpp/absl/debugging/symbolize_unimplemented.inc +4 -4
  133. package/vendor/abseil-cpp/absl/flags/BUILD.bazel +6 -3
  134. package/vendor/abseil-cpp/absl/flags/CMakeLists.txt +1 -1
  135. package/vendor/abseil-cpp/absl/flags/commandlineflag.h +8 -6
  136. package/vendor/abseil-cpp/absl/flags/commandlineflag_test.cc +1 -1
  137. package/vendor/abseil-cpp/absl/flags/flag_benchmark.cc +5 -5
  138. package/vendor/abseil-cpp/absl/flags/flag_test.cc +30 -30
  139. package/vendor/abseil-cpp/absl/flags/internal/flag.cc +4 -4
  140. package/vendor/abseil-cpp/absl/flags/internal/flag.h +6 -6
  141. package/vendor/abseil-cpp/absl/flags/marshalling.h +2 -28
  142. package/vendor/abseil-cpp/absl/flags/marshalling_test.cc +12 -11
  143. package/vendor/abseil-cpp/absl/flags/reflection_test.cc +1 -1
  144. package/vendor/abseil-cpp/absl/functional/BUILD.bazel +26 -1
  145. package/vendor/abseil-cpp/absl/functional/CMakeLists.txt +29 -1
  146. package/vendor/abseil-cpp/absl/functional/any_invocable.h +13 -14
  147. package/vendor/abseil-cpp/absl/functional/any_invocable_test.cc +46 -47
  148. package/vendor/abseil-cpp/absl/functional/bind_back.h +79 -0
  149. package/vendor/abseil-cpp/absl/functional/bind_back_test.cc +237 -0
  150. package/vendor/abseil-cpp/absl/functional/bind_front.h +7 -1
  151. package/vendor/abseil-cpp/absl/functional/bind_front_test.cc +4 -4
  152. package/vendor/abseil-cpp/absl/functional/function_ref_test.cc +2 -2
  153. package/vendor/abseil-cpp/absl/functional/internal/any_invocable.h +28 -28
  154. package/vendor/abseil-cpp/absl/functional/internal/back_binder.h +95 -0
  155. package/vendor/abseil-cpp/absl/functional/internal/front_binder.h +4 -4
  156. package/vendor/abseil-cpp/absl/functional/internal/function_ref.h +2 -2
  157. package/vendor/abseil-cpp/absl/functional/overload_test.cc +13 -13
  158. package/vendor/abseil-cpp/absl/hash/BUILD.bazel +1 -2
  159. package/vendor/abseil-cpp/absl/hash/CMakeLists.txt +1 -2
  160. package/vendor/abseil-cpp/absl/hash/hash.h +1 -1
  161. package/vendor/abseil-cpp/absl/hash/hash_test.cc +14 -20
  162. package/vendor/abseil-cpp/absl/hash/hash_testing.h +11 -9
  163. package/vendor/abseil-cpp/absl/hash/internal/city.cc +39 -51
  164. package/vendor/abseil-cpp/absl/hash/internal/hash.cc +165 -47
  165. package/vendor/abseil-cpp/absl/hash/internal/hash.h +86 -27
  166. package/vendor/abseil-cpp/absl/hash/internal/low_level_hash_test.cc +36 -1
  167. package/vendor/abseil-cpp/absl/hash/internal/spy_hash_state.h +8 -5
  168. package/vendor/abseil-cpp/absl/log/BUILD.bazel +5 -2
  169. package/vendor/abseil-cpp/absl/log/CMakeLists.txt +5 -3
  170. package/vendor/abseil-cpp/absl/log/absl_vlog_is_on.h +0 -2
  171. package/vendor/abseil-cpp/absl/log/internal/BUILD.bazel +15 -1
  172. package/vendor/abseil-cpp/absl/log/internal/log_message.cc +5 -4
  173. package/vendor/abseil-cpp/absl/log/internal/log_message.h +14 -0
  174. package/vendor/abseil-cpp/absl/log/internal/nullstream.h +1 -1
  175. package/vendor/abseil-cpp/absl/log/internal/proto.cc +13 -0
  176. package/vendor/abseil-cpp/absl/log/internal/structured_proto.cc +5 -5
  177. package/vendor/abseil-cpp/absl/log/internal/structured_proto.h +6 -5
  178. package/vendor/abseil-cpp/absl/log/internal/structured_proto_test.cc +3 -3
  179. package/vendor/abseil-cpp/absl/log/internal/vlog_config.cc +2 -2
  180. package/vendor/abseil-cpp/absl/log/internal/vlog_config_benchmark.cc +3 -3
  181. package/vendor/abseil-cpp/absl/log/log_format_test.cc +19 -2
  182. package/vendor/abseil-cpp/absl/log/log_modifier_methods_test.cc +18 -0
  183. package/vendor/abseil-cpp/absl/log/log_streamer.h +29 -2
  184. package/vendor/abseil-cpp/absl/log/log_streamer_test.cc +18 -0
  185. package/vendor/abseil-cpp/absl/log/scoped_mock_log_test.cc +1 -1
  186. package/vendor/abseil-cpp/absl/log/vlog_is_on.h +0 -2
  187. package/vendor/abseil-cpp/absl/log/vlog_is_on_test.cc +6 -5
  188. package/vendor/abseil-cpp/absl/memory/memory.h +55 -5
  189. package/vendor/abseil-cpp/absl/memory/memory_test.cc +55 -1
  190. package/vendor/abseil-cpp/absl/meta/BUILD.bazel +2 -0
  191. package/vendor/abseil-cpp/absl/meta/internal/requires.h +1 -1
  192. package/vendor/abseil-cpp/absl/meta/type_traits.h +119 -55
  193. package/vendor/abseil-cpp/absl/meta/type_traits_test.cc +7 -7
  194. package/vendor/abseil-cpp/absl/numeric/int128_test.cc +6 -6
  195. package/vendor/abseil-cpp/absl/profiling/BUILD.bazel +3 -1
  196. package/vendor/abseil-cpp/absl/profiling/hashtable.cc +0 -4
  197. package/vendor/abseil-cpp/absl/profiling/internal/profile_builder.cc +32 -33
  198. package/vendor/abseil-cpp/absl/profiling/internal/profile_builder.h +25 -2
  199. package/vendor/abseil-cpp/absl/profiling/internal/sample_recorder_test.cc +8 -5
  200. package/vendor/abseil-cpp/absl/random/BUILD.bazel +13 -1
  201. package/vendor/abseil-cpp/absl/random/CMakeLists.txt +23 -2
  202. package/vendor/abseil-cpp/absl/random/benchmarks.cc +1 -1
  203. package/vendor/abseil-cpp/absl/random/beta_distribution.h +2 -2
  204. package/vendor/abseil-cpp/absl/random/bit_gen_ref.h +26 -53
  205. package/vendor/abseil-cpp/absl/random/bit_gen_ref_test.cc +43 -0
  206. package/vendor/abseil-cpp/absl/random/discrete_distribution.h +1 -1
  207. package/vendor/abseil-cpp/absl/random/distributions.h +17 -17
  208. package/vendor/abseil-cpp/absl/random/distributions_test.cc +4 -4
  209. package/vendor/abseil-cpp/absl/random/exponential_distribution.h +1 -1
  210. package/vendor/abseil-cpp/absl/random/internal/BUILD.bazel +4 -2
  211. package/vendor/abseil-cpp/absl/random/internal/distribution_caller.h +8 -21
  212. package/vendor/abseil-cpp/absl/random/internal/fast_uniform_bits.h +1 -1
  213. package/vendor/abseil-cpp/absl/random/internal/generate_real.h +1 -1
  214. package/vendor/abseil-cpp/absl/random/internal/iostream_state_saver.h +2 -2
  215. package/vendor/abseil-cpp/absl/random/internal/iostream_state_saver_test.cc +3 -2
  216. package/vendor/abseil-cpp/absl/random/internal/mock_helpers.h +14 -40
  217. package/vendor/abseil-cpp/absl/random/internal/nonsecure_base.h +2 -2
  218. package/vendor/abseil-cpp/absl/random/internal/nonsecure_base_test.cc +2 -2
  219. package/vendor/abseil-cpp/absl/random/internal/pcg_engine.h +6 -6
  220. package/vendor/abseil-cpp/absl/random/internal/pcg_engine_test.cc +3 -2
  221. package/vendor/abseil-cpp/absl/random/internal/randen_detect.cc +6 -6
  222. package/vendor/abseil-cpp/absl/random/internal/randen_engine.h +2 -2
  223. package/vendor/abseil-cpp/absl/random/internal/randen_engine_test.cc +3 -2
  224. package/vendor/abseil-cpp/absl/random/internal/randen_test.cc +3 -2
  225. package/vendor/abseil-cpp/absl/random/internal/salted_seed_seq.h +6 -5
  226. package/vendor/abseil-cpp/absl/random/internal/seed_material.cc +4 -4
  227. package/vendor/abseil-cpp/absl/random/internal/seed_material.h +2 -1
  228. package/vendor/abseil-cpp/absl/random/internal/traits.h +21 -0
  229. package/vendor/abseil-cpp/absl/random/internal/traits_test.cc +5 -0
  230. package/vendor/abseil-cpp/absl/random/internal/uniform_helper.h +23 -23
  231. package/vendor/abseil-cpp/absl/random/internal/uniform_helper_test.cc +2 -1
  232. package/vendor/abseil-cpp/absl/random/mocking_access.h +74 -0
  233. package/vendor/abseil-cpp/absl/random/mocking_bit_gen.h +9 -19
  234. package/vendor/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
  235. package/vendor/abseil-cpp/absl/status/BUILD.bazel +81 -0
  236. package/vendor/abseil-cpp/absl/status/CMakeLists.txt +91 -0
  237. package/vendor/abseil-cpp/absl/status/internal/status_internal.cc +63 -18
  238. package/vendor/abseil-cpp/absl/status/internal/status_internal.h +26 -2
  239. package/vendor/abseil-cpp/absl/status/internal/status_matchers.h +22 -8
  240. package/vendor/abseil-cpp/absl/status/internal/statusor_internal.h +43 -43
  241. package/vendor/abseil-cpp/absl/status/status.cc +62 -70
  242. package/vendor/abseil-cpp/absl/status/status.h +249 -23
  243. package/vendor/abseil-cpp/absl/status/status_benchmark.cc +12 -0
  244. package/vendor/abseil-cpp/absl/status/status_builder.cc +196 -0
  245. package/vendor/abseil-cpp/absl/status/status_builder.h +978 -0
  246. package/vendor/abseil-cpp/absl/status/status_builder_test.cc +380 -0
  247. package/vendor/abseil-cpp/absl/status/status_macros.h +484 -0
  248. package/vendor/abseil-cpp/absl/status/status_macros_test.cc +634 -0
  249. package/vendor/abseil-cpp/absl/status/status_matchers.h +2 -1
  250. package/vendor/abseil-cpp/absl/status/status_matchers_test.cc +3 -4
  251. package/vendor/abseil-cpp/absl/status/status_payload_printer.h +3 -2
  252. package/vendor/abseil-cpp/absl/status/status_test.cc +443 -13
  253. package/vendor/abseil-cpp/absl/status/statusor.h +69 -36
  254. package/vendor/abseil-cpp/absl/status/statusor_test.cc +132 -35
  255. package/vendor/abseil-cpp/absl/strings/BUILD.bazel +42 -7
  256. package/vendor/abseil-cpp/absl/strings/CMakeLists.txt +33 -4
  257. package/vendor/abseil-cpp/absl/strings/ascii.h +1 -2
  258. package/vendor/abseil-cpp/absl/strings/atod_manual_test.cc +5 -5
  259. package/vendor/abseil-cpp/absl/strings/cord.cc +26 -7
  260. package/vendor/abseil-cpp/absl/strings/cord.h +23 -13
  261. package/vendor/abseil-cpp/absl/strings/cord_buffer.h +4 -2
  262. package/vendor/abseil-cpp/absl/strings/cord_test.cc +85 -9
  263. package/vendor/abseil-cpp/absl/strings/escaping.cc +183 -35
  264. package/vendor/abseil-cpp/absl/strings/escaping.h +12 -2
  265. package/vendor/abseil-cpp/absl/strings/escaping_benchmark.cc +1 -3
  266. package/vendor/abseil-cpp/absl/strings/escaping_test.cc +22 -18
  267. package/vendor/abseil-cpp/absl/strings/has_absl_stringify_test.cc +2 -2
  268. package/vendor/abseil-cpp/absl/strings/has_ostream_operator_test.cc +2 -2
  269. package/vendor/abseil-cpp/absl/strings/internal/append_and_overwrite.h +10 -10
  270. package/vendor/abseil-cpp/absl/strings/internal/cordz_sample_token_test.cc +1 -1
  271. package/vendor/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.cc +6 -0
  272. package/vendor/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.h +1 -0
  273. package/vendor/abseil-cpp/absl/strings/internal/escaping.cc +0 -141
  274. package/vendor/abseil-cpp/absl/strings/internal/escaping.h +2 -26
  275. package/vendor/abseil-cpp/absl/strings/internal/generic_printer_internal.h +23 -2
  276. package/vendor/abseil-cpp/absl/strings/internal/generic_printer_test.cc +6 -2
  277. package/vendor/abseil-cpp/absl/strings/internal/resize_uninitialized.h +31 -24
  278. package/vendor/abseil-cpp/absl/strings/internal/resize_uninitialized_test.cc +16 -41
  279. package/vendor/abseil-cpp/absl/strings/internal/stl_type_traits.h +39 -39
  280. package/vendor/abseil-cpp/absl/strings/internal/str_format/arg.h +14 -22
  281. package/vendor/abseil-cpp/absl/strings/internal/str_format/bind.h +2 -2
  282. package/vendor/abseil-cpp/absl/strings/internal/str_format/convert_test.cc +12 -20
  283. package/vendor/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +510 -307
  284. package/vendor/abseil-cpp/absl/strings/internal/str_join_internal.h +0 -1
  285. package/vendor/abseil-cpp/absl/strings/internal/str_split_internal.h +9 -10
  286. package/vendor/abseil-cpp/absl/strings/internal/string_constant_test.cc +6 -5
  287. package/vendor/abseil-cpp/absl/strings/internal/stringify_sink.h +12 -0
  288. package/vendor/abseil-cpp/absl/strings/internal/stringify_stream.h +119 -0
  289. package/vendor/abseil-cpp/absl/strings/internal/stringify_stream_test.cc +111 -0
  290. package/vendor/abseil-cpp/absl/strings/numbers.cc +406 -0
  291. package/vendor/abseil-cpp/absl/strings/numbers.h +4 -0
  292. package/vendor/abseil-cpp/absl/strings/numbers_test.cc +33 -0
  293. package/vendor/abseil-cpp/absl/strings/resize_and_overwrite.h +10 -6
  294. package/vendor/abseil-cpp/absl/strings/str_cat.h +36 -1
  295. package/vendor/abseil-cpp/absl/strings/str_cat_benchmark.cc +1 -2
  296. package/vendor/abseil-cpp/absl/strings/str_cat_test.cc +28 -0
  297. package/vendor/abseil-cpp/absl/strings/str_join_test.cc +4 -4
  298. package/vendor/abseil-cpp/absl/strings/str_split.h +11 -6
  299. package/vendor/abseil-cpp/absl/strings/str_split_test.cc +13 -0
  300. package/vendor/abseil-cpp/absl/strings/substitute.h +2 -2
  301. package/vendor/abseil-cpp/absl/synchronization/BUILD.bazel +3 -0
  302. package/vendor/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +21 -0
  303. package/vendor/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +5 -0
  304. package/vendor/abseil-cpp/absl/synchronization/mutex.cc +13 -0
  305. package/vendor/abseil-cpp/absl/synchronization/mutex.h +32 -2
  306. package/vendor/abseil-cpp/absl/synchronization/mutex_test.cc +17 -3
  307. package/vendor/abseil-cpp/absl/time/BUILD.bazel +80 -0
  308. package/vendor/abseil-cpp/absl/time/CMakeLists.txt +73 -0
  309. package/vendor/abseil-cpp/absl/time/clock.h +3 -0
  310. package/vendor/abseil-cpp/absl/time/clock_interface.cc +71 -0
  311. package/vendor/abseil-cpp/absl/time/clock_interface.h +93 -0
  312. package/vendor/abseil-cpp/absl/time/clock_interface_test.cc +128 -0
  313. package/vendor/abseil-cpp/absl/time/format.cc +3 -10
  314. package/vendor/abseil-cpp/absl/time/format_test.cc +12 -0
  315. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +90 -89
  316. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_format_test.cc +80 -5
  317. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_name_win.cc +1 -2
  318. package/vendor/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +10 -15
  319. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/version +1 -1
  320. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Vancouver +0 -0
  321. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Ho_Chi_Minh +0 -0
  322. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Phnom_Penh +0 -0
  323. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Saigon +0 -0
  324. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Tbilisi +0 -0
  325. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Vientiane +0 -0
  326. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Canada/Pacific +0 -0
  327. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Chisinau +0 -0
  328. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Tiraspol +0 -0
  329. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zone1970.tab +1 -1
  330. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zonenow.tab +3 -3
  331. package/vendor/abseil-cpp/absl/time/simulated_clock.cc +225 -0
  332. package/vendor/abseil-cpp/absl/time/simulated_clock.h +109 -0
  333. package/vendor/abseil-cpp/absl/time/simulated_clock_test.cc +614 -0
  334. package/vendor/abseil-cpp/absl/types/BUILD.bazel +116 -0
  335. package/vendor/abseil-cpp/absl/types/CMakeLists.txt +100 -0
  336. package/vendor/abseil-cpp/absl/types/any.h +26 -4
  337. package/vendor/abseil-cpp/absl/types/any_span.h +1067 -0
  338. package/vendor/abseil-cpp/absl/types/any_span_benchmark.cc +258 -0
  339. package/vendor/abseil-cpp/absl/types/any_span_test.cc +1210 -0
  340. package/vendor/abseil-cpp/absl/types/compare.h +4 -4
  341. package/vendor/abseil-cpp/absl/types/internal/any_span.h +477 -0
  342. package/vendor/abseil-cpp/absl/types/internal/span.h +5 -6
  343. package/vendor/abseil-cpp/absl/types/optional.h +30 -3
  344. package/vendor/abseil-cpp/absl/types/optional_ref.h +295 -0
  345. package/vendor/abseil-cpp/absl/types/optional_ref_test.cc +370 -0
  346. package/vendor/abseil-cpp/absl/types/source_location.cc +18 -0
  347. package/vendor/abseil-cpp/absl/types/source_location.h +172 -0
  348. package/vendor/abseil-cpp/absl/types/source_location_test.cc +139 -0
  349. package/vendor/abseil-cpp/absl/types/span.h +19 -23
  350. package/vendor/abseil-cpp/absl/types/variant.h +75 -18
  351. package/vendor/abseil-cpp/absl/types/variant_test.cc +23 -23
  352. package/vendor/abseil-cpp/absl/utility/BUILD.bazel +1 -0
  353. package/vendor/abseil-cpp/absl/utility/CMakeLists.txt +1 -0
  354. package/vendor/abseil-cpp/absl/utility/utility.h +99 -16
  355. package/vendor/abseil-cpp/ci/absl_alternate_options.h +2 -0
  356. package/vendor/abseil-cpp/ci/linux_arm_clang-latest_libcxx_bazel.sh +10 -4
  357. package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_asan_bazel.sh +13 -6
  358. package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_bazel.sh +10 -4
  359. package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_tsan_bazel.sh +12 -5
  360. package/vendor/abseil-cpp/ci/linux_clang-latest_libstdcxx_bazel.sh +9 -2
  361. package/vendor/abseil-cpp/ci/linux_docker_containers.sh +4 -4
  362. package/vendor/abseil-cpp/ci/linux_gcc-floor_libstdcxx_bazel.sh +10 -3
  363. package/vendor/abseil-cpp/ci/linux_gcc-latest_libstdcxx_bazel.sh +8 -2
  364. package/vendor/abseil-cpp/ci/macos_xcode_bazel.sh +4 -3
  365. package/vendor/abseil-cpp/ci/macos_xcode_cmake.sh +2 -2
  366. package/vendor/abseil-cpp/ci/windows_clangcl_bazel.bat +1 -1
  367. package/vendor/abseil-cpp/ci/windows_msvc_bazel.bat +1 -1
  368. package/vendor/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer.cc +0 -118
  369. package/vendor/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer.h +0 -71
  370. 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/optional.h"
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(), absl::nullopt);
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(), absl::nullopt);
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(), absl::nullopt);
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(), absl::nullopt);
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(), absl::nullopt);
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(), absl::nullopt);
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(), absl::nullopt);
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(), absl::nullopt);
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
- if (ch > 0xFF) {
184
- if (error != nullptr) {
185
- *error = "Value of \\" +
186
- std::string(src.substr(hex_start, p + 1 - hex_start)) +
187
- " exceeds 0xff";
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,
@@ -827,7 +990,7 @@ bool Base64UnescapeInternal(const char* absl_nullable src, size_t slen,
827
990
  }
828
991
 
829
992
  /* clang-format off */
830
- constexpr std::array<char, 256> kHexValueLenient = {
993
+ constexpr std::array<uint8_t, 256> kHexValueLenient = {
831
994
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
832
995
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
833
996
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -846,7 +1009,7 @@ constexpr std::array<char, 256> kHexValueLenient = {
846
1009
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
847
1010
  };
848
1011
 
849
- constexpr std::array<signed char, 256> kHexValueStrict = {
1012
+ constexpr std::array<int8_t, 256> kHexValueStrict = {
850
1013
  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
851
1014
  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
852
1015
  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
@@ -874,7 +1037,7 @@ void HexStringToBytesInternal(const char* absl_nullable from, T to,
874
1037
  size_t num) {
875
1038
  for (size_t i = 0; i < num; i++) {
876
1039
  to[i] = static_cast<char>(kHexValueLenient[from[i * 2] & 0xFF] << 4) +
877
- (kHexValueLenient[from[i * 2 + 1] & 0xFF]);
1040
+ static_cast<char>(kHexValueLenient[from[i * 2 + 1] & 0xFF]);
878
1041
  }
879
1042
  }
880
1043
 
@@ -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
- std::string dest;
969
- strings_internal::Base64EscapeInternal(
970
- reinterpret_cast<const unsigned char*>(src.data()), src.size(), &dest,
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
- std::string dest;
977
- strings_internal::Base64EscapeInternal(
978
- reinterpret_cast<const unsigned char*>(src.data()), src.size(), &dest,
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) {
@@ -992,8 +1138,10 @@ bool HexStringToBytes(absl::string_view hex, std::string* absl_nonnull bytes) {
992
1138
  output, num_bytes, [hex](char* buf, size_t buf_size) {
993
1139
  auto hex_p = hex.cbegin();
994
1140
  for (size_t i = 0; i < buf_size; ++i) {
995
- int h1 = absl::kHexValueStrict[static_cast<size_t>(*hex_p++)];
996
- int h2 = absl::kHexValueStrict[static_cast<size_t>(*hex_p++)];
1141
+ int h1 = absl::kHexValueStrict[static_cast<size_t>(
1142
+ static_cast<uint8_t>(*hex_p++))];
1143
+ int h2 = absl::kHexValueStrict[static_cast<size_t>(
1144
+ static_cast<uint8_t>(*hex_p++))];
997
1145
  if (h1 == -1 || h2 == -1) {
998
1146
  return size_t{0};
999
1147
  }
@@ -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", // 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
- "endswith\\", // ends with "\"
182
- "endswith\\x", // ends with "\x"
183
- "endswith\\X", // ends with "\X"
184
- "\\x.2345678", // non-hex follows "\x"
185
- "\\X.2345678", // non-hex follows "\X"
186
- "\\u.2345678", // non-hex follows "\U"
187
- "\\U.2345678", // non-hex follows "\U"
188
- "\\.unknown", // unknown escape sequence
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".
@@ -733,6 +733,10 @@ TEST(Escaping, HexStringToBytesBackToHex) {
733
733
  bytes = "abc";
734
734
  EXPECT_TRUE(absl::HexStringToBytes("", &bytes));
735
735
  EXPECT_EQ("", bytes); // Results in empty output.
736
+
737
+ // Ensure there is no sign extension bug on a signed char.
738
+ hex.assign("\xC8" "b", 2);
739
+ EXPECT_FALSE(absl::HexStringToBytes(hex, &bytes));
736
740
  }
737
741
 
738
742
  TEST(HexAndBack, HexStringToBytes_and_BytesToHexString) {
@@ -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<absl::optional<TypeWithAbslStringify>>::value);
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<absl::optional<int>>::value);
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/throw_delegate.h"
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::base_internal::ThrowStdLengthError(
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
- resize = str.max_size();
60
+ str.reserve(str.max_size());
61
61
  } else if (resize < str.capacity() + min_growth) {
62
- resize = str.capacity() + min_growth;
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
- auto num_appended =
76
- std::move(do_append)(data_ptr + old_size, append_n);
77
- ABSL_HARDENING_ASSERT(num_appended >= 0 && num_appended <= append_n);
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
 
@@ -187,7 +187,7 @@ TEST(CordzSampleTokenTest, MultiThreaded) {
187
187
  }
188
188
  } else {
189
189
  // 5) Sample
190
- token = absl::make_unique<CordzSampleToken>();
190
+ token = std::make_unique<CordzSampleToken>();
191
191
  }
192
192
  }
193
193
  }
@@ -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 {