package org.mvel2.tests.fuzz; import org.mvel2.MVEL; import org.mvel2.util.ParseTools; import static java.lang.Character.isJavaIdentifierStart; public class IdentifierFuzzer { public static void main(String[] args) { try { for (int i = 0; i < 1000000; i++) { MVEL.compileExpression(getIndentifierSample()); } } catch (Throwable t) { t.printStackTrace(); } System.out.println("**Done**"); } private static char[] getIndentifierSample() { int idLength = (int) (10 * Math.random()) + 2; char[] sample = new char[idLength + 5]; boolean ok = false; char candidate; while (!ok) { if (isJavaIdentifierStart(candidate = (char) (128 * Math.random()))) { sample[0] = candidate; ok = true; } } for (int i = 1; i < idLength; i++) { ok = false; while (!ok) { candidate = (char) (128 * Math.random()); if (Character.isJavaIdentifierPart(candidate)) { sample[i] = candidate; ok = true; } } } if (ParseTools.isReservedWord(new String(sample, 0, idLength).trim())) { return getIndentifierSample(); } sample[idLength] = ' '; sample[idLength + 1] = '='; sample[idLength + 2] = ' '; sample[idLength + 3] = '1'; sample[idLength + 4] = ';'; return sample; } }