Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix: FILES_TMP_CONTENT may sometimes lack complete content #2857

Merged
merged 1 commit into from Jan 4, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Fix: FILES_TMP_CONTENT may sometimes lack complete content
  • Loading branch information
martinhsv committed Jan 4, 2023
commit 4324f0ac59f8225aa44bc5034df60dbeccd1d334
2 changes: 2 additions & 0 deletions CHANGES
@@ -1,6 +1,8 @@
DD mmm YYYY - 2.9.x (to be released)
-------------------

* Fix: FILES_TMP_CONTENT may sometimes lack complete content
[Issue #2857 - gieltje, @airween, @dune73, @martinhsv]
* Support configurable limit on number of arguments processed
[Issue #2844 - @jleproust, @martinhsv]
* Silence compiler warning about discarded const
Expand Down
26 changes: 16 additions & 10 deletions apache2/re_variables.c
Expand Up @@ -1173,6 +1173,7 @@ static int var_files_tmp_contents_generate(modsec_rec *msr, msre_var *var,
FILE *file;
size_t nread;
char *full_content = NULL;
char *full_content_tmp_ptr = NULL;
size_t total_lenght = 0;
msre_var *rvar = NULL;

Expand All @@ -1182,19 +1183,23 @@ static int var_files_tmp_contents_generate(modsec_rec *msr, msre_var *var,
continue;
}

full_content = (char *)apr_pcalloc(mptmp, (sizeof(char)*parts[i]->length) + 1);
if (full_content == NULL) {
if (msr->txcfg->debuglog_level >= 3) {
msr_log(msr, 3, "Variable FILES_TMP_CONTENT will not be created, not " \
"enough memory available.");
}
goto files_tmp_content_not_enough_mem;
}
full_content_tmp_ptr = full_content;

while ((nread = fread(buf, 1, 1023, file)) > 0)
{
total_lenght += nread;
buf[nread] = '\0';
if (full_content == NULL)
{
full_content = apr_psprintf(mptmp, "%s", buf);
}
else
{
full_content = apr_psprintf(mptmp, "%s%s", full_content, buf);
}
full_content_tmp_ptr = memcpy(full_content_tmp_ptr, buf, nread);
full_content_tmp_ptr += nread;
total_lenght += nread;
}
full_content_tmp_ptr[total_lenght] = '\0';
fclose(file);

rvar = apr_pmemdup(mptmp, var, sizeof(msre_var));
Expand All @@ -1209,6 +1214,7 @@ static int var_files_tmp_contents_generate(modsec_rec *msr, msre_var *var,
}
}

files_tmp_content_not_enough_mem:
return count;
}

Expand Down