diff --git a/src/mod_fastcgi.c b/src/mod_fastcgi.c --- a/src/mod_fastcgi.c +++ b/src/mod_fastcgi.c @@ -693,6 +693,7 @@ static int env_add(char_array *env, const char *key, size_t key_len, const char *val, size_t val_len) { char *dst; + size_t i; if (!key || !val) return -1; @@ -701,6 +702,14 @@ dst[key_len] = '='; /* add the \0 from the value */ memcpy(dst + key_len + 1, val, val_len + 1); + + for (i = 0; i < env->used; i++) + if (strlen(env->ptr[i]) >= key_len + 1 && + memcmp(dst, env->ptr[i], key_len + 1) == 0) { + free(env->ptr[i]); + env->ptr[i] = dst; + return 0; + } if (env->size == 0) { env->size = 16; diff --git a/src/mod_scgi.c b/src/mod_scgi.c --- a/src/mod_scgi.c +++ b/src/mod_scgi.c @@ -583,6 +583,7 @@ static int env_add(char_array *env, const char *key, size_t key_len, const char *val, size_t val_len) { char *dst; + size_t i; if (!key || !val) return -1; @@ -591,6 +592,14 @@ dst[key_len] = '='; /* add the \0 from the value */ memcpy(dst + key_len + 1, val, val_len + 1); + + for (i = 0; i < env->used; i++) + if (strlen(env->ptr[i]) >= key_len + 1 && + memcmp(dst, env->ptr[i], key_len + 1) == 0) { + free(env->ptr[i]); + env->ptr[i] = dst; + return 0; + } if (env->size == 0) { env->size = 16;