diff options
| author | Jörg Frings-Fürst <debian@jff-webhsoting.net> | 2026-05-08 11:53:45 +0200 |
|---|---|---|
| committer | Jörg Frings-Fürst <debian@jff-webhsoting.net> | 2026-05-08 11:53:45 +0200 |
| commit | c3dce46c5f7cad6bc3cc91cc2c711ac089f25923 (patch) | |
| tree | abaac2b003b368aa5bde30a5b898a3f51e85db43 /fuzz/FuzzingUtils.h | |
| parent | bc983f30186f3c204b1daea57b0057f93b74dde1 (diff) | |
New upstream version 1.0.1+dfsgupstream/1.0.1+dfsgupstream
Diffstat (limited to 'fuzz/FuzzingUtils.h')
| -rw-r--r-- | fuzz/FuzzingUtils.h | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/fuzz/FuzzingUtils.h b/fuzz/FuzzingUtils.h new file mode 100644 index 0000000..74d27d3 --- /dev/null +++ b/fuzz/FuzzingUtils.h @@ -0,0 +1,44 @@ +// Copyright 2025 Mikhail Khachaiants <mkhachaiants@gmail.com> +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef URI_FUZZING_UTILS_H +# define URI_FUZZING_UTILS_H 1 + +# include "uriparser/Uri.h" +# include <fuzzer/FuzzedDataProvider.h> +# include <string> + +using UriString = std::basic_string<URI_CHAR>; + +inline UriString tryConsumeBytesAsString(FuzzedDataProvider & fdp, size_t chars) { + UriString str(chars, 0); + const size_t bytes = fdp.ConsumeData(str.data(), chars * sizeof(URI_CHAR)); + // FuzzedDataProvider may provide less data than requested if the input is + // insufficiently long. We need to adjust the string length accordingly. + str.resize(bytes / sizeof(URI_CHAR)); + return str; +} + +inline UriString consumeRandomLengthString(FuzzedDataProvider & fdp) { + const size_t max_chars = fdp.remaining_bytes() / sizeof(URI_CHAR); + const size_t chars = fdp.ConsumeIntegralInRange<size_t>(0, max_chars); + return tryConsumeBytesAsString(fdp, chars); +} + +inline UriString consumeRemainingBytesAsString(FuzzedDataProvider & fdp) { + const size_t chars = fdp.remaining_bytes() / sizeof(URI_CHAR); + return tryConsumeBytesAsString(fdp, chars); +} + +#endif /* URI_FUZZING_UTILS_H */ |
