On Mon, 5 May 2014, Jean-Philippe Ouellet wrote: > On Mon, May 05, 2014 at 11:12:00AM +1000, Joel Sing wrote: > > > - i = 0; > > > if (arg->count == 0) { > > > arg->count = 20; > > > - arg->data = (char **)malloc(sizeof(char *) * arg->count); > > > + arg->data = calloc(arg->count, sizeof(char *)); > > > } > > > - for (i = 0; i < arg->count; i++) > > > - arg->data[i] = NULL; > > > > This one is a change in behaviour - if arg->count is > 0 then previously > > we zeroed arg->data; now we do not. > > This one is calloc, not reallocarray, so unless I'm seriously missing > something obvious here, it is indeed zero'd, no?
Run the following before and after your change: #include <stdio.h> #include <strings.h> #include <openssl/bio.h> #include <openssl/conf.h> #include "apps.h" BIO *bio_err; CONF *config; int main(int argc, char **argv) { char buf[128] = "-one -two -three -four -five"; ARGS args; int i; memset(&args, 0, sizeof(args)); chopup_args(&args, buf, &argc, &argv); for (i = 0; i < args.count; i++) printf("%i = %p\n", i, args.data[i]); strlcpy(buf, "-one -two", sizeof(buf)); chopup_args(&args, buf, &argc, &argv); for (i = 0; i < args.count; i++) printf("%i = %p\n", i, args.data[i]); } $ gcc -o chopup chopup.c /usr/src/lib/libssl/src/apps/apps.c -I /usr/src/lib/libssl/src/apps -lcrypto -- "Action without study is fatal. Study without action is futile." -- Mary Ritter Beard