aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrea Fioraldi <andreafioraldi@gmail.com>2021-02-19 20:40:38 +0100
committerAndrea Fioraldi <andreafioraldi@gmail.com>2021-02-19 20:40:38 +0100
commit62767a42dc2101a67eeb723ca94f5bf853525d60 (patch)
tree61630c5dd38021bbd406ca3d868a2115b8f50f25
parent89cf94f0e6afd4d360f7f139f16a6730a07b478d (diff)
downloadafl++-62767a42dc2101a67eeb723ca94f5bf853525d60.tar.gz
improved env suggestions
-rw-r--r--src/afl-common.c25
1 files changed, 20 insertions, 5 deletions
diff --git a/src/afl-common.c b/src/afl-common.c
index 0b38b222..531753c2 100644
--- a/src/afl-common.c
+++ b/src/afl-common.c
@@ -551,6 +551,8 @@ static int string_distance_levenshtein(char *s1, char *s2) {
#undef HELPER_MIN3
+#define ENV_SIMILARITY_TRESHOLD 3
+
void print_suggested_envs(char *mispelled_env) {
size_t env_name_len =
@@ -559,20 +561,28 @@ void print_suggested_envs(char *mispelled_env) {
memcpy(env_name, mispelled_env + 4, env_name_len);
char *seen = ck_alloc(sizeof(afl_environment_variables) / sizeof(char *));
+ int found = 0;
int j;
for (j = 0; afl_environment_variables[j] != NULL; ++j) {
char *afl_env = afl_environment_variables[j] + 4;
-
int distance = string_distance_levenshtein(afl_env, env_name);
- if (distance <= 3 && seen[j] == 0) {
+ if (distance < ENV_SIMILARITY_TRESHOLD && seen[j] == 0) {
SAYF("Did you mean %s?\n", afl_environment_variables[j]);
seen[j] = 1;
+ found = 1;
}
+
+ }
+
+ if (found) goto cleanup;
+
+ for (j = 0; afl_environment_variables[j] != NULL; ++j) {
+ char *afl_env = afl_environment_variables[j] + 4;
size_t afl_env_len = strlen(afl_env);
char * reduced = ck_alloc(afl_env_len + 1);
@@ -586,10 +596,11 @@ void print_suggested_envs(char *mispelled_env) {
reduced[afl_env_len - end + start] = 0;
int distance = string_distance_levenshtein(reduced, env_name);
- if (distance <= 3 && seen[j] == 0) {
+ if (distance < ENV_SIMILARITY_TRESHOLD && seen[j] == 0) {
SAYF("Did you mean %s?\n", afl_environment_variables[j]);
seen[j] = 1;
+ found = 1;
}
@@ -599,6 +610,8 @@ void print_suggested_envs(char *mispelled_env) {
}
+ if (found) goto cleanup;
+
char * reduced = ck_alloc(env_name_len + 1);
size_t start = 0;
while (start < env_name_len) {
@@ -613,7 +626,7 @@ void print_suggested_envs(char *mispelled_env) {
int distance = string_distance_levenshtein(
afl_environment_variables[j] + 4, reduced);
- if (distance <= 3 && seen[j] == 0) {
+ if (distance < ENV_SIMILARITY_TRESHOLD && seen[j] == 0) {
SAYF("Did you mean %s?\n", afl_environment_variables[j]);
seen[j] = 1;
@@ -626,8 +639,10 @@ void print_suggested_envs(char *mispelled_env) {
};
- ck_free(env_name);
ck_free(reduced);
+
+cleanup:
+ ck_free(env_name);
ck_free(seen);
}