--- main.c.orig Wed Feb 18 02:34:18 1998 +++ main.c Mon Feb 5 19:32:38 2001 @@ -169,7 +169,7 @@ *pivot3; int result = 0, i, - first, + first = 0, last, orientation = ROT_STRAIGHT, this_orientation; @@ -195,11 +195,14 @@ } this_orientation = orientation; /* sets default orientation */ strsep(&pivot2, "-"); - first = strtol(string, &pivot3, 10); - if (first < 1 || first > 16) { - if (!quiet) fprintf(stderr, "%s: parse_pics: error: out of range %d\n", __progname, first); - return -1; + if (string != NULL) { + first = strtol(string, &pivot3, 10); + if (first < 1 || first > 16) { + if (!quiet) fprintf(stderr, "%s: parse_pics: error: out of range %d\n", __progname, first); + return -1; + } } + if (pivot2) { if (*pivot3) { if (!quiet) fprintf(stderr, "%s: parse_pics: error: extraneous characters '%s' in %d%s-%s\n", __progname, pivot3, first, pivot3, pivot2); @@ -216,8 +219,8 @@ } else { last = first; } - - if (*pivot3) { + + if (pivot3 && *pivot3) { /* * "numberorientation" */ @@ -245,7 +248,7 @@ * Main program: parse switches and take actions */ -void main(int argc, char *argv[]) +int main(int argc, char *argv[]) { int curopt, actions = 0, @@ -503,17 +506,29 @@ clock = time(NULL); if (pics_pre) { - sprintf(pics_name, "%s_%%d.%%s", pics_pre); + if (snprintf(pics_name, sizeof(pics_name), "%s_%%d.%%s", pics_pre) >= sizeof(pics_name)) { + fprintf(stderr, "%s: error: filename too long\n", __progname); + exit(1); + } } else { strftime(name_template, NAME_LEN, "%%s_%Y_%m_%d_%%d_%%%%d.%%%%s", localtime(&clock)); - sprintf(pics_name, name_template, "pic", session); + if (snprintf(pics_name, sizeof(pics_name), name_template, "pic", session) >= sizeof(pics_name)) { + fprintf(stderr, "%s: error: filename too long\n", __progname); + exit(1); + } } if (thumbs_pre) { - sprintf(thumbs_name, "%s_%%d", thumbs_pre); + if (snprintf(thumbs_name, sizeof(thumbs_name), "%s_%%d", thumbs_pre) >= sizeof(thumbs_name)) { + fprintf(stderr, "%s: error: filename too long\n", __progname); + exit(1); + } } else { strftime(name_template, NAME_LEN, "%%s_%Y_%m_%d_%%d_%%%%d", localtime(&clock)); - sprintf(thumbs_name, name_template, "thumb", session); + if (snprintf(thumbs_name, sizeof(thumbs_name), name_template, "thumb", session) >= sizeof(thumbs_name)) { + fprintf(stderr, "%s: error: filename too long\n", __progname); + exit(1); + } } if (actions == 0) {