aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrei Lebedev <lebdron@gmail.com>2020-11-02 00:09:36 +0100
committerVitaly Buka <vitalybuka@gmail.com>2020-11-05 17:58:57 -0800
commit51308795413a0535843e599edc7ab418e7e25d7e (patch)
tree80850275b37440efd9a322b6f85a010e0faab257
parent8372739ac3643bb0562dfa55ae307185449e80b8 (diff)
downloadlibprotobuf-mutator-51308795413a0535843e599edc7ab418e7e25d7e.tar.gz
Refactor unary minus for unsigned type in MutateString
Signed-off-by: Andrei Lebedev <lebdron@gmail.com>
-rw-r--r--src/libfuzzer/libfuzzer_mutator.cc8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/libfuzzer/libfuzzer_mutator.cc b/src/libfuzzer/libfuzzer_mutator.cc
index c8bca64..dfb86ef 100644
--- a/src/libfuzzer/libfuzzer_mutator.cc
+++ b/src/libfuzzer/libfuzzer_mutator.cc
@@ -89,8 +89,12 @@ std::string Mutator::MutateString(const std::string& value,
// any 8 bit types.
if (!std::uniform_int_distribution<uint16_t>(0, 20)(*random())) return {};
std::string result = value;
- result.resize(value.size() +
- std::max<int>(-value.size(), size_increase_hint));
+ std::string::size_type new_size = 0;
+ if (size_increase_hint >= 0 || static_cast<std::string::size_type>(
+ -size_increase_hint) <= value.size()) {
+ new_size = value.size() + size_increase_hint;
+ }
+ result.resize(new_size);
if (result.empty()) result.push_back(0);
result.resize(LLVMFuzzerMutate(reinterpret_cast<uint8_t*>(&result[0]),
value.size(), result.size()));