From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from krisdoz.my.domain (schwarze@localhost [127.0.0.1]) by krisdoz.my.domain (8.14.3/8.14.3) with ESMTP id p2F33tuJ007000 for ; Mon, 14 Mar 2011 23:03:55 -0400 (EDT) Received: (from schwarze@localhost) by krisdoz.my.domain (8.14.3/8.14.3/Submit) id p2F33sT0009469; Mon, 14 Mar 2011 23:03:54 -0400 (EDT) Date: Mon, 14 Mar 2011 23:03:54 -0400 (EDT) Message-Id: <201103150303.p2F33sT0009469@krisdoz.my.domain> X-Mailinglist: mdocml-source Reply-To: source@mdocml.bsd.lv MIME-Version: 1.0 From: schwarze@mdocml.bsd.lv To: source@mdocml.bsd.lv Subject: mdocml: my $buf = "string"; return $string; is cool in Perl, but not in X-Mailer: activitymail 1.26, http://search.cpan.org/dist/activitymail/ Content-Type: text/plain; charset=utf-8 Log Message: ----------- my $buf = "string"; return $string; is cool in Perl, but not in C; found by Ulrich Spoerlein using the clang static analyzer; "ok, but please document the numbers" kristaps@ Modified Files: -------------- mdocml: mandoc.c Revision Data ------------- Index: mandoc.c =================================================================== RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/mandoc.c,v retrieving revision 1.37 retrieving revision 1.38 diff -Lmandoc.c -Lmandoc.c -u -p -r1.37 -r1.38 --- mandoc.c +++ mandoc.c @@ -386,29 +386,35 @@ static char * time2a(time_t t) { struct tm tm; - char buf[DATESIZE]; - char *p; - size_t nsz, rsz; + char *buf, *p; + size_t ssz; int isz; localtime_r(&t, &tm); - p = buf; - rsz = DATESIZE; - - if (0 == (nsz = strftime(p, rsz, "%B ", &tm))) - return(NULL); - - p += (int)nsz; - rsz -= nsz; - - if (-1 == (isz = snprintf(p, rsz, "%d, ", tm.tm_mday))) - return(NULL); + /* + * Reserve space: + * up to 9 characters for the month (September) + blank + * up to 2 characters for the day + comma + blank + * 4 characters for the year and a terminating '\0' + */ + p = buf = mandoc_malloc(10 + 4 + 4 + 1); + + if (0 == (ssz = strftime(p, 10 + 1, "%B ", &tm))) + goto fail; + p += (int)ssz; + if (-1 == (isz = snprintf(p, 4 + 1, "%d, ", tm.tm_mday))) + goto fail; p += isz; - rsz -= isz; - return(strftime(p, rsz, "%Y", &tm) ? buf : NULL); + if (0 == strftime(p, 4 + 1, "%Y", &tm)) + goto fail; + return(buf); + +fail: + free(buf); + return(NULL); } @@ -430,7 +436,7 @@ mandoc_normdate(char *in, mandocmsg msg, t = 0; } out = t ? time2a(t) : NULL; - return(mandoc_strdup(out ? out : in)); + return(out ? out : mandoc_strdup(in)); } -- To unsubscribe send an email to source+unsubscribe@mdocml.bsd.lv