allocate memory dynamically in encode_record() so it always has sufficient space...
authorDaniel Kouřil <kouril@ics.muni.cz>
Wed, 21 Mar 2012 12:09:23 +0000 (12:09 +0000)
committerDaniel Kouřil <kouril@ics.muni.cz>
Wed, 21 Mar 2012 12:09:23 +0000 (12:09 +0000)
org.glite.px.proxyrenewal/src/commands.c
org.glite.px.proxyrenewal/src/renewal_locl.h

index 32d45bf..461513d 100644 (file)
@@ -598,20 +598,28 @@ end:
 int
 encode_record(glite_renewal_core_context ctx, proxy_record *record, char **line)
 {
-   char tmp_line[1024];
+   char *tmp_line = NULL;
    size_t jobids_len = 0;
-   int i;
+   int ret;
    
-   snprintf(tmp_line, sizeof(tmp_line), "suffix=%d, unique=%d, voms_exts=%d, server=%s, next_renewal=%ld, end_time=%ld",
+   ret = asprintf(&tmp_line, "suffix=%d, unique=%d, voms_exts=%d, server=%s, next_renewal=%ld, end_time=%ld",
           record->suffix, record->unique, record->voms_exts,
           (record->myproxy_server) ? record->myproxy_server : "",
           record->next_renewal, record->end_time);
+   if (ret == -1)
+       return ENOMEM;
+
    if (record->fqans) {
-       strncat(tmp_line, ", fqans=", sizeof(tmp_line));
-       strncat(tmp_line, record->fqans, sizeof(tmp_line));
-   }
-   *line = strdup(tmp_line);
+       char *l;
 
+       ret = asprintf(&l, "%s, fqans=%s", tmp_line, record->fqans);
+       if (ret == -1) {
+          free(tmp_line);
+          return ENOMEM;
+       }
+       tmp_line = l;
+   }
+   *line = tmp_line;
    return 0;
 }
 
index dc910e8..1fd483c 100644 (file)
@@ -21,6 +21,7 @@
 
 #ident "$Header$"
 
+#define _GNU_SOURCE
 #include <stdio.h>
 #include <stdlib.h>
 #include <unistd.h>