You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by zw...@apache.org on 2019/11/07 01:10:12 UTC
[trafficserver] branch 9.0.x updated: url_sig: fix memory leak with
urlParse and pristine flag
This is an automated email from the ASF dual-hosted git repository.
zwoop pushed a commit to branch 9.0.x
in repository https://gitbox.apache.org/repos/asf/trafficserver.git
The following commit(s) were added to refs/heads/9.0.x by this push:
new e7e981a url_sig: fix memory leak with urlParse and pristine flag
e7e981a is described below
commit e7e981ab8c1cb2feae8d8f634dafb6538c965d79
Author: Brian Olsen <br...@comcast.com>
AuthorDate: Mon Sep 30 19:04:12 2019 +0000
url_sig: fix memory leak with urlParse and pristine flag
(cherry picked from commit b271b85aa64784e507c55697aabd0a2118480c9a)
---
plugins/experimental/url_sig/url_sig.c | 26 ++++++++++++++++++--------
1 file changed, 18 insertions(+), 8 deletions(-)
diff --git a/plugins/experimental/url_sig/url_sig.c b/plugins/experimental/url_sig/url_sig.c
index 6782869..249a011 100644
--- a/plugins/experimental/url_sig/url_sig.c
+++ b/plugins/experimental/url_sig/url_sig.c
@@ -165,11 +165,11 @@ TSRemapNewInstance(int argc, char *argv[], void **ih, char *errbuf, int errbuf_s
return TS_ERROR;
}
if (strncmp(line, "key", 3) == 0) {
- if (strncmp((line + 3), "0", 1) == 0) {
+ if (strncmp(line + 3, "0", 1) == 0) {
keynum = 0;
} else {
TSDebug(PLUGIN_NAME, ">>> %s <<<", line + 3);
- keynum = atoi((line + 3));
+ keynum = atoi(line + 3);
if (keynum == 0) {
keynum = -1; // Not a Number
}
@@ -349,14 +349,18 @@ fixedBufferWrite(char **dest_end, int *dest_len, const char *src, int src_len)
}
static char *
-urlParse(char *url, char *anchor, char *new_path_seg, int new_path_seg_len, char *signed_seg, unsigned int signed_seg_len)
+urlParse(char const *const url_in, char *anchor, char *new_path_seg, int new_path_seg_len, char *signed_seg,
+ unsigned int signed_seg_len)
{
char *segment[MAX_SEGMENTS];
+ char url[8192] = {'\0'};
unsigned char decoded_string[2048] = {'\0'};
char new_url[8192]; /* new_url is not null_terminated */
char *p = NULL, *sig_anchor = NULL, *saveptr = NULL;
int i = 0, numtoks = 0, decoded_len = 0, sig_anchor_seg = 0;
+ strncat(url, url_in, sizeof(url) - strlen(url) - 1);
+
char *new_url_end = new_url;
int new_url_len_left = sizeof(new_url);
@@ -373,7 +377,7 @@ urlParse(char *url, char *anchor, char *new_path_seg, int new_path_seg_len, char
TSError("insufficient space to copy schema into new_path_seg buffer.");
return NULL;
}
- TSDebug(PLUGIN_NAME, "%s:%d - new_url: %*s\n", __FILE__, __LINE__, (int)(new_url_end - new_url), new_url);
+ TSDebug(PLUGIN_NAME, "%s:%d - new_url: %.*s\n", __FILE__, __LINE__, (int)(new_url_end - new_url), new_url);
// parse the url.
if ((p = strtok_r(skip, "/", &saveptr)) != NULL) {
@@ -582,19 +586,25 @@ TSRemapDoRemap(void *ih, TSHttpTxn txnp, TSRemapRequestInfo *rri)
// check for path params.
if (query == NULL || strstr(query, "E=") == NULL) {
char *const parsed = urlParse(url, cfg->sig_anchor, new_path, 8192, path_params, 8192);
- if (NULL == parsed) {
- err_log(url, "Has no signing query string or signing path parameters.");
+ if (parsed == NULL) {
+ err_log(url, "Unable to parse/decode new url path parameters");
goto deny;
}
- url = parsed;
has_path_params = true;
- query = strstr(url, ";");
+ query = strstr(parsed, ";");
if (query == NULL) {
err_log(url, "Has no signing query string or signing path parameters.");
+ TSfree(parsed);
goto deny;
}
+
+ if (url != current_url) {
+ TSfree(url);
+ }
+
+ url = parsed;
}
/* first, parse the query string */