From: Daniel KouĊ™il Date: Wed, 21 Mar 2012 12:09:23 +0000 (+0000) Subject: allocate memory dynamically in encode_record() so it always has sufficient space... X-Git-Tag: glite-jobid-api-c_R_2_1_2_1~21 X-Git-Url: http://scientific.zcu.cz/git/?a=commitdiff_plain;h=09b66002f4140d84d5def28cea5d1e3af38bd359;p=jra1mw.git allocate memory dynamically in encode_record() so it always has sufficient space (#92806) --- diff --git a/org.glite.px.proxyrenewal/src/commands.c b/org.glite.px.proxyrenewal/src/commands.c index 32d45bf..461513d 100644 --- a/org.glite.px.proxyrenewal/src/commands.c +++ b/org.glite.px.proxyrenewal/src/commands.c @@ -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; } diff --git a/org.glite.px.proxyrenewal/src/renewal_locl.h b/org.glite.px.proxyrenewal/src/renewal_locl.h index dc910e8..1fd483c 100644 --- a/org.glite.px.proxyrenewal/src/renewal_locl.h +++ b/org.glite.px.proxyrenewal/src/renewal_locl.h @@ -21,6 +21,7 @@ #ident "$Header$" +#define _GNU_SOURCE #include #include #include