From d5b34437e83639b89c85ad2a509e8cfd5adde78a Mon Sep 17 00:00:00 2001 From: Sergio Durigan Junior Date: Mon, 28 Apr 2014 21:11:19 -0300 Subject: [PATCH] Fix bug when saving the receipt file using a .DEC filename as template This commit fixes a bug that happens when the user provides a .DEC filename to be transmitted, and rnetclient uses this filename to compose the receipt (.REC) filename to be saved. I forgot to use "basename" to extract only the .DEC filename (and strip all the other paths) before using it to build the .REC full path. As an addition, this commit also fixes a small memory leak. Tested by sending a declaration again. --- rnetclient.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/rnetclient.c b/rnetclient.c index 3b9ce1e..e37a723 100644 --- a/rnetclient.c +++ b/rnetclient.c @@ -18,6 +18,7 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ +#define _GNU_SOURCE #include #include #include @@ -378,9 +379,9 @@ static void save_rec_file(char *cpf, char *buffer, int len, const struct rnetcli the receipt with the name "$CPF.REC". */ tmp = strstr(args->input_file, ".DEC"); if (tmp != NULL && tmp[sizeof(".DEC") - 1] == '\0') { - const char *p; + char *p; /* We found the ".REC" extension. */ - p = strdup(args->input_file); + p = strdup(basename(args->input_file)); /* Replacing the ".DEC" by ".REC". Fortunately, we just have to change one letter. */ tmp = strstr(p, ".DEC"); @@ -388,6 +389,7 @@ static void save_rec_file(char *cpf, char *buffer, int len, const struct rnetcli fname_len = strlen(p) + strlen(path) + 2; fname = alloca(fname_len); snprintf(fname, fname_len, "%s/%s", path, p); + free(p); } else { /* The declaration filename does not follow the convention, so we will not use it as a template. -- 2.20.1