StringUtilsFuzzer.java
// Copyright 2023 Google LLC
//
// 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.
//
////////////////////////////////////////////////////////////////////////////////
import com.code_intelligence.jazzer.api.FuzzedDataProvider;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.Validate;
/** This fuzzer targets the methods of the StringUtils class in the base package. */
public class StringUtilsFuzzer {
public static void fuzzerTestOneInput(FuzzedDataProvider data) {
try {
Integer choice = data.consumeInt(1, 61);
String string1 = data.consumeString(data.remainingBytes());
String string2 = data.consumeRemainingAsString();
switch (choice) {
case 1:
StringUtils.abbreviate(string1, string1.length());
break;
case 2:
StringUtils.abbreviateMiddle(string1, string2, string1.length());
break;
case 3:
StringUtils.appendIfMissing(string1, string2);
break;
case 4:
StringUtils.appendIfMissingIgnoreCase(string1, string2);
break;
case 5:
StringUtils.capitalize(string1);
break;
case 6:
StringUtils.center(string1, string1.length());
break;
case 7:
StringUtils.chomp(string1);
break;
case 8:
StringUtils.chop(string1);
break;
case 9:
StringUtils.compare(string1, string2);
break;
case 10:
StringUtils.compareIgnoreCase(string1, string2);
break;
case 11:
StringUtils.contains(string1, string2);
break;
case 12:
StringUtils.containsAny(string1, string2);
break;
case 13:
StringUtils.containsAnyIgnoreCase(string1, string2);
break;
case 14:
StringUtils.containsNone(string1, string2);
break;
case 15:
StringUtils.containsOnly(string1, string2);
break;
case 16:
StringUtils.containsWhitespace(string1);
break;
case 17:
StringUtils.countMatches(string1, string2);
break;
case 18:
StringUtils.deleteWhitespace(string1);
break;
case 19:
StringUtils.difference(string1, string2);
break;
case 20:
StringUtils.endsWith(string1, string2);
break;
case 21:
StringUtils.endsWithAny(string1, string2);
break;
case 22:
StringUtils.endsWithIgnoreCase(string1, string2);
break;
case 23:
StringUtils.equals(string1, string2);
break;
case 24:
StringUtils.equalsAny(string1, string2);
break;
case 25:
StringUtils.equalsAnyIgnoreCase(string1, string2);
break;
case 26:
StringUtils.equalsIgnoreCase(string1, string2);
break;
case 27:
StringUtils.getCommonPrefix(string1, string2);
break;
case 28:
StringUtils.getDigits(string1);
break;
case 29:
StringUtils.indexOf(string1, string2);
break;
case 30:
StringUtils.indexOfAny(string1, string2);
break;
case 31:
StringUtils.indexOfAnyBut(string1, string2);
break;
case 32:
StringUtils.indexOfDifference(string1, string2);
break;
case 33:
StringUtils.indexOfIgnoreCase(string1, string2);
break;
case 34:
StringUtils.isAllBlank(string1, string2);
break;
case 35:
StringUtils.isAllEmpty(string1, string2);
break;
case 36:
StringUtils.isAllLowerCase(string1);
break;
case 37:
StringUtils.isAllUpperCase(string1);
break;
case 38:
StringUtils.isMixedCase(string1);
break;
case 39:
if (string2.length() > 0) {
StringUtils.join(string1.toCharArray(), string2.toCharArray()[0], 0, string1.length());
}
break;
case 40:
if (string2.length() > 0) {
StringUtils.joinWith(string1, string2.toCharArray());
}
break;
case 41:
StringUtils.lastIndexOf(string1, string2);
break;
case 42:
StringUtils.lastIndexOfAny(string1, string2);
break;
case 43:
StringUtils.lastIndexOfIgnoreCase(string1, string2);
break;
case 44:
StringUtils.left(string1, string1.length());
break;
case 45:
StringUtils.leftPad(string1, string1.length() + 10);
break;
case 46:
StringUtils.mid(string1, 0, string1.length());
break;
case 47:
StringUtils.normalizeSpace(string1);
break;
case 48:
StringUtils.overlay(string1, string2, 0, string1.length());
break;
case 49:
StringUtils.right(string1, string1.length());
break;
case 50:
StringUtils.rightPad(string1, string1.length() + 10);
break;
case 51:
StringUtils.rotate(string1, string1.length());
break;
case 52:
StringUtils.split(string1);
break;
case 53:
StringUtils.splitByCharacterType(string1);
break;
case 54:
StringUtils.splitByCharacterTypeCamelCase(string1);
break;
case 55:
StringUtils.splitByWholeSeparator(string1, string2);
break;
case 56:
StringUtils.splitPreserveAllTokens(string1);
break;
case 57:
StringUtils.swapCase(string1);
break;
case 58:
StringUtils.truncate(string1, string1.length());
break;
case 59:
StringUtils.uncapitalize(string1);
break;
case 60:
StringUtils.wrap(string1, string2);
break;
case 61:
// TODO verify if regex injection is real
// Validate.matchesPattern(string1, string2);
break;
}
} catch (IllegalArgumentException e) {
// Known exception
}
}
}