diff --git a/CMakeLists.txt b/CMakeLists.txt index 585f6c0b..633719bd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,22 +1,61 @@ cmake_minimum_required(VERSION 3.12) project("unordered_dense" - VERSION 1.2.0 + VERSION 1.3.0 DESCRIPTION "A fast & densely stored hashmap and hashset based on robin-hood backward shift deletion" HOMEPAGE_URL "https://github.com/martinus/unordered_dense") +include(GNUInstallDirs) + # determine whether this is a standalone project or included by other projects -set(_unordered_dense_is_included ON) -if(CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR) - set(_unordered_dense_is_included OFF) +if(CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME) + set(_unordered_dense_is_toplevel_project TRUE) +else() + set(_unordered_dense_is_toplevel_project FALSE) endif() -if(_unordered_dense_is_included) - add_library(unordered_dense INTERFACE) - add_library(unordered_dense::unordered_dense ALIAS unordered_dense) - target_compile_features(unordered_dense INTERFACE cxx_std_17) - target_include_directories( - unordered_dense - INTERFACE - $ - $) +add_library(unordered_dense INTERFACE) +add_library(unordered_dense::unordered_dense ALIAS unordered_dense) + +target_include_directories( + unordered_dense + INTERFACE + $ + $) + +target_compile_features(unordered_dense INTERFACE cxx_std_17) + +if(_unordered_dense_is_toplevel_project) + # locations are provided by GNUInstallDirs + install( + TARGETS unordered_dense + EXPORT unordered_dense_Targets + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) + + include(CMakePackageConfigHelpers) + write_basic_package_version_file( + "unordered_denseConfigVersion.cmake" + VERSION ${PROJECT_VERSION} + COMPATIBILITY SameMajorVersion) + + configure_package_config_file( + "${PROJECT_SOURCE_DIR}/cmake/unordered_denseConfig.cmake.in" + "${PROJECT_BINARY_DIR}/unordered_denseConfig.cmake" + INSTALL_DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/unordered_dense/cmake) + + install( + EXPORT unordered_dense_Targets + FILE unordered_denseTargets.cmake + NAMESPACE unordered_dense:: + DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/unordered_dense/cmake) + + install( + FILES "${PROJECT_BINARY_DIR}/unordered_denseConfig.cmake" + "${PROJECT_BINARY_DIR}/unordered_denseConfigVersion.cmake" + DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/unordered_dense/cmake) + + install( + DIRECTORY ${PROJECT_SOURCE_DIR}/include/ankerl + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) endif() diff --git a/README.md b/README.md index 3ad457c9..6fdfec55 100644 --- a/README.md +++ b/README.md @@ -6,33 +6,120 @@ [![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/6220/badge)](https://bestpractices.coreinfrastructure.org/projects/6220) [![Sponsors](https://img.shields.io/github/sponsors/martinus?style=social)](https://github.com/sponsors/martinus) -# №Ÿš€ ankerl::unordered_dense::{map, set} +# №Ÿš€ ankerl::unordered_dense::{map, set} A fast & densely stored hashmap and hashset based on robin-hood backward shift deletion. -The classes `ankerl::unordered_dense::map` and `ankerl::unordered_dense::set` are (almost) drop-in replacements of `std::unordered_map` and `std::unordered_set`. -While they don't have as strong iterator / reference stability guaranties, they are typically *much* faster. Here is a short summary of the properties: +The classes `ankerl::unordered_dense::map` and `ankerl::unordered_dense::set` are (almost) drop-in replacements of `std::unordered_map` and `std::unordered_set`. While they don't have as strong iterator / reference stability guaranties, they are typically *much* faster. + +- [1. Overview](#1-overview) +- [2. Installation](#2-installation) + - [2.1. Installing using cmake](#21-installing-using-cmake) +- [3. Extensions](#3-extensions) + - [3.1. Container API](#31-container-api) + - [3.1.1. `auto extract() && -> value_container_type`](#311-auto-extract----value_container_type) + - [3.1.2. `[[nodiscard]] auto values() const noexcept -> value_container_type const&`](#312-nodiscard-auto-values-const-noexcept---value_container_type-const) + - [3.1.3. `auto replace(value_container_type&& container)`](#313-auto-replacevalue_container_type-container) + - [3.2. Custom Container Types](#32-custom-container-types) + - [3.3. Custom Bucket Tyeps](#33-custom-bucket-tyeps) + - [3.3.1. `ankerl::unordered_dense::bucket_type::standard`](#331-ankerlunordered_densebucket_typestandard) + - [3.3.2. `ankerl::unordered_dense::bucket_type::big`](#332-ankerlunordered_densebucket_typebig) +- [4. Design](#4-design) + - [4.1. Inserts](#41-inserts) + - [4.2. Lookups](#42-lookups) + - [4.3. Removals](#43-removals) + +## 1. Overview + +The chosen design has a few advantages over `std::unordered_map`: - -## Advantages * Perfect iteration speed - Data is stored in a `std::vector`, all data is contiguous! * Very fast insertion & lookup speed, in the same ballpark as [`absl::flat_hash_map`](https://abseil.io/docs/cpp/guides/container`) * Low memory usage * Full support for `std::allocators`, and [polymorphic allocators](https://en.cppreference.com/w/cpp/memory/polymorphic_allocator). There are `ankerl::unordered_dense::pmr` typedefs available -* Simple: single header with just a bit over 1000 lines of code, this is less than half of [robin-hood-hashing](https://github.com/martinus/robin-hood-hashing) +* Customizeable storage type: with a template parameter you can e.g. switch from `std::vector` to `boost::interprocess::vector` or any other compatible random-access container. + +There's no free lunch, so there are a few disadvantages: -## Disadvantages * Deletion speed is relatively slow. This needs two lookups: one for the element to delete, and one for the element that is moved onto the newly empty spot. * no `const Key` in `std::pair` * Iterators are not stable on insert/erase -## Design + +## 2. Installation + + +The default installation location is `/usr/local`. + +### 2.1. Installing using cmake + +Clone the repository and run these commands in the cloned folder: + +```sh +mkdir build && cd build +cmake .. +cmake --build . --target install +``` + +Consider setting an install prefix if you do not want to install `unordered_dense` system wide, like so: + +```sh +mkdir build && cd build +cmake -DCMAKE_INSTALL_PREFIX:PATH=${HOME}/unordered_dense_install .. +cmake --build . --target install +``` + +To make use of the installed library, add this to your project: + +```cmake +find_package(unordered_dense CONFIG REQUIRED) +target_link_libraries(your_project_name unordered_dense::unordered_dense) +``` + +## 3. Extensions + +### 3.1. Container API + +In addition to the standard `std::unordered_map` API (see https://en.cppreference.com/w/cpp/container/unordered_map) we have additional API leveraging the fact that we're using a random access container internally: + +#### 3.1.1. `auto extract() && -> value_container_type` + +Extracts the internally used container. `*this` is emptied. + +#### 3.1.2. `[[nodiscard]] auto values() const noexcept -> value_container_type const&` + +Exposes the underlying values container. + +#### 3.1.3. `auto replace(value_container_type&& container)` + +Discards the internally held container and replaces it with the one passed. Non-unique elements are +removed, and the container will be partly reordered when non-unique elements are found. + +### 3.2. Custom Container Types + +`unordered_dense` accepts a custom allocator, but you can also specify a custom container for that template argument. That way it is possible to replace the internally used `std::vector` with e.g. `std::deque` or any other container like `boost::interprocess::vector`. This supports fancy pointers (e.g. [offset_ptr](https://www.boost.org/doc/libs/1_80_0/doc/html/interprocess/offset_ptr.html)), so the container can be used with e.g. shared memory provided by `boost::interprocess`. + +### 3.3. Custom Bucket Tyeps + +The map/set supports two different bucket types. The default should be good for pretty much everyone. + +#### 3.3.1. `ankerl::unordered_dense::bucket_type::standard` + +* Up to 2^32 = 4.29 billion elements. +* 8 bytes overhead per bucket. + +#### 3.3.2. `ankerl::unordered_dense::bucket_type::big` + +* up to 2^63 = 9223372036854775808 elements. +* 12 bytes overhead per bucket. + +## 4. Design The map/set has two data structures: * `std::vector` which holds all data. map/set iterators are just `std::vector::iterator`! * An indexing structure (bucket array), which is a flat array with 8-byte buckets. -### Inserts +### 4.1. Inserts Whenever an element is added it is `emplace_back` to the vector. The key is hashed, and an entry (bucket) is added at the corresponding location in the bucket array. The bucket has this structure: @@ -52,12 +139,12 @@ Each bucket stores 3 things: This structure is especially designed for the collision resolution strategy robin-hood hashing with backward shift deletion. -### Lookups +### 4.2. Lookups The key is hashed and the bucket array is searched if it has an entry at that location with that fingerprint. When found, the key in the data vector is compared, and when equal the value is returned. -## Removals +### 4.3. Removals Since all data is stored in a vector, removals are a bit more complicated: diff --git a/cmake/unordered_denseConfig.cmake.in b/cmake/unordered_denseConfig.cmake.in new file mode 100644 index 00000000..ff0fa672 --- /dev/null +++ b/cmake/unordered_denseConfig.cmake.in @@ -0,0 +1,4 @@ +@PACKAGE_INIT@ + +include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@Targets.cmake") +check_required_components("@PROJECT_NAME@") \ No newline at end of file diff --git a/data/fuzz/replace/01dd32f42c6c3ff56d10b7fc3dd82e690749be6b b/data/fuzz/replace/01dd32f42c6c3ff56d10b7fc3dd82e690749be6b new file mode 100644 index 00000000..3f5b1a96 Binary files /dev/null and b/data/fuzz/replace/01dd32f42c6c3ff56d10b7fc3dd82e690749be6b differ diff --git a/data/fuzz/replace/0374122e3ce280568c8ed41f46a22a26cba53338 b/data/fuzz/replace/0374122e3ce280568c8ed41f46a22a26cba53338 new file mode 100644 index 00000000..50603ae9 Binary files /dev/null and b/data/fuzz/replace/0374122e3ce280568c8ed41f46a22a26cba53338 differ diff --git a/data/fuzz/replace/03f405ec803faa59306f074d3824fcd040dbfbbe b/data/fuzz/replace/03f405ec803faa59306f074d3824fcd040dbfbbe new file mode 100644 index 00000000..979f23a2 Binary files /dev/null and b/data/fuzz/replace/03f405ec803faa59306f074d3824fcd040dbfbbe differ diff --git a/data/fuzz/replace/040e5ac904de86328cca053a15596e118fc5da24 b/data/fuzz/replace/040e5ac904de86328cca053a15596e118fc5da24 new file mode 100644 index 00000000..20e9a8c8 Binary files /dev/null and b/data/fuzz/replace/040e5ac904de86328cca053a15596e118fc5da24 differ diff --git a/data/fuzz/replace/052ab788f1646b958e0ea2c0ef47d00141fc1004 b/data/fuzz/replace/052ab788f1646b958e0ea2c0ef47d00141fc1004 new file mode 100644 index 00000000..11e578e0 Binary files /dev/null and b/data/fuzz/replace/052ab788f1646b958e0ea2c0ef47d00141fc1004 differ diff --git a/data/fuzz/replace/053b0791e062db00594283e16e6673872596a2ed b/data/fuzz/replace/053b0791e062db00594283e16e6673872596a2ed new file mode 100644 index 00000000..f662cf0f Binary files /dev/null and b/data/fuzz/replace/053b0791e062db00594283e16e6673872596a2ed differ diff --git a/data/fuzz/replace/05cda787f4d57c0ecbb214cc48d9768f53a1ea8f b/data/fuzz/replace/05cda787f4d57c0ecbb214cc48d9768f53a1ea8f new file mode 100644 index 00000000..17c236be Binary files /dev/null and b/data/fuzz/replace/05cda787f4d57c0ecbb214cc48d9768f53a1ea8f differ diff --git a/data/fuzz/replace/062e39f3c9fcee3faa396c764271aa970a27f428 b/data/fuzz/replace/062e39f3c9fcee3faa396c764271aa970a27f428 new file mode 100644 index 00000000..d54d6ad4 Binary files /dev/null and b/data/fuzz/replace/062e39f3c9fcee3faa396c764271aa970a27f428 differ diff --git a/data/fuzz/replace/073540f1f1f48d2f0b9e11547831ea89a54cb889 b/data/fuzz/replace/073540f1f1f48d2f0b9e11547831ea89a54cb889 new file mode 100644 index 00000000..47760e2b Binary files /dev/null and b/data/fuzz/replace/073540f1f1f48d2f0b9e11547831ea89a54cb889 differ diff --git a/data/fuzz/replace/0881e645dbfc1bba29947ce353e8484f0772bc99 b/data/fuzz/replace/0881e645dbfc1bba29947ce353e8484f0772bc99 new file mode 100644 index 00000000..c6186af8 Binary files /dev/null and b/data/fuzz/replace/0881e645dbfc1bba29947ce353e8484f0772bc99 differ diff --git a/data/fuzz/replace/08dbbf42caba6501b69b1cea7a9b84e358e66ddb b/data/fuzz/replace/08dbbf42caba6501b69b1cea7a9b84e358e66ddb new file mode 100644 index 00000000..9fc88613 --- /dev/null +++ b/data/fuzz/replace/08dbbf42caba6501b69b1cea7a9b84e358e66ddb @@ -0,0 +1 @@ +М \ No newline at end of file diff --git a/data/fuzz/replace/09b9d71af1e142272bd6a0fc2054b64a438b99d9 b/data/fuzz/replace/09b9d71af1e142272bd6a0fc2054b64a438b99d9 new file mode 100644 index 00000000..a12d15f5 Binary files /dev/null and b/data/fuzz/replace/09b9d71af1e142272bd6a0fc2054b64a438b99d9 differ diff --git a/data/fuzz/replace/0a80baa1797615faddb0ccfaa6d46382a6b3e0e2 b/data/fuzz/replace/0a80baa1797615faddb0ccfaa6d46382a6b3e0e2 new file mode 100644 index 00000000..f1b38290 --- /dev/null +++ b/data/fuzz/replace/0a80baa1797615faddb0ccfaa6d46382a6b3e0e2 @@ -0,0 +1 @@ +ѓ \ No newline at end of file diff --git a/data/fuzz/replace/0ade7c2cf97f75d009975f4d720d1fa6c19f4897 b/data/fuzz/replace/0ade7c2cf97f75d009975f4d720d1fa6c19f4897 new file mode 100644 index 00000000..f11c82a4 --- /dev/null +++ b/data/fuzz/replace/0ade7c2cf97f75d009975f4d720d1fa6c19f4897 @@ -0,0 +1 @@ +9 \ No newline at end of file diff --git a/data/fuzz/replace/0b30ec1eef0904f48d3797ee13dd515b06c482f5 b/data/fuzz/replace/0b30ec1eef0904f48d3797ee13dd515b06c482f5 new file mode 100644 index 00000000..5998c8c2 Binary files /dev/null and b/data/fuzz/replace/0b30ec1eef0904f48d3797ee13dd515b06c482f5 differ diff --git a/data/fuzz/replace/0d87af67cc37fed4ba608dba87c561a3ff2b1e31 b/data/fuzz/replace/0d87af67cc37fed4ba608dba87c561a3ff2b1e31 new file mode 100644 index 00000000..901f0efc Binary files /dev/null and b/data/fuzz/replace/0d87af67cc37fed4ba608dba87c561a3ff2b1e31 differ diff --git a/data/fuzz/replace/0db2a00e53ccf8ef330179835091f6b070c1ef52 b/data/fuzz/replace/0db2a00e53ccf8ef330179835091f6b070c1ef52 new file mode 100644 index 00000000..bbd42442 Binary files /dev/null and b/data/fuzz/replace/0db2a00e53ccf8ef330179835091f6b070c1ef52 differ diff --git a/data/fuzz/replace/0de2a6cb79184a423a18c705ec5c796943a43f4b b/data/fuzz/replace/0de2a6cb79184a423a18c705ec5c796943a43f4b new file mode 100644 index 00000000..049a1a5a Binary files /dev/null and b/data/fuzz/replace/0de2a6cb79184a423a18c705ec5c796943a43f4b differ diff --git a/data/fuzz/replace/0eb34fb70c5cc8bec3bd9746d4c0f51848c07599 b/data/fuzz/replace/0eb34fb70c5cc8bec3bd9746d4c0f51848c07599 new file mode 100644 index 00000000..96a9c7c2 --- /dev/null +++ b/data/fuzz/replace/0eb34fb70c5cc8bec3bd9746d4c0f51848c07599 @@ -0,0 +1 @@ +ЮџЮџЮџ:џ* \ No newline at end of file diff --git a/data/fuzz/replace/10cf3df2d3d09ae47fb5eb2aa32f045a7e6377e0 b/data/fuzz/replace/10cf3df2d3d09ae47fb5eb2aa32f045a7e6377e0 new file mode 100644 index 00000000..c08fb956 Binary files /dev/null and b/data/fuzz/replace/10cf3df2d3d09ae47fb5eb2aa32f045a7e6377e0 differ diff --git a/data/fuzz/replace/11362f492ccdf1419ef6ea987d41121620864a66 b/data/fuzz/replace/11362f492ccdf1419ef6ea987d41121620864a66 new file mode 100644 index 00000000..01c188c1 Binary files /dev/null and b/data/fuzz/replace/11362f492ccdf1419ef6ea987d41121620864a66 differ diff --git a/data/fuzz/replace/11f6ad8ec52a2984abaafd7c3b516503785c2072 b/data/fuzz/replace/11f6ad8ec52a2984abaafd7c3b516503785c2072 new file mode 100644 index 00000000..c1b0730e --- /dev/null +++ b/data/fuzz/replace/11f6ad8ec52a2984abaafd7c3b516503785c2072 @@ -0,0 +1 @@ +x \ No newline at end of file diff --git a/data/fuzz/replace/133f26e45c15971da555fa342a996fa4ecf33a32 b/data/fuzz/replace/133f26e45c15971da555fa342a996fa4ecf33a32 new file mode 100644 index 00000000..bb54ed34 Binary files /dev/null and b/data/fuzz/replace/133f26e45c15971da555fa342a996fa4ecf33a32 differ diff --git a/data/fuzz/replace/13fbd79c3d390e5d6585a21e11ff5ec1970cff0c b/data/fuzz/replace/13fbd79c3d390e5d6585a21e11ff5ec1970cff0c new file mode 100644 index 00000000..23fa7d31 --- /dev/null +++ b/data/fuzz/replace/13fbd79c3d390e5d6585a21e11ff5ec1970cff0c @@ -0,0 +1 @@ +k \ No newline at end of file diff --git a/data/fuzz/replace/1599e9fa41ec68c80230491902786bee889f5bcb b/data/fuzz/replace/1599e9fa41ec68c80230491902786bee889f5bcb new file mode 100644 index 00000000..92a39f39 --- /dev/null +++ b/data/fuzz/replace/1599e9fa41ec68c80230491902786bee889f5bcb @@ -0,0 +1 @@ +щ \ No newline at end of file diff --git a/data/fuzz/replace/165e29e56c97e5f4b1c7452d69724329c992c975 b/data/fuzz/replace/165e29e56c97e5f4b1c7452d69724329c992c975 new file mode 100644 index 00000000..92d468e4 Binary files /dev/null and b/data/fuzz/replace/165e29e56c97e5f4b1c7452d69724329c992c975 differ diff --git a/data/fuzz/replace/16d1d534393d37a68a59c1231bbbab8550839046 b/data/fuzz/replace/16d1d534393d37a68a59c1231bbbab8550839046 new file mode 100644 index 00000000..795efff0 Binary files /dev/null and b/data/fuzz/replace/16d1d534393d37a68a59c1231bbbab8550839046 differ diff --git a/data/fuzz/replace/1a6dbaa717f8837c4bd4332121e92bd73bbec049 b/data/fuzz/replace/1a6dbaa717f8837c4bd4332121e92bd73bbec049 new file mode 100644 index 00000000..50c8be35 --- /dev/null +++ b/data/fuzz/replace/1a6dbaa717f8837c4bd4332121e92bd73bbec049 @@ -0,0 +1 @@ +Я \ No newline at end of file diff --git a/data/fuzz/replace/1dcc0c704303ccc1729abd618f490073331e8b22 b/data/fuzz/replace/1dcc0c704303ccc1729abd618f490073331e8b22 new file mode 100644 index 00000000..78271f0e Binary files /dev/null and b/data/fuzz/replace/1dcc0c704303ccc1729abd618f490073331e8b22 differ diff --git a/data/fuzz/replace/1e5c2f367f02e47a8c160cda1cd9d91decbac441 b/data/fuzz/replace/1e5c2f367f02e47a8c160cda1cd9d91decbac441 new file mode 100644 index 00000000..8e2f0bef --- /dev/null +++ b/data/fuzz/replace/1e5c2f367f02e47a8c160cda1cd9d91decbac441 @@ -0,0 +1 @@ +[ \ No newline at end of file diff --git a/data/fuzz/replace/20716a557dfffcaf1782fc244cf548ce14a36fc5 b/data/fuzz/replace/20716a557dfffcaf1782fc244cf548ce14a36fc5 new file mode 100644 index 00000000..fe68d3ad --- /dev/null +++ b/data/fuzz/replace/20716a557dfffcaf1782fc244cf548ce14a36fc5 @@ -0,0 +1 @@ +~> \ No newline at end of file diff --git a/data/fuzz/replace/21013749b62bbfde87e4424c51724252be99566a b/data/fuzz/replace/21013749b62bbfde87e4424c51724252be99566a new file mode 100644 index 00000000..ba916ace --- /dev/null +++ b/data/fuzz/replace/21013749b62bbfde87e4424c51724252be99566a @@ -0,0 +1 @@ +џ g \ No newline at end of file diff --git a/data/fuzz/replace/21a923ffde933d250075e181d06df1b363c2ad87 b/data/fuzz/replace/21a923ffde933d250075e181d06df1b363c2ad87 new file mode 100644 index 00000000..29b47a4b Binary files /dev/null and b/data/fuzz/replace/21a923ffde933d250075e181d06df1b363c2ad87 differ diff --git a/data/fuzz/replace/23772d668f8c023da1c6a6d00c73e463150691ac b/data/fuzz/replace/23772d668f8c023da1c6a6d00c73e463150691ac new file mode 100644 index 00000000..6e7c4da6 Binary files /dev/null and b/data/fuzz/replace/23772d668f8c023da1c6a6d00c73e463150691ac differ diff --git a/data/fuzz/replace/23a84f8c38d47199a41d9e3eef4ac794aa10ca11 b/data/fuzz/replace/23a84f8c38d47199a41d9e3eef4ac794aa10ca11 new file mode 100644 index 00000000..fa013c42 Binary files /dev/null and b/data/fuzz/replace/23a84f8c38d47199a41d9e3eef4ac794aa10ca11 differ diff --git a/data/fuzz/replace/23b0ee55a5999ef842c87782bdb40fe527ee7d5c b/data/fuzz/replace/23b0ee55a5999ef842c87782bdb40fe527ee7d5c new file mode 100644 index 00000000..65fc79c0 Binary files /dev/null and b/data/fuzz/replace/23b0ee55a5999ef842c87782bdb40fe527ee7d5c differ diff --git a/data/fuzz/replace/23b54dec02fdd05a55e66e047d0fc93c8d58afd4 b/data/fuzz/replace/23b54dec02fdd05a55e66e047d0fc93c8d58afd4 new file mode 100644 index 00000000..0052c535 --- /dev/null +++ b/data/fuzz/replace/23b54dec02fdd05a55e66e047d0fc93c8d58afd4 @@ -0,0 +1 @@ +j* \ No newline at end of file diff --git a/data/fuzz/replace/2699e643651c83a9926385fe042df0ee147f59f9 b/data/fuzz/replace/2699e643651c83a9926385fe042df0ee147f59f9 new file mode 100644 index 00000000..53579d07 Binary files /dev/null and b/data/fuzz/replace/2699e643651c83a9926385fe042df0ee147f59f9 differ diff --git a/data/fuzz/replace/27d5482eebd075de44389774fce28c69f45c8a75 b/data/fuzz/replace/27d5482eebd075de44389774fce28c69f45c8a75 new file mode 100644 index 00000000..be54354a --- /dev/null +++ b/data/fuzz/replace/27d5482eebd075de44389774fce28c69f45c8a75 @@ -0,0 +1 @@ +h \ No newline at end of file diff --git a/data/fuzz/replace/2c69128e7d7b6103540d60d6f5c345f4c643d757 b/data/fuzz/replace/2c69128e7d7b6103540d60d6f5c345f4c643d757 new file mode 100644 index 00000000..619abdb5 Binary files /dev/null and b/data/fuzz/replace/2c69128e7d7b6103540d60d6f5c345f4c643d757 differ diff --git a/data/fuzz/replace/2d14ab97cc3dc294c51c0d6814f4ea45f4b4e312 b/data/fuzz/replace/2d14ab97cc3dc294c51c0d6814f4ea45f4b4e312 new file mode 100644 index 00000000..1c8a0e79 --- /dev/null +++ b/data/fuzz/replace/2d14ab97cc3dc294c51c0d6814f4ea45f4b4e312 @@ -0,0 +1 @@ +; \ No newline at end of file diff --git a/data/fuzz/replace/2f1f169a732a6a2631b27d082f31e151075939db b/data/fuzz/replace/2f1f169a732a6a2631b27d082f31e151075939db new file mode 100644 index 00000000..c772c975 Binary files /dev/null and b/data/fuzz/replace/2f1f169a732a6a2631b27d082f31e151075939db differ diff --git a/data/fuzz/replace/2f546abff1744e1ffa4c06ed3d7bb1e7795157d0 b/data/fuzz/replace/2f546abff1744e1ffa4c06ed3d7bb1e7795157d0 new file mode 100644 index 00000000..f9ef349d Binary files /dev/null and b/data/fuzz/replace/2f546abff1744e1ffa4c06ed3d7bb1e7795157d0 differ diff --git a/data/fuzz/replace/2fec74062a3d12bab6c473583225dd62435240af b/data/fuzz/replace/2fec74062a3d12bab6c473583225dd62435240af new file mode 100644 index 00000000..cc6634fb Binary files /dev/null and b/data/fuzz/replace/2fec74062a3d12bab6c473583225dd62435240af differ diff --git a/data/fuzz/replace/30140397fe38ee61f01eff44b5cfa48285e47889 b/data/fuzz/replace/30140397fe38ee61f01eff44b5cfa48285e47889 new file mode 100644 index 00000000..f327b9ac --- /dev/null +++ b/data/fuzz/replace/30140397fe38ee61f01eff44b5cfa48285e47889 @@ -0,0 +1 @@ +ƒ \ No newline at end of file diff --git a/data/fuzz/replace/304f1febad9d6064d06da66df224af85fdefa4e2 b/data/fuzz/replace/304f1febad9d6064d06da66df224af85fdefa4e2 new file mode 100644 index 00000000..7a7235fe Binary files /dev/null and b/data/fuzz/replace/304f1febad9d6064d06da66df224af85fdefa4e2 differ diff --git a/data/fuzz/replace/3173532552077d0d796c3628ac35c76343dc3a04 b/data/fuzz/replace/3173532552077d0d796c3628ac35c76343dc3a04 new file mode 100644 index 00000000..5642265e Binary files /dev/null and b/data/fuzz/replace/3173532552077d0d796c3628ac35c76343dc3a04 differ diff --git a/data/fuzz/replace/32096c2e0eff33d844ee6d675407ace18289357d b/data/fuzz/replace/32096c2e0eff33d844ee6d675407ace18289357d new file mode 100644 index 00000000..96d80cd6 --- /dev/null +++ b/data/fuzz/replace/32096c2e0eff33d844ee6d675407ace18289357d @@ -0,0 +1 @@ +C \ No newline at end of file diff --git a/data/fuzz/replace/33156466b62882aca589674dbc593e356efe0cb3 b/data/fuzz/replace/33156466b62882aca589674dbc593e356efe0cb3 new file mode 100644 index 00000000..69f7fbb6 Binary files /dev/null and b/data/fuzz/replace/33156466b62882aca589674dbc593e356efe0cb3 differ diff --git a/data/fuzz/replace/351d86f5fba2ea4f88f3abdf01d0c6f59c28debe b/data/fuzz/replace/351d86f5fba2ea4f88f3abdf01d0c6f59c28debe new file mode 100644 index 00000000..97ea9a06 Binary files /dev/null and b/data/fuzz/replace/351d86f5fba2ea4f88f3abdf01d0c6f59c28debe differ diff --git a/data/fuzz/replace/3639690e233f2274fe9624bdeb20e026e9a5b16f b/data/fuzz/replace/3639690e233f2274fe9624bdeb20e026e9a5b16f new file mode 100644 index 00000000..e6f36f4e --- /dev/null +++ b/data/fuzz/replace/3639690e233f2274fe9624bdeb20e026e9a5b16f @@ -0,0 +1 @@ +)ё \ No newline at end of file diff --git a/data/fuzz/replace/36955aa4221158b2b4199a31f6db236664d8259e b/data/fuzz/replace/36955aa4221158b2b4199a31f6db236664d8259e new file mode 100644 index 00000000..8cb8c735 Binary files /dev/null and b/data/fuzz/replace/36955aa4221158b2b4199a31f6db236664d8259e differ diff --git a/data/fuzz/replace/36d44fd006f9a5a6df9c82ef818d0274b5d57326 b/data/fuzz/replace/36d44fd006f9a5a6df9c82ef818d0274b5d57326 new file mode 100644 index 00000000..99074cbc Binary files /dev/null and b/data/fuzz/replace/36d44fd006f9a5a6df9c82ef818d0274b5d57326 differ diff --git a/data/fuzz/replace/387ed9746de74f701d1af5f5d4e36ad7b9fd19ef b/data/fuzz/replace/387ed9746de74f701d1af5f5d4e36ad7b9fd19ef new file mode 100644 index 00000000..de65eba4 Binary files /dev/null and b/data/fuzz/replace/387ed9746de74f701d1af5f5d4e36ad7b9fd19ef differ diff --git a/data/fuzz/replace/38d4e6275e92eb330bd9a2bfd25812b1443fde85 b/data/fuzz/replace/38d4e6275e92eb330bd9a2bfd25812b1443fde85 new file mode 100644 index 00000000..64455bb5 Binary files /dev/null and b/data/fuzz/replace/38d4e6275e92eb330bd9a2bfd25812b1443fde85 differ diff --git a/data/fuzz/replace/393017d7afb3b4d4c34540baa571864a7eb9bf87 b/data/fuzz/replace/393017d7afb3b4d4c34540baa571864a7eb9bf87 new file mode 100644 index 00000000..4148d956 Binary files /dev/null and b/data/fuzz/replace/393017d7afb3b4d4c34540baa571864a7eb9bf87 differ diff --git a/data/fuzz/replace/3b1b828760b23270984a47c893506f2bc8912d04 b/data/fuzz/replace/3b1b828760b23270984a47c893506f2bc8912d04 new file mode 100644 index 00000000..802da7de Binary files /dev/null and b/data/fuzz/replace/3b1b828760b23270984a47c893506f2bc8912d04 differ diff --git a/data/fuzz/replace/3c363836cf4e16666669a25da280a1865c2d2874 b/data/fuzz/replace/3c363836cf4e16666669a25da280a1865c2d2874 new file mode 100644 index 00000000..c59d9b63 --- /dev/null +++ b/data/fuzz/replace/3c363836cf4e16666669a25da280a1865c2d2874 @@ -0,0 +1 @@ +d \ No newline at end of file diff --git a/data/fuzz/replace/3c89586d99f2567d21410f29b1b2606574892aa7 b/data/fuzz/replace/3c89586d99f2567d21410f29b1b2606574892aa7 new file mode 100644 index 00000000..40a2dbb3 --- /dev/null +++ b/data/fuzz/replace/3c89586d99f2567d21410f29b1b2606574892aa7 @@ -0,0 +1 @@ +ъ \ No newline at end of file diff --git a/data/fuzz/replace/3cca182946e9fbc4a21fcfa83c21f163a6b549a1 b/data/fuzz/replace/3cca182946e9fbc4a21fcfa83c21f163a6b549a1 new file mode 100644 index 00000000..b84825ba --- /dev/null +++ b/data/fuzz/replace/3cca182946e9fbc4a21fcfa83c21f163a6b549a1 @@ -0,0 +1 @@ +џ|7`7> \ No newline at end of file diff --git a/data/fuzz/replace/3d854b217fa938bf1c66059f9771e6eef967df59 b/data/fuzz/replace/3d854b217fa938bf1c66059f9771e6eef967df59 new file mode 100644 index 00000000..77b53e93 Binary files /dev/null and b/data/fuzz/replace/3d854b217fa938bf1c66059f9771e6eef967df59 differ diff --git a/data/fuzz/replace/3e3a0fe606230588bbcd34206150d39b70753985 b/data/fuzz/replace/3e3a0fe606230588bbcd34206150d39b70753985 new file mode 100644 index 00000000..f91dd268 --- /dev/null +++ b/data/fuzz/replace/3e3a0fe606230588bbcd34206150d39b70753985 @@ -0,0 +1 @@ +YЇXXЇ\1 \ No newline at end of file diff --git a/data/fuzz/replace/3e63346f640f72156e6fd76c00483293c3bfd94f b/data/fuzz/replace/3e63346f640f72156e6fd76c00483293c3bfd94f new file mode 100644 index 00000000..1464d750 Binary files /dev/null and b/data/fuzz/replace/3e63346f640f72156e6fd76c00483293c3bfd94f differ diff --git a/data/fuzz/replace/3ef176fc2093618c094e73acd348f31bf1a6e990 b/data/fuzz/replace/3ef176fc2093618c094e73acd348f31bf1a6e990 new file mode 100644 index 00000000..73307a73 Binary files /dev/null and b/data/fuzz/replace/3ef176fc2093618c094e73acd348f31bf1a6e990 differ diff --git a/data/fuzz/replace/3fa5bfd93317ad25772680071d5ac3259cd2384f b/data/fuzz/replace/3fa5bfd93317ad25772680071d5ac3259cd2384f new file mode 100644 index 00000000..7136b4c8 --- /dev/null +++ b/data/fuzz/replace/3fa5bfd93317ad25772680071d5ac3259cd2384f @@ -0,0 +1 @@ +п \ No newline at end of file diff --git a/data/fuzz/replace/3ff902b52311c3db8e6b6aef51126873bf993f0b b/data/fuzz/replace/3ff902b52311c3db8e6b6aef51126873bf993f0b new file mode 100644 index 00000000..2acfacf1 Binary files /dev/null and b/data/fuzz/replace/3ff902b52311c3db8e6b6aef51126873bf993f0b differ diff --git a/data/fuzz/replace/408c170de2a4310ae7d9544be9fd24f6c28e7f60 b/data/fuzz/replace/408c170de2a4310ae7d9544be9fd24f6c28e7f60 new file mode 100644 index 00000000..1c1f22f8 Binary files /dev/null and b/data/fuzz/replace/408c170de2a4310ae7d9544be9fd24f6c28e7f60 differ diff --git a/data/fuzz/replace/40d907e2a65b848d1175cb99be5384bcd01e8027 b/data/fuzz/replace/40d907e2a65b848d1175cb99be5384bcd01e8027 new file mode 100644 index 00000000..c960b88d Binary files /dev/null and b/data/fuzz/replace/40d907e2a65b848d1175cb99be5384bcd01e8027 differ diff --git a/data/fuzz/replace/41f12c7896e0da705a03db554ff64ca975fdb8eb b/data/fuzz/replace/41f12c7896e0da705a03db554ff64ca975fdb8eb new file mode 100644 index 00000000..4ed19086 Binary files /dev/null and b/data/fuzz/replace/41f12c7896e0da705a03db554ff64ca975fdb8eb differ diff --git a/data/fuzz/replace/4368df0175f01cd0870a72b906d6c5280d3ccc3d b/data/fuzz/replace/4368df0175f01cd0870a72b906d6c5280d3ccc3d new file mode 100644 index 00000000..2d33effd Binary files /dev/null and b/data/fuzz/replace/4368df0175f01cd0870a72b906d6c5280d3ccc3d differ diff --git a/data/fuzz/replace/45a65193e30784b0124f4fed659eb7e46552c2d0 b/data/fuzz/replace/45a65193e30784b0124f4fed659eb7e46552c2d0 new file mode 100644 index 00000000..5bd7dea1 --- /dev/null +++ b/data/fuzz/replace/45a65193e30784b0124f4fed659eb7e46552c2d0 @@ -0,0 +1 @@ +Ж \ No newline at end of file diff --git a/data/fuzz/replace/47138e343ceb97ee9a47fc38ec166429b6785265 b/data/fuzz/replace/47138e343ceb97ee9a47fc38ec166429b6785265 new file mode 100644 index 00000000..8f6f8352 Binary files /dev/null and b/data/fuzz/replace/47138e343ceb97ee9a47fc38ec166429b6785265 differ diff --git a/data/fuzz/replace/475ab5d3c4271be23fe0a2e0322da804d1b4e7e6 b/data/fuzz/replace/475ab5d3c4271be23fe0a2e0322da804d1b4e7e6 new file mode 100644 index 00000000..69bec4e7 Binary files /dev/null and b/data/fuzz/replace/475ab5d3c4271be23fe0a2e0322da804d1b4e7e6 differ diff --git a/data/fuzz/replace/47dd1db8c37b3f9ce1bca0e302e77ffa25ac58e9 b/data/fuzz/replace/47dd1db8c37b3f9ce1bca0e302e77ffa25ac58e9 new file mode 100644 index 00000000..61fbfabd Binary files /dev/null and b/data/fuzz/replace/47dd1db8c37b3f9ce1bca0e302e77ffa25ac58e9 differ diff --git a/data/fuzz/replace/48e03317628504909ae82f021e5d84e0294c95c8 b/data/fuzz/replace/48e03317628504909ae82f021e5d84e0294c95c8 new file mode 100644 index 00000000..44a137da Binary files /dev/null and b/data/fuzz/replace/48e03317628504909ae82f021e5d84e0294c95c8 differ diff --git a/data/fuzz/replace/4a0a19218e082a343a1b17e5333409af9d98f0f5 b/data/fuzz/replace/4a0a19218e082a343a1b17e5333409af9d98f0f5 new file mode 100644 index 00000000..4d1ae35b --- /dev/null +++ b/data/fuzz/replace/4a0a19218e082a343a1b17e5333409af9d98f0f5 @@ -0,0 +1 @@ +f \ No newline at end of file diff --git a/data/fuzz/replace/4a1e92004fe2336b478d2a26adf69dab9c8f20f3 b/data/fuzz/replace/4a1e92004fe2336b478d2a26adf69dab9c8f20f3 new file mode 100644 index 00000000..eba52ffe --- /dev/null +++ b/data/fuzz/replace/4a1e92004fe2336b478d2a26adf69dab9c8f20f3 @@ -0,0 +1 @@ +33333333333333333333333333333333333333333333333333331333333333333333333333333333333333333333333333333333333333333333333333333333џџџџџџџџџ \ No newline at end of file diff --git a/data/fuzz/replace/4ac3c912ed618bfef8a511c6b65cccffa96547e5 b/data/fuzz/replace/4ac3c912ed618bfef8a511c6b65cccffa96547e5 new file mode 100644 index 00000000..034d7fb1 Binary files /dev/null and b/data/fuzz/replace/4ac3c912ed618bfef8a511c6b65cccffa96547e5 differ diff --git a/data/fuzz/replace/4b56a916e4fd9f579143bdc1d1721f46edc77d10 b/data/fuzz/replace/4b56a916e4fd9f579143bdc1d1721f46edc77d10 new file mode 100644 index 00000000..1a374e45 Binary files /dev/null and b/data/fuzz/replace/4b56a916e4fd9f579143bdc1d1721f46edc77d10 differ diff --git a/data/fuzz/replace/4b6a19f42d9a725e35a9bd70ab5bc0dae2d0f938 b/data/fuzz/replace/4b6a19f42d9a725e35a9bd70ab5bc0dae2d0f938 new file mode 100644 index 00000000..8e06a14b Binary files /dev/null and b/data/fuzz/replace/4b6a19f42d9a725e35a9bd70ab5bc0dae2d0f938 differ diff --git a/data/fuzz/replace/523c87e010a287823cc1db4ef40fb431f086303d b/data/fuzz/replace/523c87e010a287823cc1db4ef40fb431f086303d new file mode 100644 index 00000000..b326de5d Binary files /dev/null and b/data/fuzz/replace/523c87e010a287823cc1db4ef40fb431f086303d differ diff --git a/data/fuzz/replace/52538a80094f7b62948fd31e68fd17a315d8dc91 b/data/fuzz/replace/52538a80094f7b62948fd31e68fd17a315d8dc91 new file mode 100644 index 00000000..5cd813e5 --- /dev/null +++ b/data/fuzz/replace/52538a80094f7b62948fd31e68fd17a315d8dc91 @@ -0,0 +1 @@ +Њ \ No newline at end of file diff --git a/data/fuzz/replace/53195a43aebbd757609c1987a3e5fb80a48a1aea b/data/fuzz/replace/53195a43aebbd757609c1987a3e5fb80a48a1aea new file mode 100644 index 00000000..164a883f Binary files /dev/null and b/data/fuzz/replace/53195a43aebbd757609c1987a3e5fb80a48a1aea differ diff --git a/data/fuzz/replace/540cd14096978df7467136d56a3f91ad3bae1257 b/data/fuzz/replace/540cd14096978df7467136d56a3f91ad3bae1257 new file mode 100644 index 00000000..186f9c2d Binary files /dev/null and b/data/fuzz/replace/540cd14096978df7467136d56a3f91ad3bae1257 differ diff --git a/data/fuzz/replace/544a5d52682bfcba1eba578772019acc3ed7be9c b/data/fuzz/replace/544a5d52682bfcba1eba578772019acc3ed7be9c new file mode 100644 index 00000000..f135f6e5 Binary files /dev/null and b/data/fuzz/replace/544a5d52682bfcba1eba578772019acc3ed7be9c differ diff --git a/data/fuzz/replace/54774c0a9a5e30b1a59c909b565be9171cc63c5a b/data/fuzz/replace/54774c0a9a5e30b1a59c909b565be9171cc63c5a new file mode 100644 index 00000000..8db396b9 Binary files /dev/null and b/data/fuzz/replace/54774c0a9a5e30b1a59c909b565be9171cc63c5a differ diff --git a/data/fuzz/replace/54fd1711209fb1c0781092374132c66e79e2241b b/data/fuzz/replace/54fd1711209fb1c0781092374132c66e79e2241b new file mode 100644 index 00000000..7937c68f --- /dev/null +++ b/data/fuzz/replace/54fd1711209fb1c0781092374132c66e79e2241b @@ -0,0 +1 @@ +g \ No newline at end of file diff --git a/data/fuzz/replace/55c9aacf45de57b5e52c906e62807f7f636acc13 b/data/fuzz/replace/55c9aacf45de57b5e52c906e62807f7f636acc13 new file mode 100644 index 00000000..bc419b11 Binary files /dev/null and b/data/fuzz/replace/55c9aacf45de57b5e52c906e62807f7f636acc13 differ diff --git a/data/fuzz/replace/55df2a59ed6a888ee2f0cdfdcc8582696702de7a b/data/fuzz/replace/55df2a59ed6a888ee2f0cdfdcc8582696702de7a new file mode 100644 index 00000000..a4a063a1 --- /dev/null +++ b/data/fuzz/replace/55df2a59ed6a888ee2f0cdfdcc8582696702de7a @@ -0,0 +1 @@ +я \ No newline at end of file diff --git a/data/fuzz/replace/57ea2fd4cfdbebdec4b57d1bcf93543db7a94149 b/data/fuzz/replace/57ea2fd4cfdbebdec4b57d1bcf93543db7a94149 new file mode 100644 index 00000000..b2f047ca Binary files /dev/null and b/data/fuzz/replace/57ea2fd4cfdbebdec4b57d1bcf93543db7a94149 differ diff --git a/data/fuzz/replace/59efd7ad86d0e129fcd3170f570d3fe20faf5778 b/data/fuzz/replace/59efd7ad86d0e129fcd3170f570d3fe20faf5778 new file mode 100644 index 00000000..bcc5a1db Binary files /dev/null and b/data/fuzz/replace/59efd7ad86d0e129fcd3170f570d3fe20faf5778 differ diff --git a/data/fuzz/replace/5abb0ecb12a5a97ee4ad2311241fe9fd2c50788c b/data/fuzz/replace/5abb0ecb12a5a97ee4ad2311241fe9fd2c50788c new file mode 100644 index 00000000..868c912a Binary files /dev/null and b/data/fuzz/replace/5abb0ecb12a5a97ee4ad2311241fe9fd2c50788c differ diff --git a/data/fuzz/replace/5ac60cdebe9e938c45fe0c0a14bd616999d22aa7 b/data/fuzz/replace/5ac60cdebe9e938c45fe0c0a14bd616999d22aa7 new file mode 100644 index 00000000..d14ac25b --- /dev/null +++ b/data/fuzz/replace/5ac60cdebe9e938c45fe0c0a14bd616999d22aa7 @@ -0,0 +1 @@ +џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ33333333* \ No newline at end of file diff --git a/data/fuzz/replace/5b55ec37559bb110228a6591713076b7fa2ce5e8 b/data/fuzz/replace/5b55ec37559bb110228a6591713076b7fa2ce5e8 new file mode 100644 index 00000000..5e2ed41f --- /dev/null +++ b/data/fuzz/replace/5b55ec37559bb110228a6591713076b7fa2ce5e8 @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/fuzz/replace/5c10b5b2cd673a0616d529aa5234b12ee7153808 b/data/fuzz/replace/5c10b5b2cd673a0616d529aa5234b12ee7153808 new file mode 100644 index 00000000..41622b47 --- /dev/null +++ b/data/fuzz/replace/5c10b5b2cd673a0616d529aa5234b12ee7153808 @@ -0,0 +1 @@ +, \ No newline at end of file diff --git a/data/fuzz/replace/5c28095bf32b9e84fb436f4d5db56337dfd6ced1 b/data/fuzz/replace/5c28095bf32b9e84fb436f4d5db56337dfd6ced1 new file mode 100644 index 00000000..f570525a --- /dev/null +++ b/data/fuzz/replace/5c28095bf32b9e84fb436f4d5db56337dfd6ced1 @@ -0,0 +1 @@ +яъ \ No newline at end of file diff --git a/data/fuzz/replace/5c8d691ca4df25ca1a28f7095f13c06123d6f908 b/data/fuzz/replace/5c8d691ca4df25ca1a28f7095f13c06123d6f908 new file mode 100644 index 00000000..3db139e8 Binary files /dev/null and b/data/fuzz/replace/5c8d691ca4df25ca1a28f7095f13c06123d6f908 differ diff --git a/data/fuzz/replace/5ca9632fb3da20ae29d185c83ea8a0e89966a4b5 b/data/fuzz/replace/5ca9632fb3da20ae29d185c83ea8a0e89966a4b5 new file mode 100644 index 00000000..ee9fa782 Binary files /dev/null and b/data/fuzz/replace/5ca9632fb3da20ae29d185c83ea8a0e89966a4b5 differ diff --git a/data/fuzz/replace/5d45a50bfe5e9b6ecad8ee68f17e71a69869d335 b/data/fuzz/replace/5d45a50bfe5e9b6ecad8ee68f17e71a69869d335 new file mode 100644 index 00000000..0737812b Binary files /dev/null and b/data/fuzz/replace/5d45a50bfe5e9b6ecad8ee68f17e71a69869d335 differ diff --git a/data/fuzz/replace/5ddbcf4566f672923de00124be202355eee8250a b/data/fuzz/replace/5ddbcf4566f672923de00124be202355eee8250a new file mode 100644 index 00000000..c0993644 Binary files /dev/null and b/data/fuzz/replace/5ddbcf4566f672923de00124be202355eee8250a differ diff --git a/data/fuzz/replace/5e0f27faa111f57a3856462210545f2737b119a8 b/data/fuzz/replace/5e0f27faa111f57a3856462210545f2737b119a8 new file mode 100644 index 00000000..18085eec Binary files /dev/null and b/data/fuzz/replace/5e0f27faa111f57a3856462210545f2737b119a8 differ diff --git a/data/fuzz/replace/5fb9a0ba37519b7fd51909c778ee3b48502de7c1 b/data/fuzz/replace/5fb9a0ba37519b7fd51909c778ee3b48502de7c1 new file mode 100644 index 00000000..4238428a --- /dev/null +++ b/data/fuzz/replace/5fb9a0ba37519b7fd51909c778ee3b48502de7c1 @@ -0,0 +1 @@ +м \ No newline at end of file diff --git a/data/fuzz/replace/620da84186b56a3ac7084bbb997f7fbaaffd8d26 b/data/fuzz/replace/620da84186b56a3ac7084bbb997f7fbaaffd8d26 new file mode 100644 index 00000000..b9dea171 Binary files /dev/null and b/data/fuzz/replace/620da84186b56a3ac7084bbb997f7fbaaffd8d26 differ diff --git a/data/fuzz/replace/629214148a45ecb1f5f7c855734e7b7d114bde82 b/data/fuzz/replace/629214148a45ecb1f5f7c855734e7b7d114bde82 new file mode 100644 index 00000000..13736e04 Binary files /dev/null and b/data/fuzz/replace/629214148a45ecb1f5f7c855734e7b7d114bde82 differ diff --git a/data/fuzz/replace/62a19b87093a83cbde29386085cb3afae512048e b/data/fuzz/replace/62a19b87093a83cbde29386085cb3afae512048e new file mode 100644 index 00000000..00ea98ed Binary files /dev/null and b/data/fuzz/replace/62a19b87093a83cbde29386085cb3afae512048e differ diff --git a/data/fuzz/replace/62bdf4f429db7bb60f0f4e2011548c0768bb6a6e b/data/fuzz/replace/62bdf4f429db7bb60f0f4e2011548c0768bb6a6e new file mode 100644 index 00000000..8e615778 Binary files /dev/null and b/data/fuzz/replace/62bdf4f429db7bb60f0f4e2011548c0768bb6a6e differ diff --git a/data/fuzz/replace/68fe510098e9425166948125b7fd8559db564275 b/data/fuzz/replace/68fe510098e9425166948125b7fd8559db564275 new file mode 100644 index 00000000..c96d7018 Binary files /dev/null and b/data/fuzz/replace/68fe510098e9425166948125b7fd8559db564275 differ diff --git a/data/fuzz/replace/6aa5340b504631ff785ada9d4ca37ed1cb99d385 b/data/fuzz/replace/6aa5340b504631ff785ada9d4ca37ed1cb99d385 new file mode 100644 index 00000000..3e489aae --- /dev/null +++ b/data/fuzz/replace/6aa5340b504631ff785ada9d4ca37ed1cb99d385 @@ -0,0 +1,2 @@ + +5 \ No newline at end of file diff --git a/data/fuzz/replace/6b05c630ac987132c97c3bb31b4e6dc48c94ef66 b/data/fuzz/replace/6b05c630ac987132c97c3bb31b4e6dc48c94ef66 new file mode 100644 index 00000000..c2f02df1 Binary files /dev/null and b/data/fuzz/replace/6b05c630ac987132c97c3bb31b4e6dc48c94ef66 differ diff --git a/data/fuzz/replace/6b74c7492defa6cce51e53e6490a526931ab814b b/data/fuzz/replace/6b74c7492defa6cce51e53e6490a526931ab814b new file mode 100644 index 00000000..472d6e2b Binary files /dev/null and b/data/fuzz/replace/6b74c7492defa6cce51e53e6490a526931ab814b differ diff --git a/data/fuzz/replace/6da6923ff27d3e93f3276f87399c5d2cd460efed b/data/fuzz/replace/6da6923ff27d3e93f3276f87399c5d2cd460efed new file mode 100644 index 00000000..ecb2cc96 Binary files /dev/null and b/data/fuzz/replace/6da6923ff27d3e93f3276f87399c5d2cd460efed differ diff --git a/data/fuzz/replace/6de2451516b557ea942df244c8586addd2d445a5 b/data/fuzz/replace/6de2451516b557ea942df244c8586addd2d445a5 new file mode 100644 index 00000000..5650ff07 Binary files /dev/null and b/data/fuzz/replace/6de2451516b557ea942df244c8586addd2d445a5 differ diff --git a/data/fuzz/replace/6e69f716ccc373de0d346e23ba5b0a1456e835f4 b/data/fuzz/replace/6e69f716ccc373de0d346e23ba5b0a1456e835f4 new file mode 100644 index 00000000..e451f987 Binary files /dev/null and b/data/fuzz/replace/6e69f716ccc373de0d346e23ba5b0a1456e835f4 differ diff --git a/data/fuzz/replace/6ee4064118b38c4982e15de75ef780821fbb53d4 b/data/fuzz/replace/6ee4064118b38c4982e15de75ef780821fbb53d4 new file mode 100644 index 00000000..50d3a245 Binary files /dev/null and b/data/fuzz/replace/6ee4064118b38c4982e15de75ef780821fbb53d4 differ diff --git a/data/fuzz/replace/707daa653480a4afc737aa7925cad4bc7b4e2cf2 b/data/fuzz/replace/707daa653480a4afc737aa7925cad4bc7b4e2cf2 new file mode 100644 index 00000000..1ddfba72 Binary files /dev/null and b/data/fuzz/replace/707daa653480a4afc737aa7925cad4bc7b4e2cf2 differ diff --git a/data/fuzz/replace/707efc314ec536abed535cdb1b2414aba4713577 b/data/fuzz/replace/707efc314ec536abed535cdb1b2414aba4713577 new file mode 100644 index 00000000..2d3fbf7b Binary files /dev/null and b/data/fuzz/replace/707efc314ec536abed535cdb1b2414aba4713577 differ diff --git a/data/fuzz/replace/716f7b5b75fe0616d104b52a64fb6e3f82a4220c b/data/fuzz/replace/716f7b5b75fe0616d104b52a64fb6e3f82a4220c new file mode 100644 index 00000000..081da25d Binary files /dev/null and b/data/fuzz/replace/716f7b5b75fe0616d104b52a64fb6e3f82a4220c differ diff --git a/data/fuzz/replace/73944cf322f0e9ffff319e0769eba53b78e4bb89 b/data/fuzz/replace/73944cf322f0e9ffff319e0769eba53b78e4bb89 new file mode 100644 index 00000000..638cf5e1 Binary files /dev/null and b/data/fuzz/replace/73944cf322f0e9ffff319e0769eba53b78e4bb89 differ diff --git a/data/fuzz/replace/73b74736664ad85828ce1be2e29fb4a68d24402b b/data/fuzz/replace/73b74736664ad85828ce1be2e29fb4a68d24402b new file mode 100644 index 00000000..009080e8 --- /dev/null +++ b/data/fuzz/replace/73b74736664ad85828ce1be2e29fb4a68d24402b @@ -0,0 +1 @@ +ї \ No newline at end of file diff --git a/data/fuzz/replace/74e6388b381fedc1d7e3e2eb8c3290d46cbc2268 b/data/fuzz/replace/74e6388b381fedc1d7e3e2eb8c3290d46cbc2268 new file mode 100644 index 00000000..46f53395 Binary files /dev/null and b/data/fuzz/replace/74e6388b381fedc1d7e3e2eb8c3290d46cbc2268 differ diff --git a/data/fuzz/replace/77d28696448c009290aa19e27b4f5026cfa34fd5 b/data/fuzz/replace/77d28696448c009290aa19e27b4f5026cfa34fd5 new file mode 100644 index 00000000..70773ea5 Binary files /dev/null and b/data/fuzz/replace/77d28696448c009290aa19e27b4f5026cfa34fd5 differ diff --git a/data/fuzz/replace/79135152a053f257355122db90b254e844838dce b/data/fuzz/replace/79135152a053f257355122db90b254e844838dce new file mode 100644 index 00000000..d81975cb Binary files /dev/null and b/data/fuzz/replace/79135152a053f257355122db90b254e844838dce differ diff --git a/data/fuzz/replace/793755a45f4b6ad7b34dfd52d98f82096d4a2702 b/data/fuzz/replace/793755a45f4b6ad7b34dfd52d98f82096d4a2702 new file mode 100644 index 00000000..e831210b Binary files /dev/null and b/data/fuzz/replace/793755a45f4b6ad7b34dfd52d98f82096d4a2702 differ diff --git a/data/fuzz/replace/7a86be4489672a86c76e3e6dc6ba8b3e37393de3 b/data/fuzz/replace/7a86be4489672a86c76e3e6dc6ba8b3e37393de3 new file mode 100644 index 00000000..c63e78fc Binary files /dev/null and b/data/fuzz/replace/7a86be4489672a86c76e3e6dc6ba8b3e37393de3 differ diff --git a/data/fuzz/replace/7b4ec4636103d641ec664e761370c016fd7e1f57 b/data/fuzz/replace/7b4ec4636103d641ec664e761370c016fd7e1f57 new file mode 100644 index 00000000..56c6b347 Binary files /dev/null and b/data/fuzz/replace/7b4ec4636103d641ec664e761370c016fd7e1f57 differ diff --git a/data/fuzz/replace/7d076c7938872bcc62468804a1111eb718aceeba b/data/fuzz/replace/7d076c7938872bcc62468804a1111eb718aceeba new file mode 100644 index 00000000..68cd946a Binary files /dev/null and b/data/fuzz/replace/7d076c7938872bcc62468804a1111eb718aceeba differ diff --git a/data/fuzz/replace/7d0ce0aab184a4177d62e7a5f4aa090094543fc7 b/data/fuzz/replace/7d0ce0aab184a4177d62e7a5f4aa090094543fc7 new file mode 100644 index 00000000..1f69adc3 Binary files /dev/null and b/data/fuzz/replace/7d0ce0aab184a4177d62e7a5f4aa090094543fc7 differ diff --git a/data/fuzz/replace/8039cffc073eae8c6869c7621ffd4db44ea9ec0b b/data/fuzz/replace/8039cffc073eae8c6869c7621ffd4db44ea9ec0b new file mode 100644 index 00000000..41ddb596 Binary files /dev/null and b/data/fuzz/replace/8039cffc073eae8c6869c7621ffd4db44ea9ec0b differ diff --git a/data/fuzz/replace/823cd15fc2befcd6eb603ddc8eaf446ea3839306 b/data/fuzz/replace/823cd15fc2befcd6eb603ddc8eaf446ea3839306 new file mode 100644 index 00000000..df047706 Binary files /dev/null and b/data/fuzz/replace/823cd15fc2befcd6eb603ddc8eaf446ea3839306 differ diff --git a/data/fuzz/replace/824a8e2187c37ef3108c6a283f4167f6bf39e6ed b/data/fuzz/replace/824a8e2187c37ef3108c6a283f4167f6bf39e6ed new file mode 100644 index 00000000..ebf8d8f0 Binary files /dev/null and b/data/fuzz/replace/824a8e2187c37ef3108c6a283f4167f6bf39e6ed differ diff --git a/data/fuzz/replace/82a164ffab0440fdc7a2c40de70c2b3619e17b92 b/data/fuzz/replace/82a164ffab0440fdc7a2c40de70c2b3619e17b92 new file mode 100644 index 00000000..7e8ae5d1 Binary files /dev/null and b/data/fuzz/replace/82a164ffab0440fdc7a2c40de70c2b3619e17b92 differ diff --git a/data/fuzz/replace/82bb3eab86d4063ea4a3cb97821feb07cecf7b72 b/data/fuzz/replace/82bb3eab86d4063ea4a3cb97821feb07cecf7b72 new file mode 100644 index 00000000..680fc511 --- /dev/null +++ b/data/fuzz/replace/82bb3eab86d4063ea4a3cb97821feb07cecf7b72 @@ -0,0 +1 @@ +Ю \ No newline at end of file diff --git a/data/fuzz/replace/8449e3ee695c8bbca682409532026c4821d8ae09 b/data/fuzz/replace/8449e3ee695c8bbca682409532026c4821d8ae09 new file mode 100644 index 00000000..d17b4e07 Binary files /dev/null and b/data/fuzz/replace/8449e3ee695c8bbca682409532026c4821d8ae09 differ diff --git a/data/fuzz/replace/84593d24fb3511c48598d8963e1f261ea4ea1aa8 b/data/fuzz/replace/84593d24fb3511c48598d8963e1f261ea4ea1aa8 new file mode 100644 index 00000000..c5f129ed Binary files /dev/null and b/data/fuzz/replace/84593d24fb3511c48598d8963e1f261ea4ea1aa8 differ diff --git a/data/fuzz/replace/851f99c354086150f158dea8b19fd994dbfb6d15 b/data/fuzz/replace/851f99c354086150f158dea8b19fd994dbfb6d15 new file mode 100644 index 00000000..c30e31d2 Binary files /dev/null and b/data/fuzz/replace/851f99c354086150f158dea8b19fd994dbfb6d15 differ diff --git a/data/fuzz/replace/8525d8948f1ec5b27808d9e3befbab65b6f8cb33 b/data/fuzz/replace/8525d8948f1ec5b27808d9e3befbab65b6f8cb33 new file mode 100644 index 00000000..20e8f1b8 Binary files /dev/null and b/data/fuzz/replace/8525d8948f1ec5b27808d9e3befbab65b6f8cb33 differ diff --git a/data/fuzz/replace/8585fe89e21563547d44e4cda355d6dd8bf0d01f b/data/fuzz/replace/8585fe89e21563547d44e4cda355d6dd8bf0d01f new file mode 100644 index 00000000..303cef0a Binary files /dev/null and b/data/fuzz/replace/8585fe89e21563547d44e4cda355d6dd8bf0d01f differ diff --git a/data/fuzz/replace/86f09dc02bb4fa501cd13135eb1b555e644aa33f b/data/fuzz/replace/86f09dc02bb4fa501cd13135eb1b555e644aa33f new file mode 100644 index 00000000..78ea9d72 Binary files /dev/null and b/data/fuzz/replace/86f09dc02bb4fa501cd13135eb1b555e644aa33f differ diff --git a/data/fuzz/replace/875113851cd0008165382504306366149a2238d5 b/data/fuzz/replace/875113851cd0008165382504306366149a2238d5 new file mode 100644 index 00000000..d172a4bd Binary files /dev/null and b/data/fuzz/replace/875113851cd0008165382504306366149a2238d5 differ diff --git a/data/fuzz/replace/89abef683225b5c0f2b58455113205d3d9e28ac4 b/data/fuzz/replace/89abef683225b5c0f2b58455113205d3d9e28ac4 new file mode 100644 index 00000000..0f672ae8 Binary files /dev/null and b/data/fuzz/replace/89abef683225b5c0f2b58455113205d3d9e28ac4 differ diff --git a/data/fuzz/replace/8e1cae8122781833e8a686dd378254c44a59dfcc b/data/fuzz/replace/8e1cae8122781833e8a686dd378254c44a59dfcc new file mode 100644 index 00000000..5128a7a5 Binary files /dev/null and b/data/fuzz/replace/8e1cae8122781833e8a686dd378254c44a59dfcc differ diff --git a/data/fuzz/replace/8f1d519f81c5f1b13c457134f7c0d65d61e6236f b/data/fuzz/replace/8f1d519f81c5f1b13c457134f7c0d65d61e6236f new file mode 100644 index 00000000..4c1e95a5 Binary files /dev/null and b/data/fuzz/replace/8f1d519f81c5f1b13c457134f7c0d65d61e6236f differ diff --git a/data/fuzz/replace/92c96352b085c551a3a0f7f336b1f06373a88c17 b/data/fuzz/replace/92c96352b085c551a3a0f7f336b1f06373a88c17 new file mode 100644 index 00000000..97d3d3d3 Binary files /dev/null and b/data/fuzz/replace/92c96352b085c551a3a0f7f336b1f06373a88c17 differ diff --git a/data/fuzz/replace/948982d481af3333158f9761a369042b7bf4dda1 b/data/fuzz/replace/948982d481af3333158f9761a369042b7bf4dda1 new file mode 100644 index 00000000..a5e430fb Binary files /dev/null and b/data/fuzz/replace/948982d481af3333158f9761a369042b7bf4dda1 differ diff --git a/data/fuzz/replace/94af45793beb027bd38b2f6fbbb52ef101110747 b/data/fuzz/replace/94af45793beb027bd38b2f6fbbb52ef101110747 new file mode 100644 index 00000000..df702b56 Binary files /dev/null and b/data/fuzz/replace/94af45793beb027bd38b2f6fbbb52ef101110747 differ diff --git a/data/fuzz/replace/951618ceb9b5bf6c3506382d6f7b2a6c8b9b24fd b/data/fuzz/replace/951618ceb9b5bf6c3506382d6f7b2a6c8b9b24fd new file mode 100644 index 00000000..90a765c6 Binary files /dev/null and b/data/fuzz/replace/951618ceb9b5bf6c3506382d6f7b2a6c8b9b24fd differ diff --git a/data/fuzz/replace/9aef6d55eaa1d795b7d1004c8b53c3c22356eaae b/data/fuzz/replace/9aef6d55eaa1d795b7d1004c8b53c3c22356eaae new file mode 100644 index 00000000..48536626 Binary files /dev/null and b/data/fuzz/replace/9aef6d55eaa1d795b7d1004c8b53c3c22356eaae differ diff --git a/data/fuzz/replace/9b16668f4e16c0e9932661855b7bcb5bad8b0f72 b/data/fuzz/replace/9b16668f4e16c0e9932661855b7bcb5bad8b0f72 new file mode 100644 index 00000000..f7a8cade --- /dev/null +++ b/data/fuzz/replace/9b16668f4e16c0e9932661855b7bcb5bad8b0f72 @@ -0,0 +1 @@ +і \ No newline at end of file diff --git a/data/fuzz/replace/9c4a7c5a828b025087f720caa56aac88b86a0d4b b/data/fuzz/replace/9c4a7c5a828b025087f720caa56aac88b86a0d4b new file mode 100644 index 00000000..6c139fd3 Binary files /dev/null and b/data/fuzz/replace/9c4a7c5a828b025087f720caa56aac88b86a0d4b differ diff --git a/data/fuzz/replace/9cfb7f608003684c175573d379bb773468f953e3 b/data/fuzz/replace/9cfb7f608003684c175573d379bb773468f953e3 new file mode 100644 index 00000000..732fbf61 Binary files /dev/null and b/data/fuzz/replace/9cfb7f608003684c175573d379bb773468f953e3 differ diff --git a/data/fuzz/replace/9eddb6860ecf7699015ffff67e3b375820a48cad b/data/fuzz/replace/9eddb6860ecf7699015ffff67e3b375820a48cad new file mode 100644 index 00000000..427c0113 --- /dev/null +++ b/data/fuzz/replace/9eddb6860ecf7699015ffff67e3b375820a48cad @@ -0,0 +1 @@ +Ёa \ No newline at end of file diff --git a/data/fuzz/replace/9fb276ce7989bf9a42a1ca627bfd5e013ce15c16 b/data/fuzz/replace/9fb276ce7989bf9a42a1ca627bfd5e013ce15c16 new file mode 100644 index 00000000..cb1cccb2 Binary files /dev/null and b/data/fuzz/replace/9fb276ce7989bf9a42a1ca627bfd5e013ce15c16 differ diff --git a/data/fuzz/replace/a1f2e15911248097b5865f5e25d980a738cea953 b/data/fuzz/replace/a1f2e15911248097b5865f5e25d980a738cea953 new file mode 100644 index 00000000..12592aeb Binary files /dev/null and b/data/fuzz/replace/a1f2e15911248097b5865f5e25d980a738cea953 differ diff --git a/data/fuzz/replace/a668a7cb1cab42083c5648e47582ac67f2e8e22c b/data/fuzz/replace/a668a7cb1cab42083c5648e47582ac67f2e8e22c new file mode 100644 index 00000000..eea793a2 Binary files /dev/null and b/data/fuzz/replace/a668a7cb1cab42083c5648e47582ac67f2e8e22c differ diff --git a/data/fuzz/replace/a70fb6a9415d3c34a9ea5510ba7e3a055d88aef9 b/data/fuzz/replace/a70fb6a9415d3c34a9ea5510ba7e3a055d88aef9 new file mode 100644 index 00000000..b8635bcf --- /dev/null +++ b/data/fuzz/replace/a70fb6a9415d3c34a9ea5510ba7e3a055d88aef9 @@ -0,0 +1 @@ +ы \ No newline at end of file diff --git a/data/fuzz/replace/a8abd012eb59b862bf9bc1ea443d2f35a1a2e222 b/data/fuzz/replace/a8abd012eb59b862bf9bc1ea443d2f35a1a2e222 new file mode 100644 index 00000000..3f1695f1 --- /dev/null +++ b/data/fuzz/replace/a8abd012eb59b862bf9bc1ea443d2f35a1a2e222 @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/fuzz/replace/a94b24fd1c9072a299db036f97909171b97b2db6 b/data/fuzz/replace/a94b24fd1c9072a299db036f97909171b97b2db6 new file mode 100644 index 00000000..f0b00f5e Binary files /dev/null and b/data/fuzz/replace/a94b24fd1c9072a299db036f97909171b97b2db6 differ diff --git a/data/fuzz/replace/a980071b2ea741503dac452e75beabf49e780351 b/data/fuzz/replace/a980071b2ea741503dac452e75beabf49e780351 new file mode 100644 index 00000000..cb78910b Binary files /dev/null and b/data/fuzz/replace/a980071b2ea741503dac452e75beabf49e780351 differ diff --git a/data/fuzz/replace/a99760d97c4f7d9b29f75f70625addd929b5359d b/data/fuzz/replace/a99760d97c4f7d9b29f75f70625addd929b5359d new file mode 100644 index 00000000..ec473273 Binary files /dev/null and b/data/fuzz/replace/a99760d97c4f7d9b29f75f70625addd929b5359d differ diff --git a/data/fuzz/replace/aeedb41d39b34ba9edff61bbe4227cd3a18728f7 b/data/fuzz/replace/aeedb41d39b34ba9edff61bbe4227cd3a18728f7 new file mode 100644 index 00000000..0dfdfc23 Binary files /dev/null and b/data/fuzz/replace/aeedb41d39b34ba9edff61bbe4227cd3a18728f7 differ diff --git a/data/fuzz/replace/b05bcf1bcaf0cacb35bb787e755d7f9343e18e41 b/data/fuzz/replace/b05bcf1bcaf0cacb35bb787e755d7f9343e18e41 new file mode 100644 index 00000000..9ee2a18d Binary files /dev/null and b/data/fuzz/replace/b05bcf1bcaf0cacb35bb787e755d7f9343e18e41 differ diff --git a/data/fuzz/replace/b1219b72016074f7016f7f53f16ac65e74743167 b/data/fuzz/replace/b1219b72016074f7016f7f53f16ac65e74743167 new file mode 100644 index 00000000..c59021fe --- /dev/null +++ b/data/fuzz/replace/b1219b72016074f7016f7f53f16ac65e74743167 @@ -0,0 +1 @@ +)Я \ No newline at end of file diff --git a/data/fuzz/replace/b17ba7635ddae8a54ec968c83b2ae5ea04e92a34 b/data/fuzz/replace/b17ba7635ddae8a54ec968c83b2ae5ea04e92a34 new file mode 100644 index 00000000..289a83ba Binary files /dev/null and b/data/fuzz/replace/b17ba7635ddae8a54ec968c83b2ae5ea04e92a34 differ diff --git a/data/fuzz/replace/b2966192532eaecd9b7b5fc374f5d0f3d7a44a1b b/data/fuzz/replace/b2966192532eaecd9b7b5fc374f5d0f3d7a44a1b new file mode 100644 index 00000000..96b65456 Binary files /dev/null and b/data/fuzz/replace/b2966192532eaecd9b7b5fc374f5d0f3d7a44a1b differ diff --git a/data/fuzz/replace/b357b23c338634aefb5b57d1c1c16e38a7a312d4 b/data/fuzz/replace/b357b23c338634aefb5b57d1c1c16e38a7a312d4 new file mode 100644 index 00000000..9e8451a6 Binary files /dev/null and b/data/fuzz/replace/b357b23c338634aefb5b57d1c1c16e38a7a312d4 differ diff --git a/data/fuzz/replace/b362679aad99fa34afa4ba27ce9ecb0ffa03ea9e b/data/fuzz/replace/b362679aad99fa34afa4ba27ce9ecb0ffa03ea9e new file mode 100644 index 00000000..3eda74c2 Binary files /dev/null and b/data/fuzz/replace/b362679aad99fa34afa4ba27ce9ecb0ffa03ea9e differ diff --git a/data/fuzz/replace/b4869749fb834afbe2880320d6df5fa522126d5e b/data/fuzz/replace/b4869749fb834afbe2880320d6df5fa522126d5e new file mode 100644 index 00000000..a5d6acc4 Binary files /dev/null and b/data/fuzz/replace/b4869749fb834afbe2880320d6df5fa522126d5e differ diff --git a/data/fuzz/replace/b51a60734da64be0e618bacbea2865a8a7dcd669 b/data/fuzz/replace/b51a60734da64be0e618bacbea2865a8a7dcd669 new file mode 100644 index 00000000..2f94675b --- /dev/null +++ b/data/fuzz/replace/b51a60734da64be0e618bacbea2865a8a7dcd669 @@ -0,0 +1 @@ +N \ No newline at end of file diff --git a/data/fuzz/replace/b5ec4eda6ea1f1a8cbc53d26ef2935d9192f9ae7 b/data/fuzz/replace/b5ec4eda6ea1f1a8cbc53d26ef2935d9192f9ae7 new file mode 100644 index 00000000..4317e135 Binary files /dev/null and b/data/fuzz/replace/b5ec4eda6ea1f1a8cbc53d26ef2935d9192f9ae7 differ diff --git a/data/fuzz/replace/b6bb5293c03de4327b8dfb9d4b503b217e92b90c b/data/fuzz/replace/b6bb5293c03de4327b8dfb9d4b503b217e92b90c new file mode 100644 index 00000000..b947284c Binary files /dev/null and b/data/fuzz/replace/b6bb5293c03de4327b8dfb9d4b503b217e92b90c differ diff --git a/data/fuzz/replace/b72c98167e6b2d7910ddb024c599281cb6b668b4 b/data/fuzz/replace/b72c98167e6b2d7910ddb024c599281cb6b668b4 new file mode 100644 index 00000000..30e8b80f Binary files /dev/null and b/data/fuzz/replace/b72c98167e6b2d7910ddb024c599281cb6b668b4 differ diff --git a/data/fuzz/replace/b80749b0ad483c4010e69909ae70a9d5c450120c b/data/fuzz/replace/b80749b0ad483c4010e69909ae70a9d5c450120c new file mode 100644 index 00000000..c8e3eb97 --- /dev/null +++ b/data/fuzz/replace/b80749b0ad483c4010e69909ae70a9d5c450120c @@ -0,0 +1 @@ +- \ No newline at end of file diff --git a/data/fuzz/replace/b849015605174c4e858690fb696964be52fdc429 b/data/fuzz/replace/b849015605174c4e858690fb696964be52fdc429 new file mode 100644 index 00000000..ede52e5b Binary files /dev/null and b/data/fuzz/replace/b849015605174c4e858690fb696964be52fdc429 differ diff --git a/data/fuzz/replace/b858cb282617fb0956d960215c8e84d1ccf909c6 b/data/fuzz/replace/b858cb282617fb0956d960215c8e84d1ccf909c6 new file mode 100644 index 00000000..0519ecba --- /dev/null +++ b/data/fuzz/replace/b858cb282617fb0956d960215c8e84d1ccf909c6 @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/fuzz/replace/b88df911ab6298f339cb3a5c9485d6688680a6a7 b/data/fuzz/replace/b88df911ab6298f339cb3a5c9485d6688680a6a7 new file mode 100644 index 00000000..28c3a139 Binary files /dev/null and b/data/fuzz/replace/b88df911ab6298f339cb3a5c9485d6688680a6a7 differ diff --git a/data/fuzz/replace/b97c5032e9b451dab4f9229321eb66e1103ed281 b/data/fuzz/replace/b97c5032e9b451dab4f9229321eb66e1103ed281 new file mode 100644 index 00000000..4895dc1f Binary files /dev/null and b/data/fuzz/replace/b97c5032e9b451dab4f9229321eb66e1103ed281 differ diff --git a/data/fuzz/replace/bb38767e3ae6accc9999bc9df1e8410dec0f1ae0 b/data/fuzz/replace/bb38767e3ae6accc9999bc9df1e8410dec0f1ae0 new file mode 100644 index 00000000..ad1faf69 --- /dev/null +++ b/data/fuzz/replace/bb38767e3ae6accc9999bc9df1e8410dec0f1ae0 @@ -0,0 +1 @@ +Ўё \ No newline at end of file diff --git a/data/fuzz/replace/bb589d0621e5472f470fa3425a234c74b1e202e8 b/data/fuzz/replace/bb589d0621e5472f470fa3425a234c74b1e202e8 new file mode 100644 index 00000000..ad2823b4 --- /dev/null +++ b/data/fuzz/replace/bb589d0621e5472f470fa3425a234c74b1e202e8 @@ -0,0 +1 @@ +' \ No newline at end of file diff --git a/data/fuzz/replace/bd222aef2f5d2a134b202abedcd94433267a4ecb b/data/fuzz/replace/bd222aef2f5d2a134b202abedcd94433267a4ecb new file mode 100644 index 00000000..b0e2942d Binary files /dev/null and b/data/fuzz/replace/bd222aef2f5d2a134b202abedcd94433267a4ecb differ diff --git a/data/fuzz/replace/bd6f533fbcfbf5f9755921f58424a23ea5a8e547 b/data/fuzz/replace/bd6f533fbcfbf5f9755921f58424a23ea5a8e547 new file mode 100644 index 00000000..624260f3 Binary files /dev/null and b/data/fuzz/replace/bd6f533fbcfbf5f9755921f58424a23ea5a8e547 differ diff --git a/data/fuzz/replace/bea99bad6644a572ae2b88e85b633be893f40161 b/data/fuzz/replace/bea99bad6644a572ae2b88e85b633be893f40161 new file mode 100644 index 00000000..9f461d97 Binary files /dev/null and b/data/fuzz/replace/bea99bad6644a572ae2b88e85b633be893f40161 differ diff --git a/data/fuzz/replace/bf8b4530d8d246dd74ac53a13471bba17941dff7 b/data/fuzz/replace/bf8b4530d8d246dd74ac53a13471bba17941dff7 new file mode 100644 index 00000000..6b2aaa76 --- /dev/null +++ b/data/fuzz/replace/bf8b4530d8d246dd74ac53a13471bba17941dff7 @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/fuzz/replace/bf94a8942d41166d7a918cfd4a2bea3a8e558acc b/data/fuzz/replace/bf94a8942d41166d7a918cfd4a2bea3a8e558acc new file mode 100644 index 00000000..26743e28 Binary files /dev/null and b/data/fuzz/replace/bf94a8942d41166d7a918cfd4a2bea3a8e558acc differ diff --git a/data/fuzz/replace/c032adc1ff629c9b66f22749ad667e6beadf144b b/data/fuzz/replace/c032adc1ff629c9b66f22749ad667e6beadf144b new file mode 100644 index 00000000..500c0709 --- /dev/null +++ b/data/fuzz/replace/c032adc1ff629c9b66f22749ad667e6beadf144b @@ -0,0 +1 @@ +X \ No newline at end of file diff --git a/data/fuzz/replace/c314f8c1fa13e1afa11c8716c7bce6dbf02d09aa b/data/fuzz/replace/c314f8c1fa13e1afa11c8716c7bce6dbf02d09aa new file mode 100644 index 00000000..2b8e128b --- /dev/null +++ b/data/fuzz/replace/c314f8c1fa13e1afa11c8716c7bce6dbf02d09aa @@ -0,0 +1 @@ +б \ No newline at end of file diff --git a/data/fuzz/replace/c36485e4e83e34ad1c2614969ee8941079a9b96b b/data/fuzz/replace/c36485e4e83e34ad1c2614969ee8941079a9b96b new file mode 100644 index 00000000..bce857e3 Binary files /dev/null and b/data/fuzz/replace/c36485e4e83e34ad1c2614969ee8941079a9b96b differ diff --git a/data/fuzz/replace/c395a8749d8344707f39fe21b8d8ee305f650a16 b/data/fuzz/replace/c395a8749d8344707f39fe21b8d8ee305f650a16 new file mode 100644 index 00000000..2534f8ce Binary files /dev/null and b/data/fuzz/replace/c395a8749d8344707f39fe21b8d8ee305f650a16 differ diff --git a/data/fuzz/replace/c3f21e3cce0dda1f9fdc3312d4a9498085348195 b/data/fuzz/replace/c3f21e3cce0dda1f9fdc3312d4a9498085348195 new file mode 100644 index 00000000..7a2dbc86 Binary files /dev/null and b/data/fuzz/replace/c3f21e3cce0dda1f9fdc3312d4a9498085348195 differ diff --git a/data/fuzz/replace/c425a8fdb02518ae33c3a8443649a2d1c23a6998 b/data/fuzz/replace/c425a8fdb02518ae33c3a8443649a2d1c23a6998 new file mode 100644 index 00000000..def0a884 Binary files /dev/null and b/data/fuzz/replace/c425a8fdb02518ae33c3a8443649a2d1c23a6998 differ diff --git a/data/fuzz/replace/c4488af0c158e8c2832cb927cfb3ce534104cd1e b/data/fuzz/replace/c4488af0c158e8c2832cb927cfb3ce534104cd1e new file mode 100644 index 00000000..c32b65a0 --- /dev/null +++ b/data/fuzz/replace/c4488af0c158e8c2832cb927cfb3ce534104cd1e @@ -0,0 +1 @@ +Š \ No newline at end of file diff --git a/data/fuzz/replace/c4bbc81c5e4e355bb0518737686319c1f312521c b/data/fuzz/replace/c4bbc81c5e4e355bb0518737686319c1f312521c new file mode 100644 index 00000000..fc57cdbd Binary files /dev/null and b/data/fuzz/replace/c4bbc81c5e4e355bb0518737686319c1f312521c differ diff --git a/data/fuzz/replace/c5a56270c673ae22b41bf94d625daa90388c127e b/data/fuzz/replace/c5a56270c673ae22b41bf94d625daa90388c127e new file mode 100644 index 00000000..6915d370 Binary files /dev/null and b/data/fuzz/replace/c5a56270c673ae22b41bf94d625daa90388c127e differ diff --git a/data/fuzz/replace/c62d980ee57c3707d3eb51912138646787174c5d b/data/fuzz/replace/c62d980ee57c3707d3eb51912138646787174c5d new file mode 100644 index 00000000..91fb9d47 Binary files /dev/null and b/data/fuzz/replace/c62d980ee57c3707d3eb51912138646787174c5d differ diff --git a/data/fuzz/replace/c6c1b4ca3f1094a011684a81a09a7955e91e30e3 b/data/fuzz/replace/c6c1b4ca3f1094a011684a81a09a7955e91e30e3 new file mode 100644 index 00000000..69b433a1 Binary files /dev/null and b/data/fuzz/replace/c6c1b4ca3f1094a011684a81a09a7955e91e30e3 differ diff --git a/data/fuzz/replace/c78ebd3c85a39a596d9f5cfd2b8d240bc1b9c125 b/data/fuzz/replace/c78ebd3c85a39a596d9f5cfd2b8d240bc1b9c125 new file mode 100644 index 00000000..5416677b --- /dev/null +++ b/data/fuzz/replace/c78ebd3c85a39a596d9f5cfd2b8d240bc1b9c125 @@ -0,0 +1 @@ +€ \ No newline at end of file diff --git a/data/fuzz/replace/c8a0dffc0656a0f261ba81ab12800496b5f24dbe b/data/fuzz/replace/c8a0dffc0656a0f261ba81ab12800496b5f24dbe new file mode 100644 index 00000000..ce8c0a97 Binary files /dev/null and b/data/fuzz/replace/c8a0dffc0656a0f261ba81ab12800496b5f24dbe differ diff --git a/data/fuzz/replace/c8bd35648e19d1d1db94000a86597c85080e66d1 b/data/fuzz/replace/c8bd35648e19d1d1db94000a86597c85080e66d1 new file mode 100644 index 00000000..fe3f13cc Binary files /dev/null and b/data/fuzz/replace/c8bd35648e19d1d1db94000a86597c85080e66d1 differ diff --git a/data/fuzz/replace/c8ceb1af5c8179deb449f2e080afbae592a5cefc b/data/fuzz/replace/c8ceb1af5c8179deb449f2e080afbae592a5cefc new file mode 100644 index 00000000..ae122a05 Binary files /dev/null and b/data/fuzz/replace/c8ceb1af5c8179deb449f2e080afbae592a5cefc differ diff --git a/data/fuzz/replace/c93175c7811429253c8dced2d1310a4932943019 b/data/fuzz/replace/c93175c7811429253c8dced2d1310a4932943019 new file mode 100644 index 00000000..4e38a519 Binary files /dev/null and b/data/fuzz/replace/c93175c7811429253c8dced2d1310a4932943019 differ diff --git a/data/fuzz/replace/ca3e49ab8b234f636c1dfaec06a6b07bdef56590 b/data/fuzz/replace/ca3e49ab8b234f636c1dfaec06a6b07bdef56590 new file mode 100644 index 00000000..1485ec46 Binary files /dev/null and b/data/fuzz/replace/ca3e49ab8b234f636c1dfaec06a6b07bdef56590 differ diff --git a/data/fuzz/replace/ca73ab65568cd125c2d27a22bbd9e863c10b675d b/data/fuzz/replace/ca73ab65568cd125c2d27a22bbd9e863c10b675d new file mode 100644 index 00000000..b4158c40 --- /dev/null +++ b/data/fuzz/replace/ca73ab65568cd125c2d27a22bbd9e863c10b675d @@ -0,0 +1 @@ +I \ No newline at end of file diff --git a/data/fuzz/replace/cac40b3f566ca32e09221d5079f3e0194a1b4d98 b/data/fuzz/replace/cac40b3f566ca32e09221d5079f3e0194a1b4d98 new file mode 100644 index 00000000..485ea6bb --- /dev/null +++ b/data/fuzz/replace/cac40b3f566ca32e09221d5079f3e0194a1b4d98 @@ -0,0 +1 @@ +q+ \ No newline at end of file diff --git a/data/fuzz/replace/ccd5b80dc9bd371bcb6b2d218c725997e4073dea b/data/fuzz/replace/ccd5b80dc9bd371bcb6b2d218c725997e4073dea new file mode 100644 index 00000000..bed1cfb0 --- /dev/null +++ b/data/fuzz/replace/ccd5b80dc9bd371bcb6b2d218c725997e4073dea @@ -0,0 +1 @@ +М? \ No newline at end of file diff --git a/data/fuzz/replace/cf849a762e186d4dfd7090919e20df1280251194 b/data/fuzz/replace/cf849a762e186d4dfd7090919e20df1280251194 new file mode 100644 index 00000000..e682b280 Binary files /dev/null and b/data/fuzz/replace/cf849a762e186d4dfd7090919e20df1280251194 differ diff --git a/data/fuzz/replace/cf8f3c323baf839f8ba163fedb77aa3e36b9eeb3 b/data/fuzz/replace/cf8f3c323baf839f8ba163fedb77aa3e36b9eeb3 new file mode 100644 index 00000000..950881eb Binary files /dev/null and b/data/fuzz/replace/cf8f3c323baf839f8ba163fedb77aa3e36b9eeb3 differ diff --git a/data/fuzz/replace/d14fd5e026399bf28fec49eb4468fe0c2d36b760 b/data/fuzz/replace/d14fd5e026399bf28fec49eb4468fe0c2d36b760 new file mode 100644 index 00000000..39672d7f --- /dev/null +++ b/data/fuzz/replace/d14fd5e026399bf28fec49eb4468fe0c2d36b760 @@ -0,0 +1 @@ +фИ \ No newline at end of file diff --git a/data/fuzz/replace/d15b9da5296c0e144a7fc1fb1770216630ca8507 b/data/fuzz/replace/d15b9da5296c0e144a7fc1fb1770216630ca8507 new file mode 100644 index 00000000..28fab894 Binary files /dev/null and b/data/fuzz/replace/d15b9da5296c0e144a7fc1fb1770216630ca8507 differ diff --git a/data/fuzz/replace/d1b5dea1e0e6bf3711c78da56b83bcd8a4f71201 b/data/fuzz/replace/d1b5dea1e0e6bf3711c78da56b83bcd8a4f71201 new file mode 100644 index 00000000..b29df2c8 --- /dev/null +++ b/data/fuzz/replace/d1b5dea1e0e6bf3711c78da56b83bcd8a4f71201 @@ -0,0 +1 @@ +јg \ No newline at end of file diff --git a/data/fuzz/replace/d24f3db0ff0936e95a1c54e6c45973859837ff2a b/data/fuzz/replace/d24f3db0ff0936e95a1c54e6c45973859837ff2a new file mode 100644 index 00000000..0f5ad497 Binary files /dev/null and b/data/fuzz/replace/d24f3db0ff0936e95a1c54e6c45973859837ff2a differ diff --git a/data/fuzz/replace/d3a2b4fdfbea3ee43829d069bcb028a5546f3d94 b/data/fuzz/replace/d3a2b4fdfbea3ee43829d069bcb028a5546f3d94 new file mode 100644 index 00000000..495650a8 Binary files /dev/null and b/data/fuzz/replace/d3a2b4fdfbea3ee43829d069bcb028a5546f3d94 differ diff --git a/data/fuzz/replace/d3ea2cafae39849166aa24695c19fee21887b454 b/data/fuzz/replace/d3ea2cafae39849166aa24695c19fee21887b454 new file mode 100644 index 00000000..b4acd266 Binary files /dev/null and b/data/fuzz/replace/d3ea2cafae39849166aa24695c19fee21887b454 differ diff --git a/data/fuzz/replace/d3f10d833b42d485ae9d679a7d4e89b02a6e395d b/data/fuzz/replace/d3f10d833b42d485ae9d679a7d4e89b02a6e395d new file mode 100644 index 00000000..f6fedba5 Binary files /dev/null and b/data/fuzz/replace/d3f10d833b42d485ae9d679a7d4e89b02a6e395d differ diff --git a/data/fuzz/replace/d40c092ddab89b9d3f48694d609d20ddeecf6cbb b/data/fuzz/replace/d40c092ddab89b9d3f48694d609d20ddeecf6cbb new file mode 100644 index 00000000..c5ae8c3b Binary files /dev/null and b/data/fuzz/replace/d40c092ddab89b9d3f48694d609d20ddeecf6cbb differ diff --git a/data/fuzz/replace/d4748037a1c586e996e0160a85182dab672726b5 b/data/fuzz/replace/d4748037a1c586e996e0160a85182dab672726b5 new file mode 100644 index 00000000..16dc0b1d Binary files /dev/null and b/data/fuzz/replace/d4748037a1c586e996e0160a85182dab672726b5 differ diff --git a/data/fuzz/replace/d806edb38517460d2d146df863df1012819c76d8 b/data/fuzz/replace/d806edb38517460d2d146df863df1012819c76d8 new file mode 100644 index 00000000..60d76df5 Binary files /dev/null and b/data/fuzz/replace/d806edb38517460d2d146df863df1012819c76d8 differ diff --git a/data/fuzz/replace/d8072da619f219ccc993b090a17ea67cbc8f2ca4 b/data/fuzz/replace/d8072da619f219ccc993b090a17ea67cbc8f2ca4 new file mode 100644 index 00000000..f21d9df3 --- /dev/null +++ b/data/fuzz/replace/d8072da619f219ccc993b090a17ea67cbc8f2ca4 @@ -0,0 +1 @@ +п @ \ No newline at end of file diff --git a/data/fuzz/replace/d8765e1e8a907e51451570c9bab8ec6d9b502d38 b/data/fuzz/replace/d8765e1e8a907e51451570c9bab8ec6d9b502d38 new file mode 100644 index 00000000..c5348ca9 Binary files /dev/null and b/data/fuzz/replace/d8765e1e8a907e51451570c9bab8ec6d9b502d38 differ diff --git a/data/fuzz/replace/dcd935ea068d2decb49f4105e323c43f0a45aea6 b/data/fuzz/replace/dcd935ea068d2decb49f4105e323c43f0a45aea6 new file mode 100644 index 00000000..60a1167c Binary files /dev/null and b/data/fuzz/replace/dcd935ea068d2decb49f4105e323c43f0a45aea6 differ diff --git a/data/fuzz/replace/df58248c414f342c81e056b40bee12d17a08bf61 b/data/fuzz/replace/df58248c414f342c81e056b40bee12d17a08bf61 new file mode 100644 index 00000000..f59ec20a --- /dev/null +++ b/data/fuzz/replace/df58248c414f342c81e056b40bee12d17a08bf61 @@ -0,0 +1 @@ +* \ No newline at end of file diff --git a/data/fuzz/replace/e0184adedf913b076626646d3f52c3b49c39ad6d b/data/fuzz/replace/e0184adedf913b076626646d3f52c3b49c39ad6d new file mode 100644 index 00000000..9fb75b8d --- /dev/null +++ b/data/fuzz/replace/e0184adedf913b076626646d3f52c3b49c39ad6d @@ -0,0 +1 @@ +E \ No newline at end of file diff --git a/data/fuzz/replace/e230784e55fca09f77620d4159243836b4712d46 b/data/fuzz/replace/e230784e55fca09f77620d4159243836b4712d46 new file mode 100644 index 00000000..d2370d1b Binary files /dev/null and b/data/fuzz/replace/e230784e55fca09f77620d4159243836b4712d46 differ diff --git a/data/fuzz/replace/e447bf6ef2b3387e23d16e891293132919de80b4 b/data/fuzz/replace/e447bf6ef2b3387e23d16e891293132919de80b4 new file mode 100644 index 00000000..1088a367 Binary files /dev/null and b/data/fuzz/replace/e447bf6ef2b3387e23d16e891293132919de80b4 differ diff --git a/data/fuzz/replace/e4ac13757b69a1c383e8a280e3de90b0578f145a b/data/fuzz/replace/e4ac13757b69a1c383e8a280e3de90b0578f145a new file mode 100644 index 00000000..6e75cd36 Binary files /dev/null and b/data/fuzz/replace/e4ac13757b69a1c383e8a280e3de90b0578f145a differ diff --git a/data/fuzz/replace/e662b9902fb4f30ec68b2d2a511666743227c495 b/data/fuzz/replace/e662b9902fb4f30ec68b2d2a511666743227c495 new file mode 100644 index 00000000..2bfcd8b2 Binary files /dev/null and b/data/fuzz/replace/e662b9902fb4f30ec68b2d2a511666743227c495 differ diff --git a/data/fuzz/replace/e7064f0b80f61dbc65915311032d27baa569ae2a b/data/fuzz/replace/e7064f0b80f61dbc65915311032d27baa569ae2a new file mode 100644 index 00000000..e8a0f876 --- /dev/null +++ b/data/fuzz/replace/e7064f0b80f61dbc65915311032d27baa569ae2a @@ -0,0 +1 @@ +) \ No newline at end of file diff --git a/data/fuzz/replace/e848cdc157c62cd7d4d58214e7780fe7c73714c4 b/data/fuzz/replace/e848cdc157c62cd7d4d58214e7780fe7c73714c4 new file mode 100644 index 00000000..909f185e Binary files /dev/null and b/data/fuzz/replace/e848cdc157c62cd7d4d58214e7780fe7c73714c4 differ diff --git a/data/fuzz/replace/e951a82ef46ee767c41bb859f2a393660e5249ca b/data/fuzz/replace/e951a82ef46ee767c41bb859f2a393660e5249ca new file mode 100644 index 00000000..68aebeff Binary files /dev/null and b/data/fuzz/replace/e951a82ef46ee767c41bb859f2a393660e5249ca differ diff --git a/data/fuzz/replace/e9ee43e2da47ac1083771e9578e36bc19068123b b/data/fuzz/replace/e9ee43e2da47ac1083771e9578e36bc19068123b new file mode 100644 index 00000000..195f54a5 Binary files /dev/null and b/data/fuzz/replace/e9ee43e2da47ac1083771e9578e36bc19068123b differ diff --git a/data/fuzz/replace/eb1390ac146171dee0fad4d6393721f2a512bfe3 b/data/fuzz/replace/eb1390ac146171dee0fad4d6393721f2a512bfe3 new file mode 100644 index 00000000..bcd7c9e7 Binary files /dev/null and b/data/fuzz/replace/eb1390ac146171dee0fad4d6393721f2a512bfe3 differ diff --git a/data/fuzz/replace/eb9919b13ba4195d22f8d0746389bc6fb0672143 b/data/fuzz/replace/eb9919b13ba4195d22f8d0746389bc6fb0672143 new file mode 100644 index 00000000..c7cc9f38 Binary files /dev/null and b/data/fuzz/replace/eb9919b13ba4195d22f8d0746389bc6fb0672143 differ diff --git a/data/fuzz/replace/ee9131310edc2eb14928946611fb22f143ef3735 b/data/fuzz/replace/ee9131310edc2eb14928946611fb22f143ef3735 new file mode 100644 index 00000000..2aecf124 Binary files /dev/null and b/data/fuzz/replace/ee9131310edc2eb14928946611fb22f143ef3735 differ diff --git a/data/fuzz/replace/eebd8e0976a59117a707e3a062825e2efd5d57f4 b/data/fuzz/replace/eebd8e0976a59117a707e3a062825e2efd5d57f4 new file mode 100644 index 00000000..df57bda3 Binary files /dev/null and b/data/fuzz/replace/eebd8e0976a59117a707e3a062825e2efd5d57f4 differ diff --git a/data/fuzz/replace/ef54ee157fa3074d78000bf9fe4421e37ceaa2be b/data/fuzz/replace/ef54ee157fa3074d78000bf9fe4421e37ceaa2be new file mode 100644 index 00000000..96b9b43a Binary files /dev/null and b/data/fuzz/replace/ef54ee157fa3074d78000bf9fe4421e37ceaa2be differ diff --git a/data/fuzz/replace/efa42c6ae0259c758097eb060a4b112abc9621ee b/data/fuzz/replace/efa42c6ae0259c758097eb060a4b112abc9621ee new file mode 100644 index 00000000..242f7fee Binary files /dev/null and b/data/fuzz/replace/efa42c6ae0259c758097eb060a4b112abc9621ee differ diff --git a/data/fuzz/replace/efdd02477ba5da245453eb10fbf017c58578aac3 b/data/fuzz/replace/efdd02477ba5da245453eb10fbf017c58578aac3 new file mode 100644 index 00000000..3aa30940 --- /dev/null +++ b/data/fuzz/replace/efdd02477ba5da245453eb10fbf017c58578aac3 @@ -0,0 +1 @@ +Хяья- \ No newline at end of file diff --git a/data/fuzz/replace/efe43def97eb295fe99c3753f2d740d7b36df689 b/data/fuzz/replace/efe43def97eb295fe99c3753f2d740d7b36df689 new file mode 100644 index 00000000..04f7b5be --- /dev/null +++ b/data/fuzz/replace/efe43def97eb295fe99c3753f2d740d7b36df689 @@ -0,0 +1 @@ +№ \ No newline at end of file diff --git a/data/fuzz/replace/f03cf81f2735705fa986bff3966da3bb3ab50086 b/data/fuzz/replace/f03cf81f2735705fa986bff3966da3bb3ab50086 new file mode 100644 index 00000000..8c230c92 --- /dev/null +++ b/data/fuzz/replace/f03cf81f2735705fa986bff3966da3bb3ab50086 @@ -0,0 +1 @@ +~––––––––––––––––ž–––O––y^ \ No newline at end of file diff --git a/data/fuzz/replace/f05ce45a8cad76bdc70bfa22822ee25b5512a1a1 b/data/fuzz/replace/f05ce45a8cad76bdc70bfa22822ee25b5512a1a1 new file mode 100644 index 00000000..f8b4331e Binary files /dev/null and b/data/fuzz/replace/f05ce45a8cad76bdc70bfa22822ee25b5512a1a1 differ diff --git a/data/fuzz/replace/f4a61a9b343b5887db9c7f6abe125c53b6d04f30 b/data/fuzz/replace/f4a61a9b343b5887db9c7f6abe125c53b6d04f30 new file mode 100644 index 00000000..d51d6f4f Binary files /dev/null and b/data/fuzz/replace/f4a61a9b343b5887db9c7f6abe125c53b6d04f30 differ diff --git a/data/fuzz/replace/f56424c18e2ba1049912e2d1e70526a68284b4de b/data/fuzz/replace/f56424c18e2ba1049912e2d1e70526a68284b4de new file mode 100644 index 00000000..352965ee Binary files /dev/null and b/data/fuzz/replace/f56424c18e2ba1049912e2d1e70526a68284b4de differ diff --git a/data/fuzz/replace/f5cd31de8548ae136839ccafb8a9904977065152 b/data/fuzz/replace/f5cd31de8548ae136839ccafb8a9904977065152 new file mode 100644 index 00000000..a7f7c103 Binary files /dev/null and b/data/fuzz/replace/f5cd31de8548ae136839ccafb8a9904977065152 differ diff --git a/data/fuzz/replace/f622a45e51b6a2699ad5b291cf4cd755eba41baf b/data/fuzz/replace/f622a45e51b6a2699ad5b291cf4cd755eba41baf new file mode 100644 index 00000000..b4ad69ad Binary files /dev/null and b/data/fuzz/replace/f622a45e51b6a2699ad5b291cf4cd755eba41baf differ diff --git a/data/fuzz/replace/f75b1bbb2b08943c29d686f3d65c4f70dfd6fee2 b/data/fuzz/replace/f75b1bbb2b08943c29d686f3d65c4f70dfd6fee2 new file mode 100644 index 00000000..6d0e1fef Binary files /dev/null and b/data/fuzz/replace/f75b1bbb2b08943c29d686f3d65c4f70dfd6fee2 differ diff --git a/data/fuzz/replace/f7c0f473e0b9f3961e7a6a3fe959a820d29fca2f b/data/fuzz/replace/f7c0f473e0b9f3961e7a6a3fe959a820d29fca2f new file mode 100644 index 00000000..139a36ff Binary files /dev/null and b/data/fuzz/replace/f7c0f473e0b9f3961e7a6a3fe959a820d29fca2f differ diff --git a/data/fuzz/replace/f85be444915cf688937828dcdd2a962376220890 b/data/fuzz/replace/f85be444915cf688937828dcdd2a962376220890 new file mode 100644 index 00000000..9025797c Binary files /dev/null and b/data/fuzz/replace/f85be444915cf688937828dcdd2a962376220890 differ diff --git a/data/fuzz/replace/fbb5b1b132d7fa74f8a46ee0472d79eb4e08c15f b/data/fuzz/replace/fbb5b1b132d7fa74f8a46ee0472d79eb4e08c15f new file mode 100644 index 00000000..38bf9bb8 Binary files /dev/null and b/data/fuzz/replace/fbb5b1b132d7fa74f8a46ee0472d79eb4e08c15f differ diff --git a/data/fuzz/replace/fbd27dbd2d03d4a96066f0bade47b73b5350e035 b/data/fuzz/replace/fbd27dbd2d03d4a96066f0bade47b73b5350e035 new file mode 100644 index 00000000..ae321153 Binary files /dev/null and b/data/fuzz/replace/fbd27dbd2d03d4a96066f0bade47b73b5350e035 differ diff --git a/data/fuzz/replace/fd45e8d6614e80a12a7a83095fa651b5951517ef b/data/fuzz/replace/fd45e8d6614e80a12a7a83095fa651b5951517ef new file mode 100644 index 00000000..54bbe9a3 Binary files /dev/null and b/data/fuzz/replace/fd45e8d6614e80a12a7a83095fa651b5951517ef differ diff --git a/data/fuzz/replace/fe0fbcee48108789770892b76def3db7402e8f2c b/data/fuzz/replace/fe0fbcee48108789770892b76def3db7402e8f2c new file mode 100644 index 00000000..55151ecb Binary files /dev/null and b/data/fuzz/replace/fe0fbcee48108789770892b76def3db7402e8f2c differ diff --git a/data/fuzz/replace/feb99e5638964a3cbf021401c8aeb40c1a950c75 b/data/fuzz/replace/feb99e5638964a3cbf021401c8aeb40c1a950c75 new file mode 100644 index 00000000..985947cb Binary files /dev/null and b/data/fuzz/replace/feb99e5638964a3cbf021401c8aeb40c1a950c75 differ diff --git a/data/fuzz/replace/fff0fbe7e0c2939a42e1e1d448ac57101c7c9b2d b/data/fuzz/replace/fff0fbe7e0c2939a42e1e1d448ac57101c7c9b2d new file mode 100644 index 00000000..23d12b21 Binary files /dev/null and b/data/fuzz/replace/fff0fbe7e0c2939a42e1e1d448ac57101c7c9b2d differ diff --git a/example/CMakeLists.txt b/example/CMakeLists.txt new file mode 100644 index 00000000..19e21948 --- /dev/null +++ b/example/CMakeLists.txt @@ -0,0 +1,6 @@ +cmake_minimum_required(VERSION 3.12) +project("UnorderedDenseExample") + +add_executable(UnorderedDenseExample main.cpp) +find_package(unordered_dense CONFIG REQUIRED) +target_link_libraries(UnorderedDenseExample unordered_dense::unordered_dense) diff --git a/example/README.md b/example/README.md new file mode 100644 index 00000000..14fef9b4 --- /dev/null +++ b/example/README.md @@ -0,0 +1,16 @@ +A simple example that demonstrats how to make use of `unordered_dense` with cmake. + +Use globally installed `unordered_dense`: +```sh +mkdir build && cd build +cmake -DCMAKE_INSTALL_PREFIX:PATH=${HOME}/unordered_dense_install .. +make +``` + +Use locall installed `unordered_dense`, as in the main README.md: + +```sh +mkdir build && cd build +cmake -DCMAKE_INSTALL_PREFIX:PATH=${HOME}/unordered_dense_install .. +make +``` diff --git a/example/main.cpp b/example/main.cpp new file mode 100644 index 00000000..8e9c65e4 --- /dev/null +++ b/example/main.cpp @@ -0,0 +1,13 @@ +#include + +#include + +auto main() -> int { + auto map = ankerl::unordered_dense::map(); + map[123] = "hello"; + map[987] = "world!"; + + for (auto const& [key, val] : map) { + std::cout << key << " => " << val << std::endl; + } +} diff --git a/include/ankerl/unordered_dense.h b/include/ankerl/unordered_dense.h index 804d3875..aa84ed40 100644 --- a/include/ankerl/unordered_dense.h +++ b/include/ankerl/unordered_dense.h @@ -1,7 +1,7 @@ ///////////////////////// ankerl::unordered_dense::{map, set} ///////////////////////// // A fast & densely stored hashmap and hashset based on robin-hood backward shift deletion. -// Version 1.2.0 +// Version 1.3.0 // https://github.com/martinus/unordered_dense // // Licensed under the MIT License . @@ -31,7 +31,7 @@ // see https://semver.org/spec/v2.0.0.html #define ANKERL_UNORDERED_DENSE_VERSION_MAJOR 1 // incompatible API changes -#define ANKERL_UNORDERED_DENSE_VERSION_MINOR 2 // add functionality in a backwards compatible manner +#define ANKERL_UNORDERED_DENSE_VERSION_MINOR 3 // add functionality in a backwards compatible manner #define ANKERL_UNORDERED_DENSE_VERSION_PATCH 0 // backwards compatible bug fixes #if defined(_MSVC_LANG) @@ -719,7 +719,10 @@ class table { AllocatorOrContainer const& alloc_or_container = AllocatorOrContainer()) : m_values(alloc_or_container) , m_hash(hash) - , m_equal(equal) {} + , m_equal(equal) { + // If alloc_or_container is a container with elements, we don't want the data that was in it + m_values.clear(); + } table(size_t bucket_count, AllocatorOrContainer const& alloc_or_container) : table(bucket_count, Hash(), KeyEqual(), alloc_or_container) {} @@ -935,6 +938,60 @@ class table { return std::move(m_values); } + // nonstandard API: + // Discards the internally held container and replaces it with the one passed. Erases non-unique elements. + auto replace(value_container_type&& container) { + if (container.size() > max_size()) { + throw std::out_of_range("ankerl::unordered_dense::map::replace(): too many elements"); + } + + auto shifts = calc_shifts_for_size(container.size()); + if (0 == m_num_buckets || shifts < m_shifts || container.get_allocator() != m_values.get_allocator()) { + m_shifts = shifts; + deallocate_buckets(); + allocate_buckets_from_shift(); + } + clear_buckets(); + + m_values = std::move(container); + + // can't use clear_and_fill_buckets_from_values() because container elements might not be unique + auto value_idx = value_idx_type{}; + + // loop until we reach the end of the container. duplicated entries will be replaced with back(). + while (value_idx != static_cast(m_values.size())) { + auto const& key = get_key(m_values[value_idx]); + + auto hash = mixed_hash(key); + auto dist_and_fingerprint = dist_and_fingerprint_from_hash(hash); + auto bucket_idx = bucket_idx_from_hash(hash); + + bool key_found = false; + while (true) { + auto const& bucket = at(m_buckets, bucket_idx); + if (dist_and_fingerprint > bucket.dist_and_fingerprint) { + break; + } + if (dist_and_fingerprint == bucket.dist_and_fingerprint && m_equal(key, m_values[bucket.value_idx].first)) { + key_found = true; + break; + } + dist_and_fingerprint = dist_inc(dist_and_fingerprint); + bucket_idx = next(bucket_idx); + } + + if (key_found) { + if (value_idx != static_cast(m_values.size() - 1)) { + m_values[value_idx] = std::move(m_values.back()); + } + m_values.pop_back(); + } else { + place_and_shift_up({dist_and_fingerprint, value_idx}, bucket_idx); + ++value_idx; + } + } + } + template , bool> = true> auto insert_or_assign(Key const& key, M&& mapped) -> std::pair { return do_insert_or_assign(key, std::forward(mapped)); @@ -1191,7 +1248,7 @@ class table { capa = std::min(capa, max_size()); m_values.reserve(capa); auto shifts = calc_shifts_for_size(std::max(capa, size())); - if (shifts < m_shifts) { + if (0 == m_num_buckets || shifts < m_shifts) { m_shifts = shifts; deallocate_buckets(); allocate_buckets_from_shift(); diff --git a/meson.build b/meson.build index e178edc2..2f9c1ce0 100644 --- a/meson.build +++ b/meson.build @@ -18,7 +18,7 @@ # project('unordered_dense', 'cpp', - version: '1.2.0', + version: '1.3.0', license: 'MIT', default_options : ['cpp_std=c++17', 'warning_level=3', 'werror=true']) diff --git a/scripts/fuzz_run.sh b/scripts/fuzz_run.sh index ae754b99..223c8525 100755 --- a/scripts/fuzz_run.sh +++ b/scripts/fuzz_run.sh @@ -2,7 +2,11 @@ set -ev # Start from a build directory, usually clang_cpp17_release -# usage: fuzz_run.sh +# ../../scripts/fuzz_run.sh +# +# Found a crash? Minimize it like so: +# ./test/fuzz_replace -minimize_crash=1 ./crash-123abcdef + FUZZ_TARGET=$1 SCRIPT_DIR=`dirname "$0"` CORPUS_SMALL=${SCRIPT_DIR}/../data/fuzz/${FUZZ_TARGET} diff --git a/test/fuzz/replace.cpp b/test/fuzz/replace.cpp new file mode 100644 index 00000000..a0d90768 --- /dev/null +++ b/test/fuzz/replace.cpp @@ -0,0 +1,73 @@ +#include +#include +#include + +#if defined(FUZZ) +# define REQUIRE(x) ::fuzz::Provider::require(x) +#else +# include +#endif + +#include + +namespace fuzz { + +void replace(uint8_t const* data, size_t size) { + auto p = fuzz::Provider{data, size}; + + auto counts = Counter{}; + + using Map = ankerl::unordered_dense::map; + + auto initial_size = p.bounded(100); + auto map = ankerl::unordered_dense::map{}; + for (size_t i = 0; i < initial_size; ++i) { + map.try_emplace(Counter::Obj{i, counts}, Counter::Obj{i, counts}); + } + + // create a container with data in it provided by fuzzer + auto container = Map::value_container_type{}; + auto comparison_container = std::vector>(); + auto v = size_t{}; + while (p.has_remaining_bytes()) { + auto key = p.integral(); + container.emplace_back(Counter::Obj{key, counts}, Counter::Obj{v, counts}); + comparison_container.emplace_back(key, v); + ++v; + } + + // create comparison map with the same move-back-forward algorithm + auto comparison_map = std::unordered_map{}; + size_t idx = 0; + while (idx != comparison_container.size()) { + auto [key, val] = comparison_container[idx]; + if (comparison_map.try_emplace(key, val).second) { + ++idx; + } else { + comparison_container[idx] = comparison_container.back(); + comparison_container.pop_back(); + } + } + + map.replace(std::move(container)); + + // now check if the data in the map is exactly what we expect + REQUIRE(map.size() == comparison_map.size()); + for (auto [key, val] : comparison_map) { + auto key_obj = Counter::Obj{key, counts}; + auto val_obj = Counter::Obj{val, counts}; + auto it = map.find(key_obj); + REQUIRE(it != map.end()); + REQUIRE(it->first == key_obj); + REQUIRE(it->second == val_obj); + } +} + +} // namespace fuzz + +#if defined(FUZZ) +extern "C" auto LLVMFuzzerTestOneInput(uint8_t const* data, size_t size) -> int { + fuzz::replace(data, size); + return 0; +} +#endif \ No newline at end of file diff --git a/test/fuzz/replace.h b/test/fuzz/replace.h new file mode 100644 index 00000000..be3a13b4 --- /dev/null +++ b/test/fuzz/replace.h @@ -0,0 +1,10 @@ +#pragma once + +#include +#include + +namespace fuzz { + +void replace(uint8_t const* data, size_t size); + +} // namespace fuzz diff --git a/test/meson.build b/test/meson.build index 6e4edd7e..43a7d9c8 100644 --- a/test/meson.build +++ b/test/meson.build @@ -14,6 +14,7 @@ test_sources = [ 'fuzz/api.cpp', 'fuzz/insert_erase.cpp', + 'fuzz/replace.cpp', 'fuzz/string.cpp', 'unit/assign_to_move.cpp', @@ -57,6 +58,7 @@ test_sources = [ 'unit/not_moveable.cpp', 'unit/pmr.cpp', 'unit/rehash.cpp', + 'unit/replace.cpp', 'unit/reserve_and_assign.cpp', 'unit/reserve.cpp', 'unit/set.cpp', @@ -186,6 +188,14 @@ if compiler.get_id() == 'clang' link_args: fuzz_link_args, dependencies: fuzz_deps, ) + executable( + 'fuzz_replace', + fuzz_sources + ['fuzz/replace.cpp'], + include_directories: incdir, + cpp_args : fuzz_cpp_args, + link_args: fuzz_link_args, + dependencies: fuzz_deps, + ) executable( 'fuzz_insert_erase', fuzz_sources + ['fuzz/insert_erase.cpp'], diff --git a/test/unit/fuzz_corpus.cpp b/test/unit/fuzz_corpus.cpp index 5124b285..ecf85565 100644 --- a/test/unit/fuzz_corpus.cpp +++ b/test/unit/fuzz_corpus.cpp @@ -3,6 +3,7 @@ #include // for api #include // for insert_erase +#include // for replace #include // for string #include // for TestCase, MessageBuilder, skip, INFO @@ -59,7 +60,7 @@ void run_corpus(std::string_view name, Op op) { for (auto const& dir_entry : std::filesystem::directory_iterator(path)) { ++num_files; if (periodic) { - fmt::print("\r|{}| {:7}/{} ", progressbar(num_files), num_files, total_files); + fmt::print("\r|{}| {:7}/{:<7} ", progressbar(num_files), num_files, total_files); } auto const& test_file = dir_entry.path(); @@ -71,7 +72,7 @@ void run_corpus(std::string_view name, Op op) { op(reinterpret_cast(content.data()), content.size()); } REQUIRE(0U != num_files); - fmt::print("\r|{}| {:7}/{} {}\n", progressbar(num_files), num_files, total_files, path.string()); + fmt::print("\r|{}| {:7}/{:<7} {}\n", progressbar(num_files), num_files, total_files, path.string()); } } // namespace @@ -80,10 +81,14 @@ TEST_CASE("fuzz_api" * doctest::test_suite("fuzz") * doctest::skip(true)) { run_corpus("api", fuzz::api); } +TEST_CASE("fuzz_replace" * doctest::test_suite("fuzz") * doctest::skip(true)) { + run_corpus("replace", fuzz::replace); +} + TEST_CASE("fuzz_insert_erase" * doctest::test_suite("fuzz") * doctest::skip(true)) { run_corpus("insert_erase", fuzz::insert_erase); } TEST_CASE("fuzz_string" * doctest::test_suite("fuzz") * doctest::skip(true)) { run_corpus("string", fuzz::string); -} \ No newline at end of file +} diff --git a/test/unit/replace.cpp b/test/unit/replace.cpp new file mode 100644 index 00000000..7b8259a1 --- /dev/null +++ b/test/unit/replace.cpp @@ -0,0 +1,35 @@ +#include + +#include + +#include + +TEST_CASE("replace") { + auto counts = Counter{}; + INFO(counts); + + using Map = ankerl::unordered_dense::map; + auto container = Map::value_container_type{}; + + for (size_t i = 0; i < 100; ++i) { + container.emplace_back(Counter::Obj{i, counts}, Counter::Obj{i, counts}); + container.emplace_back(Counter::Obj{i, counts}, Counter::Obj{i, counts}); + } + + for (size_t i = 0; i < 10; ++i) { + container.emplace_back(Counter::Obj{i, counts}, Counter::Obj{i, counts}); + } + + // add some elements + auto map = Map(); + for (size_t i = 0; i < 10; ++i) { + map.try_emplace(Counter::Obj{i, counts}, Counter::Obj{i, counts}); + } + + map.replace(std::move(container)); + + REQUIRE(map.size() == 100U); + for (size_t i = 0; i < 100; ++i) { + REQUIRE(map.contains(Counter::Obj{i, counts})); + } +}