Fix bug when saving the receipt file using a .DEC filename as template
authorSergio Durigan Junior <sergiodj@sergiodj.net>
Tue, 29 Apr 2014 00:11:19 +0000 (21:11 -0300)
committerSergio Durigan Junior <sergiodj@sergiodj.net>
Tue, 29 Apr 2014 00:11:19 +0000 (21:11 -0300)
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

index 3b9ce1e..e37a723 100644 (file)
@@ -18,6 +18,7 @@
  *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  */
 
+#define _GNU_SOURCE
 #include <string.h>
 #include <stdio.h>
 #include <stdlib.h>
@@ -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.