Bug #80376 [Csd]: last day of the month causes runway cpu usage

From: Date: Mon, 21 Dec 2020 10:33:51 +0000
Subject: Bug #80376 [Csd]: last day of the month causes runway cpu usage
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-231206@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=80376&edit=1 ID: 80376 Updated by: derick@php.net Reported by: mav2287 at aol dot com Summary: last day of the month causes runway cpu usage Status: Closed Type: Bug Package: Date/time related Operating System: OS X 10.11.6 El Capitan PHP Version: 7.4.12 -Assigned To: +Assigned To: derick Block user comment: N Private report: N New Comment: The fix for this bug has been committed. If you are still experiencing this bug, try to check out latest source from https://github.com/php/php-src and re-test. Thank you for the report, and for helping us make PHP better. I've regenerated the parsers for ext/date. Previous Comments: ------------------------------------------------------------------------ [2020-12-21 10:32:31] derick@php.net Automatic comment on behalf of github@derickrethans.nl Revision: http://git.php.net/?p=php-src.git;a=commit;h=288332077fa22b78afda1951a357444a901a9da9 Log: Fixed bug #80376 (last day of the month causes runway cpu usage) ------------------------------------------------------------------------ [2020-12-21 10:32:30] derick@php.net Automatic comment on behalf of github@derickrethans.nl Revision: http://git.php.net/?p=php-src.git;a=commit;h=b043759cb42b33e02359ca1c30d8d5b68d8a015e Log: Fixed bug #80376 (last day of the month causes runway cpu usage) ------------------------------------------------------------------------ [2020-12-19 15:41:39] php-bugs-2020 at ryandesign dot com After installing and testing several versions of Apple Clang, I've found that the broken versions are Apple LLVM version 7.3.0 (clang-703.0.29) (which came with Xcode 7.3) through Apple LLVM version 8.0.0 (clang-800.0.42.1) (which came with Xcode 8.1/8.2/8.2.1) inclusive. Apple LLVM version 7.0.2 (clang-700.1.81) (which came with Xcode 7.2.1) and earlier work fine, and Apple LLVM version 8.1.0 (clang-802.0.38) (which came with Xcode 8.3) and later work fine. There are several other parsers in php that were generated by re2c 0.16 or later. I wonder if any of those functions might also be affected by hangs when compiled by an affected compiler. ./Zend/zend_ini_scanner.c:/* Generated by re2c 1.0.1 */ ./Zend/zend_ini_scanner_defs.h:/* Generated by re2c 1.0.1 */ ./Zend/zend_language_scanner.c:/* Generated by re2c 1.0.1 */ ./Zend/zend_language_scanner_defs.h:/* Generated by re2c 1.0.1 */ ./ext/date/lib/parse_date.c:/* Generated by re2c 2.0.3 on Mon Aug 31 12:21:15 2020 */ ./ext/date/lib/parse_iso_intervals.c:/* Generated by re2c 2.0.3 on Mon Aug 31 12:21:19 2020 */ ./ext/json/json_scanner.c:/* Generated by re2c 1.0.1 */ ./ext/json/php_json_scanner_defs.h:/* Generated by re2c 1.0.1 */ ./ext/standard/url_scanner_ex.c:/* Generated by re2c 1.0.1 */ ./ext/standard/var_unserializer.c:/* Generated by re2c 1.0.1 */ ./sapi/phpdbg/phpdbg_lexer.c:/* Generated by re2c 1.0.1 */ ------------------------------------------------------------------------ [2020-12-19 14:39:33] php-bugs-2020 at ryandesign dot com This problem has bitten PHP before. See this re2c bug report from 2016 after 0.16 was released and PHP regenerated timelib with it: https://github.com/skvadrik/re2c/issues/154 There, the developer of re2c says it is a bug in clang which evidently was fixed at some point. That report was with Apple LLVM version 7.3.0 (clang-703.0.29), this issue now is with Apple LLVM version 8.0.0 (clang-800.0.42.1), and we do not see the problem with Apple LLVM version 9.0.0 (clang-900.0.39.2). PHP previously fixed it by regenerating with re2c 0.13.5: https://github.com/php/php-src/commit/90c26fb6b102d68a90a519eacec095265d6ba100 and then a few days later regenerating with 0.15.3: https://github.com/php/php-src/commit/da3995852edf1a5b7b4c8bda7a1e804cb263dc5e ------------------------------------------------------------------------ [2020-12-19 13:52:32] php-bugs-2020 at ryandesign dot com The problem is not due to a change in timelib; it's due to the version of re2c that was used to generate timelib's parse_date.c and parse_iso_intervals.c when it was added to php. When timelib 2018.03 was added to php, re2c 0.15.3 was used. When 2018.04 was added to php, re2c 2.0.3 was used. If I regenerate with re2c 0.15.3, then I get a working php, even with timelib 2018.04. If I regenerate with re2c 0.16 or later, then I get a non-working php. So the simplest fix for now which I recommend the php developers use is to regenerate with re2c 0.15.3. It would require more investigation to determine whether this is a bug in re2c 0.16 or later or a bug in how timelib is using re2c. The changelog entry for re2c 0.16 suggests that there have been dramatic changes to how the c files are generated and that the correctness of the changes could not be verified manually, so it seems possible that the automatic verification they used wasn't fully correct or did not cover all cases. http://re2c.org/releases/release_notes.html#release-0-16 ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at https://bugs.php.net/bug.php?id=80376 -- Edit this bug report at https://bugs.php.net/bug.php?id=80376&edit=1

« previous php.bugs (#231206) next »