From: Ilia Alshanetsky Date: Thu, 5 Dec 2002 22:46:54 +0000 (+0000) Subject: Fixed a memory leak inside heb_number_to_chars(). X-Git-Tag: RELEASE_1_0b3~152 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d6c29c781ed6c368f8d2b24d59b087c3459c6794;p=php Fixed a memory leak inside heb_number_to_chars(). --- diff --git a/ext/calendar/calendar.c b/ext/calendar/calendar.c index 14639b4c69..0dfe9c6248 100644 --- a/ext/calendar/calendar.c +++ b/ext/calendar/calendar.c @@ -369,17 +369,19 @@ caution: the Hebrew format produces non unique result. for example both: year '5' and year '5000' produce 'รค'. use the numeric one for calculations. */ -static char *heb_number_to_chars(int n, int fl) +static char *heb_number_to_chars(int n, int fl, char **ret) { - char *p, old[18], *ret, *endofalafim; + char *p, old[18], *endofalafim; p = endofalafim = old; /* prevents the option breaking the jewish beliefs, and some other critical resources ;) */ - if (n > 9999 || n < 1) + if (n > 9999 || n < 1) { + *ret = NULL; return NULL; + } /* alafim (thousands) case */ if (n / 1000) { @@ -450,9 +452,9 @@ static char *heb_number_to_chars(int n, int fl) } *p = '\0'; - ret = emalloc((int) (p - old) + 1); - strncpy(ret, old, (int) (p - old) + 1); - return ret; + *ret = estrndup(old, (p - old) + 1); + p = *ret; + return p; } /* }}} */ @@ -464,6 +466,7 @@ PHP_FUNCTION(jdtojewish) zend_bool heb = 0; int year, month, day; char date[10], hebdate[25]; + char *dayp, *yearp; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l|bl", &julday, &heb, &fl) == FAILURE) { RETURN_FALSE; @@ -479,7 +482,14 @@ PHP_FUNCTION(jdtojewish) RETURN_FALSE; } - sprintf(hebdate, "%s %s %s", heb_number_to_chars(day, fl), JewishMonthHebName[month], heb_number_to_chars(year, fl)); + sprintf(hebdate, "%s %s %s", heb_number_to_chars(day, fl, &dayp), JewishMonthHebName[month], heb_number_to_chars(year, fl, &yearp)); + + if (dayp) { + efree(dayp); + } + if (yearp) { + efree(yearp); + } RETURN_STRING(hebdate, 1);