From: Christoph M. Becker Date: Sun, 11 Feb 2018 11:49:41 +0000 (+0100) Subject: Merge branch 'PHP-7.1' into PHP-7.2 X-Git-Tag: php-7.2.3RC1~8 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=7554fd9101a84b3dbf3e25870a15a26ab73e1d70;p=php Merge branch 'PHP-7.1' into PHP-7.2 * PHP-7.1: Fix #75857: Timezone gets truncated when formatted --- 7554fd9101a84b3dbf3e25870a15a26ab73e1d70 diff --cc ext/date/php_date.c index ca65467456,277736505d..092950a306 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@@ -1169,22 -1167,22 +1169,22 @@@ static zend_string *date_format(char *f } /* Make sure to do this on a positive int to avoid rounding errors */ retval = (retval / 864) % 1000; - length = slprintf(buffer, 32, "%03d", retval); + length = slprintf(buffer, sizeof(buffer), "%03d", retval); break; } - case 'g': length = slprintf(buffer, 32, "%d", (t->h % 12) ? (int) t->h % 12 : 12); break; - case 'G': length = slprintf(buffer, 32, "%d", (int) t->h); break; - case 'h': length = slprintf(buffer, 32, "%02d", (t->h % 12) ? (int) t->h % 12 : 12); break; - case 'H': length = slprintf(buffer, 32, "%02d", (int) t->h); break; - case 'i': length = slprintf(buffer, 32, "%02d", (int) t->i); break; - case 's': length = slprintf(buffer, 32, "%02d", (int) t->s); break; - case 'u': length = slprintf(buffer, 32, "%06d", (int) floor(t->us)); break; - case 'v': length = slprintf(buffer, 32, "%03d", (int) floor(t->us / 1000)); break; + case 'g': length = slprintf(buffer, sizeof(buffer), "%d", (t->h % 12) ? (int) t->h % 12 : 12); break; + case 'G': length = slprintf(buffer, sizeof(buffer), "%d", (int) t->h); break; + case 'h': length = slprintf(buffer, sizeof(buffer), "%02d", (t->h % 12) ? (int) t->h % 12 : 12); break; + case 'H': length = slprintf(buffer, sizeof(buffer), "%02d", (int) t->h); break; + case 'i': length = slprintf(buffer, sizeof(buffer), "%02d", (int) t->i); break; + case 's': length = slprintf(buffer, sizeof(buffer), "%02d", (int) t->s); break; - case 'u': length = slprintf(buffer, sizeof(buffer), "%06d", (int) floor(t->f * 1000000 + 0.5)); break; - case 'v': length = slprintf(buffer, sizeof(buffer), "%03d", (int) floor(t->f * 1000 + 0.5)); break; ++ case 'u': length = slprintf(buffer, sizeof(buffer), "%06d", (int) floor(t->us)); break; ++ case 'v': length = slprintf(buffer, sizeof(buffer), "%03d", (int) floor(t->us / 1000)); break; /* timezone */ - case 'I': length = slprintf(buffer, 32, "%d", localtime ? offset->is_dst : 0); break; + case 'I': length = slprintf(buffer, sizeof(buffer), "%d", localtime ? offset->is_dst : 0); break; case 'P': rfc_colon = 1; /* break intentionally missing */ - case 'O': length = slprintf(buffer, 32, "%c%02d%s%02d", + case 'O': length = slprintf(buffer, sizeof(buffer), "%c%02d%s%02d", localtime ? ((offset->offset < 0) ? '-' : '+') : '+', localtime ? abs(offset->offset / 3600) : 0, rfc_colon ? ":" : "", @@@ -4451,26 -4411,26 +4451,26 @@@ static zend_string *date_interval_forma for (i = 0; i < format_len; i++) { if (have_format_spec) { switch (format[i]) { - case 'Y': length = slprintf(buffer, 32, "%02d", (int) t->y); break; - case 'y': length = slprintf(buffer, 32, "%d", (int) t->y); break; + case 'Y': length = slprintf(buffer, sizeof(buffer), "%02d", (int) t->y); break; + case 'y': length = slprintf(buffer, sizeof(buffer), "%d", (int) t->y); break; - case 'M': length = slprintf(buffer, 32, "%02d", (int) t->m); break; - case 'm': length = slprintf(buffer, 32, "%d", (int) t->m); break; + case 'M': length = slprintf(buffer, sizeof(buffer), "%02d", (int) t->m); break; + case 'm': length = slprintf(buffer, sizeof(buffer), "%d", (int) t->m); break; - case 'D': length = slprintf(buffer, 32, "%02d", (int) t->d); break; - case 'd': length = slprintf(buffer, 32, "%d", (int) t->d); break; + case 'D': length = slprintf(buffer, sizeof(buffer), "%02d", (int) t->d); break; + case 'd': length = slprintf(buffer, sizeof(buffer), "%d", (int) t->d); break; - case 'H': length = slprintf(buffer, 32, "%02d", (int) t->h); break; - case 'h': length = slprintf(buffer, 32, "%d", (int) t->h); break; + case 'H': length = slprintf(buffer, sizeof(buffer), "%02d", (int) t->h); break; + case 'h': length = slprintf(buffer, sizeof(buffer), "%d", (int) t->h); break; - case 'I': length = slprintf(buffer, 32, "%02d", (int) t->i); break; - case 'i': length = slprintf(buffer, 32, "%d", (int) t->i); break; + case 'I': length = slprintf(buffer, sizeof(buffer), "%02d", (int) t->i); break; + case 'i': length = slprintf(buffer, sizeof(buffer), "%d", (int) t->i); break; - case 'S': length = slprintf(buffer, 32, "%02" ZEND_LONG_FMT_SPEC, (zend_long) t->s); break; - case 's': length = slprintf(buffer, 32, ZEND_LONG_FMT, (zend_long) t->s); break; + case 'S': length = slprintf(buffer, sizeof(buffer), "%02" ZEND_LONG_FMT_SPEC, (zend_long) t->s); break; + case 's': length = slprintf(buffer, sizeof(buffer), ZEND_LONG_FMT, (zend_long) t->s); break; - case 'F': length = slprintf(buffer, 32, "%06" ZEND_LONG_FMT_SPEC, (zend_long) t->us); break; - case 'f': length = slprintf(buffer, 32, ZEND_LONG_FMT, (zend_long) t->us); break; - case 'F': length = slprintf(buffer, sizeof(buffer), "%06" ZEND_LONG_FMT_SPEC, (zend_long) (t->f * 1000000)); break; - case 'f': length = slprintf(buffer, sizeof(buffer), ZEND_LONG_FMT, (zend_long) (t->f * 1000000)); break; ++ case 'F': length = slprintf(buffer, sizeof(buffer), "%06" ZEND_LONG_FMT_SPEC, (zend_long) t->us); break; ++ case 'f': length = slprintf(buffer, sizeof(buffer), ZEND_LONG_FMT, (zend_long) t->us); break; case 'a': { if ((int) t->days != -99999) {