mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-06-07 07:03:42 +00:00
Add missing operator to regex fuzzer
Fixes a problem where the regex fuzzer would identify '==' as a candidate operator for replacement, but where the replacement code did not actually handle the '==' case. Fixes http://crbug.com/1367902 Change-Id: I9a3bda9e7bae5e42872f17427419ab690d477533 Change-Id: If9cbb2db779c6873ff7a02d132981e8ee3410bb1 Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/104200 Commit-Queue: Ben Clayton <bclayton@google.com> Kokoro: Kokoro <noreply+kokoro@google.com> Reviewed-by: Ben Clayton <bclayton@google.com> Auto-Submit: Alastair Donaldson <afdx@google.com>
This commit is contained in:
parent
f6772c1332
commit
2af7ab3b16
@ -416,7 +416,7 @@ std::string WgslMutator::ChooseRandomReplacementForOperator(const std::string& e
|
|||||||
"=", "+=", "-=", "*=", "/=", "%=", "&=", "|=", "^=", "<<=", ">>="};
|
"=", "+=", "-=", "*=", "/=", "%=", "&=", "|=", "^=", "<<=", ">>="};
|
||||||
std::vector<std::string> expression_operators{"+", "-", "*", "/", "%", "&&", "||",
|
std::vector<std::string> expression_operators{"+", "-", "*", "/", "%", "&&", "||",
|
||||||
"&", "|", "^", "<<", ">>", "<", ">",
|
"&", "|", "^", "<<", ">>", "<", ">",
|
||||||
"<=", ">=", "!", "!=", "~"};
|
"<=", ">=", "!", "==", "!=", "~"};
|
||||||
std::vector<std::string> increment_operators{"++", "--"};
|
std::vector<std::string> increment_operators{"++", "--"};
|
||||||
for (auto operators : {assignment_operators, expression_operators, increment_operators}) {
|
for (auto operators : {assignment_operators, expression_operators, increment_operators}) {
|
||||||
auto it = std::find(operators.begin(), operators.end(), existing_operator);
|
auto it = std::find(operators.begin(), operators.end(), existing_operator);
|
||||||
@ -471,6 +471,12 @@ std::optional<std::pair<uint32_t, uint32_t>> WgslMutator::FindOperatorOccurrence
|
|||||||
switch (first_character) {
|
switch (first_character) {
|
||||||
case '!':
|
case '!':
|
||||||
case '^':
|
case '^':
|
||||||
|
case '*':
|
||||||
|
case '/':
|
||||||
|
case '%':
|
||||||
|
case '=':
|
||||||
|
// The above cases are all stand-alone operators, and if followed by '=' are also
|
||||||
|
// operators.
|
||||||
switch (second_character) {
|
switch (second_character) {
|
||||||
case '=':
|
case '=':
|
||||||
return {{current_index, 2}};
|
return {{current_index, 2}};
|
||||||
@ -481,26 +487,15 @@ std::optional<std::pair<uint32_t, uint32_t>> WgslMutator::FindOperatorOccurrence
|
|||||||
case '&':
|
case '&':
|
||||||
case '+':
|
case '+':
|
||||||
case '-':
|
case '-':
|
||||||
|
// The above cases are all stand-alone operators, and if repeated or followed by '='
|
||||||
|
// are also operators.
|
||||||
if (second_character == first_character || second_character == '=') {
|
if (second_character == first_character || second_character == '=') {
|
||||||
return {{current_index, 2}};
|
return {{current_index, 2}};
|
||||||
}
|
}
|
||||||
return {{current_index, 1}};
|
return {{current_index, 1}};
|
||||||
case '*':
|
|
||||||
case '/':
|
|
||||||
case '%':
|
|
||||||
switch (second_character) {
|
|
||||||
case '=':
|
|
||||||
return {{current_index, 2}};
|
|
||||||
default:
|
|
||||||
return {{current_index, 1}};
|
|
||||||
}
|
|
||||||
case '=':
|
|
||||||
if (second_character == '=') {
|
|
||||||
return {{current_index, 2}};
|
|
||||||
}
|
|
||||||
return {{current_index, 1}};
|
|
||||||
case '<':
|
case '<':
|
||||||
case '>':
|
case '>':
|
||||||
|
// The following caters for '<', '<=', '<<', '<<=', '>', '>=', '>>' and '>>='.
|
||||||
if (second_character == '=') {
|
if (second_character == '=') {
|
||||||
return {{current_index, 2}};
|
return {{current_index, 2}};
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user