You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by so...@apache.org on 2015/02/05 03:13:34 UTC
trafficserver git commit: TS-3287: Fix resource leak in config
Repository: trafficserver
Updated Branches:
refs/heads/master 2c2a5155c -> 9fbc03104
TS-3287: Fix resource leak in config
Coverity CID #1268095
Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo
Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/9fbc0310
Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/9fbc0310
Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/9fbc0310
Branch: refs/heads/master
Commit: 9fbc03104f6dbe51c4f4e910b2928e856fec258f
Parents: 2c2a515
Author: Phil Sorber <so...@apache.org>
Authored: Wed Feb 4 19:12:43 2015 -0700
Committer: Phil Sorber <so...@apache.org>
Committed: Wed Feb 4 19:12:43 2015 -0700
----------------------------------------------------------------------
plugins/experimental/url_sig/url_sig.c | 33 ++++++++++++++++-------------
1 file changed, 18 insertions(+), 15 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/9fbc0310/plugins/experimental/url_sig/url_sig.c
----------------------------------------------------------------------
diff --git a/plugins/experimental/url_sig/url_sig.c b/plugins/experimental/url_sig/url_sig.c
index bd24987..8e7af49 100644
--- a/plugins/experimental/url_sig/url_sig.c
+++ b/plugins/experimental/url_sig/url_sig.c
@@ -38,13 +38,19 @@ static const char *PLUGIN_NAME = "url_sig";
struct config
{
- char *map_from;
- char *map_to;
TSHttpStatus err_status;
char *err_url;
char keys[MAX_KEY_NUM][MAX_KEY_LEN];
};
+void
+free_cfg(struct config *cfg)
+{
+ TSError("Cleaning up...");
+ TSfree(cfg->err_url);
+ TSfree(cfg);
+}
+
TSReturnCode
TSRemapInit(TSRemapInterface * api_info, char *errbuf, int errbuf_size)
{
@@ -70,9 +76,6 @@ TSRemapNewInstance(int argc, char *argv[], void **ih, char *errbuf, int errbuf_s
char config_file[PATH_MAX];
struct config *cfg;
- cfg = TSmalloc(sizeof(struct config));
- memset(cfg, 0, sizeof(struct config));
-
if (argc != 3) {
snprintf(errbuf, errbuf_size - 1,
"[TSRemapNewKeyInstance] - Argument count wrong (%d)... Need exactly two pparam= (config file name).",
@@ -80,8 +83,6 @@ TSRemapNewInstance(int argc, char *argv[], void **ih, char *errbuf, int errbuf_s
return TS_ERROR;
}
TSDebug(PLUGIN_NAME, "Initializing remap function of %s -> %s with config from %s", argv[0], argv[1], argv[2]);
- cfg->map_from = TSstrndup(argv[0], strlen(argv[0]));
- cfg->map_to = TSstrndup(argv[0], strlen(argv[1]));
const char *install_dir = TSInstallDirGet();
snprintf(config_file, sizeof(config_file), "%s/%s/%s", install_dir, "etc/trafficserver", argv[2]);
@@ -95,6 +96,10 @@ TSRemapNewInstance(int argc, char *argv[], void **ih, char *errbuf, int errbuf_s
char line[260];
int line_no = 0;
int keynum;
+
+ cfg = TSmalloc(sizeof(struct config));
+ memset(cfg, 0, sizeof(struct config));
+
while (fgets(line, sizeof(line), file) != NULL) {
TSDebug(PLUGIN_NAME, "LINE: %s (%d)", line, (int) strlen(line));
line_no++;
@@ -116,6 +121,7 @@ TSRemapNewInstance(int argc, char *argv[], void **ih, char *errbuf, int errbuf_s
snprintf(errbuf, errbuf_size - 1, "[TSRemapNewInstance] - Maximum line (%d) exceeded on line %d.", MAX_KEY_LEN,
line_no);
fclose(file);
+ free_cfg(cfg);
return TS_ERROR;
}
if (strncmp(line, "key", 3) == 0) {
@@ -133,6 +139,7 @@ TSRemapNewInstance(int argc, char *argv[], void **ih, char *errbuf, int errbuf_s
snprintf(errbuf, errbuf_size - 1, "[TSRemapNewInstance] - Key number (%d) > MAX_KEY_NUM (%d) or NaN.", keynum,
MAX_KEY_NUM);
fclose(file);
+ free_cfg(cfg);
return TS_ERROR;
}
strcpy(&cfg->keys[keynum][0], value);
@@ -163,6 +170,7 @@ TSRemapNewInstance(int argc, char *argv[], void **ih, char *errbuf, int errbuf_s
snprintf(errbuf, errbuf_size - 1,
"[TSRemapNewInstance] - Invalid config, err_status == 302, but err_url == NULL");
fclose(file);
+ free_cfg(cfg);
return TS_ERROR;
}
break;
@@ -171,12 +179,14 @@ TSRemapNewInstance(int argc, char *argv[], void **ih, char *errbuf, int errbuf_s
snprintf(errbuf, errbuf_size - 1,
"[TSRemapNewInstance] - Invalid config, err_status == 403, but err_url != NULL");
fclose(file);
+ free_cfg(cfg);
return TS_ERROR;
}
break;
default:
snprintf(errbuf, errbuf_size - 1, "[TSRemapNewInstance] - Return code %d not supported.", cfg->err_status);
fclose(file);
+ free_cfg(cfg);
return TS_ERROR;
}
@@ -190,14 +200,7 @@ TSRemapNewInstance(int argc, char *argv[], void **ih, char *errbuf, int errbuf_s
void
TSRemapDeleteInstance(void *ih)
{
- struct config *cfg;
- cfg = (struct config *) ih;
-
- TSError("Cleaning up...");
- TSfree(cfg->map_from);
- TSfree(cfg->map_to);
- TSfree(cfg->err_url);
- TSfree(cfg);
+ free_cfg((struct config *)ih);
}
void