php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #80278 RE (?:[\d\D])* and (?:[\s\S])* not working in UTF-8 mode (u)
Submitted: 2020-10-23 16:19 UTC Modified: 2020-10-27 15:01 UTC
Votes:1
Avg. Score:5.0 ± 0.0
Reproduced:1 of 1 (100.0%)
Same Version:1 (100.0%)
Same OS:1 (100.0%)
From: vicreal at yandex dot ru Assigned: sjon (profile)
Status: Not a bug Package: PCRE related
PHP Version: 7.4.11 OS: Debian 10 x64 (4.19.132-1)
Private report: No CVE-ID: None
View Developer Edit
Welcome! If you don't have a Git account, you can't do anything here.
If you reported this bug, you can edit this bug over here.
(description)
Block user comment
Status: Assign to:
Package:
Bug Type:
Summary:
From: vicreal at yandex dot ru
New email:
PHP Version: OS:

 

 [2020-10-23 16:19 UTC] vicreal at yandex dot ru
Description:
------------
Regular expressions "|(?:[\d\D])*|u" and "|(?:[\s\S])*|u" not working in UTF-8 mode: returns empty occurrence.

Test script:
---------------
$str = base64_decode('ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYigpe31mdW5jdGlvbiBjKGwpe3ZhciBtPXR5cGVvZiBsO3JldHVybiJvYmplY3QiPT09bSYmbnVsbCE9PWx8fCJmdW5jdGlvbiI9PT1tfWZ1bmN0aW9uIGQobCl7aWYoIXNhKGwsZikpe3ZhciBtPW5ldyBiO2JhKGwsZix7dmFsdWU6bX0pfX1mdW5jdGlvbiBlKGwpe3ZhciBtPU9iamVjdFtsXTttJiYoT2JqZWN0W2xdPWZ1bmN0aW9uKHIpe2lmKHIgaW5zdGFuY2VvZiBiKXJldHVybiByO2Qocik7cmV0dXJuIG0ocil9KX1pZihmdW5jdGlvbigpe2lmKCFhfHwhT2JqZWN0LnNlYWwpcmV0dXJuITE7dHJ5e3ZhciBsPU9iamVjdC5zZWFsKHt9KSxtPU9iamVjdC5zZWFsKHt9KSxyPW5ldyBhKFtbbCwyXSxbbSwzXV0pO2lmKDIhPXIuZ2V0KGwpfHwzIT1yLmdldChtKSlyZXR1cm4hMTtyLmRlbGV0ZShsKTtyLnNldChtLDQpO3JldHVybiFyLmhhcyhsKSYmND09ci5nZXQobSl9Y2F0Y2godCl7cmV0dXJuITF9fSgpKXJldHVybiBhOw0KdmFyIGY9IiRqc2NvbXBfaGlkZGVuXyIrTWF0aC5yYW5kb20oKTtlKCJmcmVlemUiKTtlKCJwcmV2ZW50RXh0ZW5zaW9ucyIpO2UoInNlYWwiKTt2YXIgZz0wLGs9ZnVuY3Rpb24obCl7dGhpcy5mYT0oZys9TWF0aC5yYW5kb20oKSsxKS50b1N0cmluZygpO2lmKGwpe2w9Xy5qYShsKTtmb3IodmFyIG07IShtPWwubmV4dCgpKS5kb25lOyltPW0udmFsdWUsdGhpcy5zZXQobVswXSxtWzFdKX19O2sucHJvdG90eXBlLnNldD1mdW5jdGlvbihsLG0pe2lmKCFjKGwpKXRocm93IEVycm9yKCIiKTtkKGwpO2lmKCFzYShsLGYpKXRocm93IEVycm9yKCI0YCIrbCk7bFtmXVt0aGlzLmZhXT1tO3JldHVybiB0aGlzfTtrLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24obCl7cmV0dXJuIGMobCkmJnNhKGwsZik/bFtmXVt0aGlzLmZhXTp2b2lkIDB9O2sucHJvdG90eXBlLmhhcz1mdW5jdGlvbihsKXtyZXR1cm4gYyhsKSYmc2EobCxmKSYmc2EobFtmXSx0aGlzLmZhKX07ay5wcm90b3R5cGUuZGVsZXRlPQ0KZnVuY3Rpb24obCl7cmV0dXJuIGMobCkmJnNhKGwsZikmJnNhKGxbZl0sdGhpcy5mYSk/ZGVsZXRlIGxbZl1bdGhpcy5mYV06ITF9O3JldHVybiBrfSk7ZmEoIiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXzVlOWY1NTg2MGIwYTc0NjY2MzQ0NDUiLEFycmF5LGZyb20pICIsZnVuY3Rpb24oYSl7cmV0dXJuIGE/YTpmdW5jdGlvbihiLGMsZCl7Yz1udWxsIT1jP2M6ZnVuY3Rpb24oayl7cmV0dXJuIGt9O3ZhciBlPVtdLGY9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvciYmYltTeW1ib2wuaXRlcmF0b3JdO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBmKXtiPWYuY2FsbChiKTtmb3IodmFyIGc9MDshKGY9Yi5uZXh0KCkpLmRvbmU7KWUucHVzaChjLmNhbGwoZCxmLnZhbHVlLGcrKykpfWVsc2UgZm9yKGY9Yi5sZW5ndGgsZz0wO2c8ZjtnKyspZS5wdXNoKGMuY2FsbChkLGJbZ10sZykpO3JldHVybiBlfX0pOw0KZmEoIk1hcCIsZnVuY3Rpb24oYSl7aWYoZnVuY3Rpb24oKXtpZighYXx8ImZ1bmN0aW9uIiE9dHlwZW9mIGF8fCFhLnByb3RvdHlwZS5lbnRyaWVzfHwiZnVuY3Rpb24iIT10eXBlb2YgT2JqZWN0LnNlYWwpcmV0dXJuITE7dHJ5e3ZhciBrPU9iamVjdC5zZWFsKHt4OjR9KSxsPW5ldyBhKF8uamEoW1trLCJzIl1dKSk7aWYoInMiIT1sLmdldChrKXx8MSE9bC5zaXplfHxsLmdldCh7eDo0fSl8fGwuc2V0KHt4OjR9LCIiKSE9bHx8MiE9bC5zaXplKXJldHVybiExO3ZhciBtPWwuZW50cmllcygpLHI9bS5uZXh0KCk7aWYoci5kb25lfHxyLnZhbHVlWzBdIT1rfHwicyIhPXIudmFsdWVbMV0pcmV0dXJuITE7cj1tLm5leHQoKTtyZXR1cm4gci5kb25lfHw0IT1yLnZhbHVlWzBdLnh8fCIiIT1yLnZhbHVlWzFdfHwhbS5uZXh0KCkuZG9uZT8hMTohMH1jYXRjaCh0KXtyZXR1cm4hMX19KCkpcmV0dXJuIGE7aWEoKTt2YXIgYj1uZXcgV2Vha01hcCxjPWZ1bmN0aW9uKGspe3RoaXMudz17fTsNCnRoaXMubz1mKCk7dGhpcy5zaXplPTA7aWYoayl7az1fLmphKGspO2Zvcih2YXIgbDshKGw9ay5uZXh0KCkpLmRvbmU7KWw9bC52YWx1ZSx0aGlzLnNldChsWzBdLGxbMV0pfX07Yy5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGssbCl7az0wPT09az8wOms7dmFyIG09ZCh0aGlzLGspO20ubGlzdHx8KG0ubGlzdD10aGlzLndbbS5pZF09W10pO20uUWE/bS5RYS52YWx1ZT1sOihtLlFhPXtuZXh0OnRoaXMubyxDYjp0aGlzLm8uQ2IsaGVhZDp0aGlzLm8sa2V5OmssdmFsdWU6bH0sbS5saXN0LnB1c2gobS5RYSksdGhpcy5vLkNiLm5leHQ9bS5RYSx0aGlzLm8uQ2I9bS5RYSx0aGlzLnNpemUrKyk7cmV0dXJuIHRoaXN9O2MucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihrKXtrPWQodGhpcyxrKTtyZXR1cm4gay5RYSYmay5saXN0PyhrLmxpc3Quc3BsaWNlKGsuaW5kZXgsMSksay5saXN0Lmxlbmd0aHx8ZGVsZXRlIHRoaXMud1trLmlkXSxrLlFhLkNiLm5leHQ9ay5RYS5uZXh0LGsuUWEubmV4dC5DYj0NCmsuUWEuQ2Isay5RYS5oZWFkPW51bGwsdGhpcy5zaXplLS0sITApOiExfTtjLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMudz17fTt0aGlzLm89dGhpcy5vLkNiPWYoKTt0aGlzLnNpemU9MH07Yy5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGspe3JldHVybiEhZCh0aGlzLGspLlFhfTtjLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oayl7cmV0dXJuKGs9ZCh0aGlzLGspLlFhKSYmay52YWx1ZX07Yy5wcm90b3R5cGUuZW50cmllcz1mdW5jdGlvbigpe3JldHVybiBlKHRoaXMsZnVuY3Rpb24oayl7cmV0dXJuW2sua2V5LGsudmFsdWVdfSl9O2MucHJvdG90eXBlLmtleXM9ZnVuY3Rpb24oKXtyZXR1cm4gZSh0aGlzLGZ1bmN0aW9uKGspe3JldHVybiBrLmtleX0pfTtjLnByb3RvdHlwZS52YWx1ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gZSh0aGlzLGZ1bmN0aW9uKGspe3JldHVybiBrLnZhbHVlfSl9O2MucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24oayxsKXtmb3IodmFyIG09dGhpcy5lbnRyaWVzKCksDQpyOyEocj1tLm5leHQoKSkuZG9uZTspcj1yLnZhbHVlLGsuY2FsbChsLHJbMV0sclswXSx0aGlzKX07Yy5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXT1jLnByb3RvdHlwZS5lbnRyaWVzO3ZhciBkPWZ1bmN0aW9uKGssbCl7dmFyIG09bCYmdHlwZW9mIGw7Im9iamVjdCI9PW18fCJmdW5jdGlvbiI9PW0/Yi5oYXMobCk/bT1iLmdldChsKToobT0iIisgKytnLGIuc2V0KGwsbSkpOm09InBfIitsO3ZhciByPWsud1ttXTtpZihyJiZzYShrLncsbSkpZm9yKGs9MDtrPHIubGVuZ3RoO2srKyl7dmFyIHQ9cltrXTtpZihsIT09bCYmdC5rZXkhPT10LmtleXx8bD09PXQua2V5KXJldHVybntpZDptLGxpc3Q6cixpbmRleDprLFFhOnR9fXJldHVybntpZDptLGxpc3Q6cixpbmRleDotMSxRYTp2b2lkIDB9fSxlPWZ1bmN0aW9uKGssbCl7dmFyIG09ay5vO3JldHVybiBoYShmdW5jdGlvbigpe2lmKG0pe2Zvcig7bS5oZWFkIT1rLm87KW09bS5DYjtmb3IoO20ubmV4dCE9bS5oZWFkOylyZXR1cm4gbT0NCm0ubmV4dCx7ZG9uZTohMSx2YWx1ZTpsKG0pfTttPW51bGx9cmV0dXJue2RvbmU6ITAsdmFsdWU6dm9pZCAwfX0pfSxmPWZ1bmN0aW9uKCl7dmFyIGs9e307cmV0dXJuIGsuQ2I9ay5uZXh0PWsuaGVhZD1rfSxnPTA7cmV0dXJuIGN9KTsNCmZhKCJTZXQiLGZ1bmN0aW9uKGEpe2lmKGZ1bmN0aW9uKCl7aWYoIWF8fCJmdW5jdGlvbiIhPXR5cGVvZiBhfHwhYS5wcm90b3R5cGUuZW50cmllc3x8ImZ1bmN0aW9uIiE9dHlwZW9mIE9iamVjdC5zZWFsKXJldHVybiExO3RyeXt2YXIgYz1PYmplY3Quc2VhbCh7eDo0fSksZD1uZXcgYShfLmphKFtjXSkpO2lmKCFkLmhhcyhjKXx8MSE9ZC5zaXplfHxkLmFkZChjKSE9ZHx8MSE9ZC5zaXplfHxkLmFkZCh7eDo0fSkhPWR8fDIhPWQuc2l6ZSlyZXR1cm4hMTt2YXIgZT1kLmVudHJpZXMoKSxmPWUubmV4dCgpO2lmKGYuZG9uZXx8Zi52YWx1ZVswXSE9Y3x8Zi52YWx1ZVsxXSE9YylyZXR1cm4hMTtmPWUubmV4dCgpO3JldHVybiBmLmRvbmV8fGYudmFsdWVbMF09PWN8fDQhPWYudmFsdWVbMF0ueHx8Zi52YWx1ZVsxXSE9Zi52YWx1ZVswXT8hMTplLm5leHQoKS5kb25lfWNhdGNoKGcpe3JldHVybiExfX0oKSlyZXR1cm4gYTtpYSgpO3ZhciBiPWZ1bmN0aW9uKGMpe3RoaXMubz1uZXcgTWFwOw0KaWYoYyl7Yz1fLmphKGMpO2Zvcih2YXIgZDshKGQ9Yy5uZXh0KCkpLmRvbmU7KXRoaXMuYWRkKGQudmFsdWUpfXRoaXMuc2l6ZT10aGlzLm8uc2l6ZX07Yi5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGMpe2M9MD09PWM/MDpjO3RoaXMuby5zZXQoYyxjKTt0aGlzLnNpemU9dGhpcy5vLnNpemU7cmV0dXJuIHRoaXN9O2IucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihjKXtjPXRoaXMuby5kZWxldGUoYyk7dGhpcy5zaXplPXRoaXMuby5zaXplO3JldHVybiBjfTtiLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuby5jbGVhcigpO3RoaXMuc2l6ZT0wfTtiLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMuby5oYXMoYyl9O2IucHJvdG90eXBlLmVudHJpZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vLmVudHJpZXMoKX07Yi5wcm90b3R5cGUudmFsdWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuby52YWx1ZXMoKX07Yi5wcm90b3R5cGUua2V5cz1iLnByb3RvdHlwZS52YWx1ZXM7DQpiLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdPWIucHJvdG90eXBlLnZhbHVlcztiLnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKGMsZCl7dmFyIGU9dGhpczt0aGlzLm8uZm9yRWFjaChmdW5jdGlvbihmKXtyZXR1cm4gYy5jYWxsKGQsZixmLGUpfSl9O3JldHVybiBifSk7ZmEoIiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXzVlOWY1NTg2MGIwYTc0NjY2MzQ0NDUiLE9iamVjdCxlbnRyaWVzKSAiLGZ1bmN0aW9uKGEpe3JldHVybiBhP2E6ZnVuY3Rpb24oYil7dmFyIGM9W10sZDtmb3IoZCBpbiBiKXNhKGIsZCkmJmMucHVzaChbZCxiW2RdXSk7cmV0dXJuIGN9fSk7ZmEoIiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXzVlOWY1NTg2MGIwYTc0NjY2MzQ0NDUiLE9iamVjdCxpcykgIixmdW5jdGlvbihhKXtyZXR1cm4gYT9hOmZ1bmN0aW9uKGIsYyl7cmV0dXJuIGI9PT1jPzAhPT1ifHwxL2I9PT0xL2M6YiE9PWImJmMhPT1jfX0pOw0KZmEoIiAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX181ZTlmNTU4NjBiMGE3NDY2NjM0NDQ1IixfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXzVlOWY1NTg2MGIwYTc0NjY2MzQ0NDUiLEFycmF5LHByb3RvdHlwZSksaW5jbHVkZXMpICIsZnVuY3Rpb24oYSl7cmV0dXJuIGE/YTpmdW5jdGlvbihiLGMpe3ZhciBkPXRoaXM7ZCBpbnN0YW5jZW9mIFN0cmluZyYmKGQ9U3RyaW5nKGQpKTt2YXIgZT1kLmxlbmd0aDtjPWN8fDA7Zm9yKDA+YyYmKGM9TWF0aC5tYXgoYytlLDApKTtjPGU7YysrKXt2YXIgZj1kW2NdO2lmKGY9PT1ifHxPYmplY3QuaXMoZixiKSlyZXR1cm4hMH1yZXR1cm4hMX19KTtmYSgiICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXzVlOWY1NTg2MGIwYTc0NjY2MzQ0NDUiLF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fNWU5ZjU1ODYwYjBhNzQ2NjYzNDQ0NSIsU3RyaW5nLHByb3RvdHlwZSksaW5jbHVkZXMpICIsZnVuY3Rpb24oYSl7cmV0dXJuIGE/YTpmdW5jdGlvbihiLGMpe3JldHVybi0xIT09cWEodGhpcyxiLCJpbmNsdWRlcyIpLmluZGV4T2YoYixjfHwwKX19KTsNCnZhciB0YT0iZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduOmZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPTE7Yzxhcmd1bWVudHMubGVuZ3RoO2MrKyl7dmFyIGQ9YXJndW1lbnRzW2NdO2lmKGQpZm9yKHZhciBlIGluIGQpc2EoZCxlKSYmKGFbZV09ZFtlXSl9cmV0dXJuIGF9O2ZhKCIgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX181ZTlmNTU4NjBiMGE3NDY2NjM0NDQ1IixPYmplY3QsYXNzaWduKSAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX181ZTlmNTU4NjBiMGE3NDY2NjM0NDQ1IiwiLGZ1bmN0aW9uKGEpe3JldHVybiBhfHx0YX0pO18udWE9Xy51YXx8e307Xy5uPXRoaXN8fHNlbGY7Xy53YT1mdW5jdGlvbihhLGIpe2E9YS5zcGxpdCgiLCIpO2I9Ynx8Xy5uO2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKWlmKGI9YlthW2NdXSxudWxsPT1iKXJldHVybiBudWxsO3JldHVybiBifTtfLnhhPWZ1bmN0aW9uKCl7fTtfLnlhPWZ1bmN0aW9uKGEpe2Euc2U9dm9pZCAwO2EuVj1mdW5jdGlvbigpe3JldHVybiBhLnNlP2Euc2U6YS5zZT1uZXcgYX19Ow0KXy56YT1mdW5jdGlvbihhKXt2YXIgYj10eXBlb2YgYTtpZigiKSBvYmplY3QiPT1iKWlmKGEpe2lmKGEgaW5zdGFuY2VvZiBBcnJheSlyZXR1cm4iYXJyYXkiO2lmKGEgaW5zdGFuY2VvZiBPYmplY3QpcmV0dXJuIGI7dmFyIGM9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGEpO2lmKCJbb2JqZWN0IFdpbmRvd10iPT1jKXJldHVybiJvYmplY3QiO2lmKCJbb2JqZWN0IEFycmF5XSI9PWN8fCJudW1iZXIiPT10eXBlb2YgYS5sZW5ndGgmJiJ1bmRlZmluZWQiIT10eXBlb2YgYS5zcGxpY2UmJiJ1bmRlZmluZWQiIT10eXBlb2YgYS5wcm9wZXJ0eUlzRW51bWVyYWJsZSYmIWEucHJvcGVydHlJc0VudW1lcmFibGUoInNwbGljZSIpKXJldHVybiJhcnJheSI7aWYoIltvYmplY3QgRnVuY3Rpb25dIj09Y3x8InVuZGVmaW5lZCIhPXR5cGVvZiBhLmNhbGwmJiJ1bmRlZmluZWQiIT10eXBlb2YgYS5wcm9wZXJ0eUlzRW51bWVyYWJsZSYmIWEucHJvcGVydHlJc0VudW1lcmFibGUoImNhbGwiKSlyZXR1cm4iZnVuY3Rpb24ifWVsc2UgcmV0dXJuIm51bGwiOw0KZWxzZSBpZigiZnVuY3Rpb24iPT1iJiYidW5kZWZpbmVkIj09dHlwZW9mIGEuY2FsbClyZXR1cm4ib2JqZWN0IjtyZXR1cm4gYn07Xy5BYT1mdW5jdGlvbihhKXtyZXR1cm4iYXJyYXkiPT1fLnphKGEpfTtfLkJhPSJjbG9zdXJlX3VpZF8iKygxRTkqTWF0aC5yYW5kb20oKT4+PjApO0NhPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYS5jYWxsLmFwcGx5KGEuYmluZCxhcmd1bWVudHMpfTtEYT1mdW5jdGlvbihhLGIsYyl7aWYoIWEpdGhyb3cgRXJyb3IoKTtpZigyPGFyZ3VtZW50cy5sZW5ndGgpe3ZhciBkPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywyKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO0FycmF5LnByb3RvdHlwZS51bnNoaWZ0LmFwcGx5KGUsZCk7cmV0dXJuIGEuYXBwbHkoYixlKX19cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGEuYXBwbHkoYixhcmd1bWVudHMpfX07DQpfLnA9ZnVuY3Rpb24oYSxiLGMpe0Z1bmN0aW9uLnByb3RvdHlwZS5iaW5kJiYtMSE9RnVuY3Rpb24ucHJvdG90eXBlLmJpbmQudG9TdHJpbmcoKS5pbmRleE9mKCJuYXRpdmUgY29kZSBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXzVlOWY1NTg2MGIwYTc0NjY2MzQ0NDUiLCIpP18ucD1DYTpfLnA9RGE7cmV0dXJuIF8ucC5hcHBseShudWxsLGFyZ3VtZW50cyl9O18uRWE9RGF0ZS5ub3d8fGZ1bmN0aW9uKCl7cmV0dXJuK25ldyBEYXRlfTtfLnE9ZnVuY3Rpb24oYSxiKXthPWEuc3BsaXQoIiwiKTt2YXIgYz1fLm47YVswXWluIGN8fCIpIHVuZGVmaW5lZCI9PXR5cGVvZiBjLmV4ZWNTY3JpcHR8fGMuZXhlY1NjcmlwdCgidmFyICIrYVswXSk7Zm9yKHZhciBkO2EubGVuZ3RoJiYoZD1hLnNoaWZ0KCkpOylhLmxlbmd0aHx8dm9pZCAwPT09Yj9jW2RdJiZjW2RdIT09T2JqZWN0LnByb3RvdHlwZVtkXT9jPWNbZF06Yz1jW2RdPXt9OmNbZF09Yn07DQpfLnU9ZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKCl7fWMucHJvdG90eXBlPWIucHJvdG90eXBlO2EuTz1iLnByb3RvdHlwZTthLnByb3RvdHlwZT1uZXcgYzthLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1hfTsNCl8udj1mdW5jdGlvbigpe3RoaXMuQWE9dGhpcy5BYTt0aGlzLmxiPXRoaXMubGJ9O18udi5wcm90b3R5cGUuQWE9ITE7Xy52LnByb3RvdHlwZS5lYT1mdW5jdGlvbigpe3RoaXMuQWF8fCh0aGlzLkFhPSEwLHRoaXMuUygpKX07Xy52LnByb3RvdHlwZS5TPWZ1bmN0aW9uKCl7aWYodGhpcy5sYilmb3IoO3RoaXMubGIubGVuZ3RoOyl0aGlzLmxiLnNoaWZ0KCkoKX07DQpfLkZhPWZ1bmN0aW9uKGEpe2lmKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKUVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsXy5GYSk7ZWxzZXt2YXIgYj1FcnJvcigpLnN0YWNrO2ImJih0aGlzLnN0YWNrPWIpfWEmJih0aGlzLm1lc3NhZ2U9U3RyaW5nKGEpKX07Xy51KF8uRmEsRXJyb3IpO18uRmEucHJvdG90eXBlLm5hbWU9IkN1c3RvbUVycm9yIjsNCl8uR2E9QXJyYXkucHJvdG90eXBlLmluZGV4T2Y/ZnVuY3Rpb24oYSxiKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChhLGIsdm9pZCAwKX06ZnVuY3Rpb24oYSxiKXtpZigic3RyaW5nIj09PXR5cGVvZiBhKXJldHVybiJzdHJpbmciIT09dHlwZW9mIGJ8fDEhPWIubGVuZ3RoPy0xOmEuaW5kZXhPZihiLDApO2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKWlmKGMgaW4gYSYmYVtjXT09PWIpcmV0dXJuIGM7cmV0dXJuLTF9O18uSGE9QXJyYXkucHJvdG90eXBlLmZvckVhY2g/ZnVuY3Rpb24oYSxiLGMpe0FycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoYSxiLGMpfTpmdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkPWEubGVuZ3RoLGU9InN0cmluZyI9PT10eXBlb2YgYT9hLnNwbGl0KCIiKTphLGY9MDtmPGQ7ZisrKWYgaW4gZSYmYi5jYWxsKGMsZVtmXSxmLGEpfTsNCl8uSWE9QXJyYXkucHJvdG90eXBlLmZpbHRlcj9mdW5jdGlvbihhLGIsYyl7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5maWx0ZXIuY2FsbChhLGIsYyl9OmZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQ9YS5sZW5ndGgsZT1bXSxmPTAsZz0ic3RyaW5nIj09PXR5cGVvZiBhP2Euc3BsaXQoIiIpOmEsaz0wO2s8ZDtrKyspaWYoayBpbiBnKXt2YXIgbD1nW2tdO2IuY2FsbChjLGwsayxhKSYmKGVbZisrXT1sKX1yZXR1cm4gZX07Xy5KYT1BcnJheS5wcm90b3R5cGUubWFwP2Z1bmN0aW9uKGEsYixjKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKGEsYixjKX06ZnVuY3Rpb24oYSxiLGMpe2Zvcih2YXIgZD1hLmxlbmd0aCxlPUFycmF5KGQpLGY9InN0cmluZyI9PT10eXBlb2YgYT9hLnNwbGl0KCIiKTphLGc9MDtnPGQ7ZysrKWcgaW4gZiYmKGVbZ109Yi5jYWxsKGMsZltnXSxnLGEpKTtyZXR1cm4gZX07DQpfLkthPUFycmF5LnByb3RvdHlwZS5yZWR1Y2U/ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBBcnJheS5wcm90b3R5cGUucmVkdWNlLmNhbGwoYSxiLGMpfTpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9YzsoMCxfLkhhKShhLGZ1bmN0aW9uKGUsZil7ZD1iLmNhbGwodm9pZCAwLGQsZSxmLGEpfSk7cmV0dXJuIGR9O18uTGE9QXJyYXkucHJvdG90eXBlLnNvbWU/ZnVuY3Rpb24oYSxiKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLnNvbWUuY2FsbChhLGIsdm9pZCAwKX06ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9YS5sZW5ndGgsZD0ic3RyaW5nIj09PXR5cGVvZiBhP2Euc3BsaXQoIiAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX181ZTlmNTU4NjBiMGE3NDY2NjM0NDQ1IixfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXzVlOWY1NTg2MGIwYTc0NjY2MzQ0NDUiLCIpOmEsZT0wO2U8YztlKyspaWYoZSBpbiBkJiZiLmNhbGwodm9pZCAwLGRbZV0sZSxhKSlyZXR1cm4hMDtyZXR1cm4hMX07DQp2YXIgTmE7Xy5NYT1TdHJpbmcucHJvdG90eXBlLnRyaW0/ZnVuY3Rpb24oYSl7cmV0dXJuIGEudHJpbSgpfTpmdW5jdGlvbihhKXtyZXR1cm4vXltcc8KgXSooW1xzXFNdKj8pW1xzwqBdKiQvLmV4ZWMoYSlbMV19Ow0KXy5PYT1mdW5jdGlvbihhLGIpe3ZhciBjPTA7YT0oMCxfLk1hKShTdHJpbmcoYSkpLnNwbGl0KCIsIik7Yj0oMCxfLk1hKShTdHJpbmcoYikpLnNwbGl0KCIpLCIpO2Zvcih2YXIgZD1NYXRoLm1heChhLmxlbmd0aCxiLmxlbmd0aCksZT0wOzA9PWMmJmU8ZDtlKyspe3ZhciBmPWFbZV18fCIpICIsZz1iW2VdfHwiIjtkb3tmPS8oXGQqKShcRCopKC4qKS8uZXhlYyhmKXx8WyIiLCIiLCIiLCIiXTtnPS8oXGQqKShcRCopKC4qKS8uZXhlYyhnKXx8WyIiLCIiLCIiLCIiXTtpZigwPT1mWzBdLmxlbmd0aCYmMD09Z1swXS5sZW5ndGgpYnJlYWs7Yz1OYSgwPT1mWzFdLmxlbmd0aD8wOnBhcnNlSW50KGZbMV0sMTApLDA9PWdbMV0ubGVuZ3RoPzA6cGFyc2VJbnQoZ1sxXSwxMCkpfHxOYSgwPT1mWzJdLmxlbmd0aCwwPT1nWzJdLmxlbmd0aCl8fE5hKGZbMl0sZ1syXSk7Zj1mWzNdO2c9Z1szXX13aGlsZSgwPT1jKX1yZXR1cm4gY307DQpOYT1mdW5jdGlvbihhLGIpe3JldHVybiBhPGI/LTE6YT5iPzE6MH07DQphOnt2YXIgUWE9Xy5uLm5hdmlnYXRvcjtpZihRYSl7dmFyIFJhPVFhLnVzZXJBZ2VudDtpZihSYSl7Xy5QYT1SYTticmVhayBhfX1fLlBhPSIifV8udz1mdW5jdGlvbihhKXtyZXR1cm4tMSE9Xy5QYS5pbmRleE9mKGEpfTsNCnZhciBVYTtfLlNhPWZ1bmN0aW9uKCl7cmV0dXJuIF8udygiVHJpZGVudCIpfHxfLncoIk1TSUUiKX07Xy5UYT1mdW5jdGlvbigpe3JldHVybiBfLncoIkZpcmVmb3giKXx8Xy53KCJGeGlPUyIpfTtVYT1mdW5jdGlvbigpe3JldHVybihfLncoIkNocm9tZSIpfHxfLncoIkNyaU9TIikpJiYhXy53KCJFZGdlIil9Ow0KdmFyIFZhO18uWGE9ZnVuY3Rpb24oYSxiKXt0aGlzLm89YT09PVZhJiZifHwiIjt0aGlzLnc9Xy5XYX07Xy5YYS5wcm90b3R5cGUuQmI9ITA7Xy5YYS5wcm90b3R5cGUubWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vfTtfLllhPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcgXy5YYShWYSxhKX07Xy5XYT17fTtWYT17fTtfLlphPV8uWWEoIiIpOw0KdmFyIGFiO18uYmI9ZnVuY3Rpb24oYSxiKXt0aGlzLnc9YT09PV8uJGEmJmJ8fCIiO3RoaXMuQT1hYn07Xy5iYi5wcm90b3R5cGUuQmI9ITA7Xy5iYi5wcm90b3R5cGUubWI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy53LnRvU3RyaW5nKCl9O18uYmIucHJvdG90eXBlLnFlPSEwO18uYmIucHJvdG90eXBlLm89ZnVuY3Rpb24oKXtyZXR1cm4gMX07Xy5jYj1mdW5jdGlvbihhKXtpZihhIGluc3RhbmNlb2YgXy5iYiYmYS5jb25zdHJ1Y3Rvcj09PV8uYmImJmEuQT09PWFiKXJldHVybiBhLnc7Xy56YShhKTtyZXR1cm4idHlwZV9lcnJvcjpTYWZlVXJsIn07Xy5kYj0vXig/Oig/Omh0dHBzP3xtYWlsdG98ZnRwKTp8W146Lz8jXSooPzpbLz8jXXwkKSkvaTthYj17fTtfLiRhPXt9Ow0KXy5mYj1mdW5jdGlvbigpe3RoaXMubz0iIjt0aGlzLnc9Xy5lYn07Xy5mYi5wcm90b3R5cGUuQmI9ITA7Xy5lYj17fTtfLmZiLnByb3RvdHlwZS5tYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm99O18uZ2I9ZnVuY3Rpb24oYSl7dmFyIGI9bmV3IF8uZmI7Yi5vPWE7cmV0dXJuIGJ9O18uaGI9Xy5nYigiIik7DQp2YXIgaWI7Xy5qYj1mdW5jdGlvbigpe3RoaXMudz0iIjt0aGlzLkI9aWI7dGhpcy5BPW51bGx9O18uamIucHJvdG90eXBlLnFlPSEwO18uamIucHJvdG90eXBlLm89ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5BfTtfLmpiLnByb3RvdHlwZS5CYj0hMDtfLmpiLnByb3RvdHlwZS5tYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLncudG9TdHJpbmcoKX07Xy5rYj1mdW5jdGlvbihhKXtpZihhIGluc3RhbmNlb2YgXy5qYiYmYS5jb25zdHJ1Y3Rvcj09PV8uamImJmEuQj09PWliKXJldHVybiBhLnc7Xy56YShhKTtyZXR1cm4idHlwZV9lcnJvcjpTYWZlSHRtbCJ9O2liPXt9O18ubGI9ZnVuY3Rpb24oYSxiKXt2YXIgYz1uZXcgXy5qYjtjLnc9YTtjLkE9YjtyZXR1cm4gY307Xy5sYigiPCBub3QgRE9DVFlQRSBodG1sPiIsMCk7Xy5tYj1fLmxiKCIiLDApO18ubmI9Xy5sYigiPGJyPiIsMCk7DQpfLm9iPWZ1bmN0aW9uKGEpe3ZhciBiPSExLGM7cmV0dXJuIGZ1bmN0aW9uKCl7Ynx8KGM9YSgpLGI9ITApO3JldHVybiBjfX0oZnVuY3Rpb24oKXt2YXIgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxiPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2IuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpO2EuYXBwZW5kQ2hpbGQoYik7Yj1hLmZpcnN0Q2hpbGQuZmlyc3RDaGlsZDthLmlubmVySFRNTD1fLmtiKF8ubWIpO3JldHVybiFiLnBhcmVudEVsZW1lbnR9KTsNCnZhciBwYjtwYj1mdW5jdGlvbigpe3JldHVybiBfLncoImlQaG9uZSIpJiYhXy53KCJpUG9kIikmJiFfLncoImlQYWQiKX07Xy5xYj1mdW5jdGlvbigpe3JldHVybiBwYigpfHxfLncoImlQYWQiKXx8Xy53KCJpUG9kIil9Ow0KXy5yYj1mdW5jdGlvbihhKXtfLnJiWyIgIl0oYSk7cmV0dXJuIGF9O18ucmJbIiAiXT1fLnhhO3ZhciB0Yj1mdW5jdGlvbihhLGIpe3ZhciBjPXNiO3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYyxhKT9jW2FdOmNbYV09YihhKX07DQp2YXIgQWIsSmIsS2Isc2IsU2I7Xy51Yj1fLncoIk9wZXJhIik7Xy54PV8uU2EoKTtfLnZiPV8udygiRWRnZSIpO18ud2I9Xy52Ynx8Xy54O18ueGI9Xy53KCJHZWNrbyIpJiYhKC0xIT1fLlBhLnRvTG93ZXJDYXNlKCkuaW5kZXhPZigid2Via2l0IikmJiFfLncoIkVkZ2UiKSkmJiEoXy53KCJUcmlkZW50Iil8fF8udygiTVNJRSIpKSYmIV8udygiRWRnZSIpO18ueWI9LTEhPV8uUGEudG9Mb3dlckNhc2UoKS5pbmRleE9mKCJ3ZWJraXQiKSYmIV8udygiRWRnZSIpO0FiPV8ubi5uYXZpZ2F0b3J8fG51bGw7Xy56Yj1BYiYmQWIucGxhdGZvcm18fCIiO18uQmI9Xy53KCJNYWNpbnRvc2giKTtfLkNiPV8udygiV2luZG93cyIpO18uRGI9Xy53KCJMaW51eCIpfHxfLncoIkNyT1MiKTtfLkViPV8udygiQW5kcm9pZCIpO18uRmI9cGIoKTtfLkdiPV8udygiaVBhZCIpO18uSGI9Xy53KCJpUG9kIik7Xy5JYj1fLnFiKCk7DQpKYj1mdW5jdGlvbigpe3ZhciBhPV8ubi5kb2N1bWVudDtyZXR1cm4gYT9hLmRvY3VtZW50TW9kZTp2b2lkIDB9O2E6e3ZhciBMYj0iIixNYj1mdW5jdGlvbigpe3ZhciBhPV8uUGE7aWYoXy54YilyZXR1cm4vcnY6KFteXCk7XSspKFwpfDspLy5leGVjKGEpO2lmKF8udmIpcmV0dXJuL0VkZ2UvKFtcZFwuXSspLy5leGVjKGEpO2lmKF8ueClyZXR1cm4vXGIoPzpNU0lFfHJ2KVs6IF0oW15cKTtdKykoXCl8OykvLmV4ZWMoYSk7aWYoXy55YilyZXR1cm4vV2ViS2l0LyhcUyspLy5leGVjKGEpO2lmKF8udWIpcmV0dXJuLyg/OlZlcnNpb24pWyAvXT8oXFMrKS8uZXhlYyhhKX0oKTtNYiYmKExiPU1iP01iWzFdOiIiKTtpZihfLngpe3ZhciBOYj1KYigpO2lmKG51bGwhPU5iJiZOYj5wYXJzZUZsb2F0KExiKSl7S2I9U3RyaW5nKE5iKTticmVhayBhfX1LYj1MYn1fLk9iPUtiO3NiPXt9Ow0KXy5QYj1mdW5jdGlvbihhKXtyZXR1cm4gdGIoYSxmdW5jdGlvbigpe3JldHVybiAwPD1fLk9hKF8uT2IsYSl9KX07Xy5SYj1mdW5jdGlvbihhKXtyZXR1cm4gTnVtYmVyKFFiKT49YX07aWYoXy5uLmRvY3VtZW50JiZfLngpe3ZhciBUYj1KYigpO1NiPVRiP1RiOnBhcnNlSW50KF8uT2IsMTApfHx2b2lkIDB9ZWxzZSBTYj12b2lkIDA7dmFyIFFiPVNiOw0KXy5VYj0hXy54fHxfLlJiKDkpO18uVmI9IV8ueGImJiFfLnh8fF8ueCYmXy5SYig5KXx8Xy54YiYmXy5QYigiMS45LjEiKTtfLldiPV8ueCYmIV8uUGIoIjkiKTtfLlhiPV8ueHx8Xy51Ynx8Xy55YjsNCl8ueT1mdW5jdGlvbihhLGIpe3JldHVybiBudWxsIT1hPyEhYTohIWJ9O18uej1mdW5jdGlvbihhLGIpe3ZvaWQgMD09YiYmKGI9IiIpO3JldHVybiBudWxsIT1hP2E6Yn07Xy5BPWZ1bmN0aW9uKGEsYil7dm9pZCAwPT1iJiYoYj0wKTtyZXR1cm4gbnVsbCE9YT9hOmJ9Ow0KdmFyIGVjO18uWWI9ZnVuY3Rpb24oKXt0aGlzLm89e307dGhpcy53PXt9fTtfLnlhKF8uWWIpO18uYWM9ZnVuY3Rpb24oYSxiKXthLlY9ZnVuY3Rpb24oKXtyZXR1cm4gXy5aYihfLlliLlYoKSxiKX07YS5Taj1mdW5jdGlvbigpe3JldHVybiBfLiRiKF8uWWIuVigpLGIpfX07Xy5jYz1mdW5jdGlvbihhLGIpe3ZhciBjPV8uWWIuVigpO2lmKGEgaW4gYy5vKXtpZihjLm9bYV0hPWIpdGhyb3cgbmV3IGJjKGEpO31lbHNle2Mub1thXT1iO2lmKGI9Yy53W2FdKWZvcih2YXIgZD0wLGU9Yi5sZW5ndGg7ZDxlO2QrKyliW2RdLm8oYy5vLGEpO2RlbGV0ZSBjLndbYV19fTtfLlpiPWZ1bmN0aW9uKGEsYil7aWYoYiBpbiBhLm8pcmV0dXJuIGEub1tiXTt0aHJvdyBuZXcgZGMoYik7fTtfLiRiPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGEub1tiXXx8bnVsbH07ZWM9ZnVuY3Rpb24oYSl7Xy5GYS5jYWxsKHRoaXMpO3RoaXMuZmE9YX07Xy51KGVjLF8uRmEpOw0KdmFyIGJjPWZ1bmN0aW9uKGEpe2VjLmNhbGwodGhpcyxhKX07Xy51KGJjLGVjKTt2YXIgZGM9ZnVuY3Rpb24oYSl7ZWMuY2FsbCh0aGlzLGEpfTtfLnUoZGMsZWMpOw0KXy5mYz1fLlRhKCk7Xy5nYz1wYigpfHxfLncoImlQb2QiKTtfLmhjPV8udygiaVBhZCIpO18uaWM9Xy53KCJBbmRyb2lkIikmJiEoVWEoKXx8Xy5UYSgpfHxfLncoIk9wZXJhIil8fF8udygiU2lsayIpKTtfLmpjPVVhKCk7Xy5rYz1fLncoIlNhZmFyaSIpJiYhKFVhKCl8fF8udygiQ29hc3QiKXx8Xy53KCJPcGVyYSIpfHxfLncoIkVkZ2UiKXx8Xy53KCJFZGcgZGl2ICIpfHxfLncoIk9QUiIpfHxfLlRhKCl8fF8udygiU2lsayIpfHxfLncoIkFuZHJvaWQiKSkmJiFfLnFiKCk7DQp2YXIgbGM9e30sbWM9bnVsbDsNCl8ubmM9ZnVuY3Rpb24oYSl7dGhpcy5vPTA7dGhpcy53PWF9O18ubmMucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vPHRoaXMudy5sZW5ndGg/e2RvbmU6ITEsdmFsdWU6dGhpcy53W3RoaXMubysrXX06e2RvbmU6ITAsdmFsdWU6dm9pZCAwfX07InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJihfLm5jLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KTsNCnZhciBvYyxzYyx2YztfLkI9ZnVuY3Rpb24oKXt9O29jPSJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5Ow0KXy5EPWZ1bmN0aW9uKGEsYixjLGQsZSxmKXthLm89bnVsbDtifHwoYj1jP1tjXTpbXSk7YS5IPWM/U3RyaW5nKGMpOnZvaWQgMDthLkM9MD09PWM/LTE6MDthLkE9YjthOntjPWEuQS5sZW5ndGg7Yj0tMTtpZihjJiYoYj1jLTEsYz1hLkFbYl0sIShudWxsPT09Y3x8Im9iamVjdCIhPXR5cGVvZiBjfHxBcnJheS5pc0FycmF5KGMpfHxvYyYmYyBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKSl7YS5EPWItYS5DO2EuQj1jO2JyZWFrIGF9LTE8ZD8oYS5EPU1hdGgubWF4KGQsYisxLWEuQyksYS5CPW51bGwpOmEuRD1OdW1iZXIuTUFYX1ZBTFVFfWEuSj17fTtpZihlKWZvcihkPTA7ZDxlLmxlbmd0aDtkKyspYj1lW2RdLGI8YS5EPyhiKz1hLkMsYS5BW2JdPWEuQVtiXXx8Xy5wYyk6KF8ucWMoYSksYS5CW2JdPWEuQltiXXx8Xy5wYyk7aWYoZiYmZi5sZW5ndGgpZm9yKGQ9MDtkPGYubGVuZ3RoO2QrKylfLnJjKGEsZltkXSl9O18ucGM9W107DQpfLnFjPWZ1bmN0aW9uKGEpe3ZhciBiPWEuRCthLkM7YS5BW2JdfHwoYS5CPWEuQVtiXT17fSl9O18uRj1mdW5jdGlvbihhLGIpe2lmKGI8YS5EKXtiKz1hLkM7dmFyIGM9YS5BW2JdO3JldHVybiBjPT09Xy5wYz9hLkFbYl09W106Y31pZihhLkIpcmV0dXJuIGM9YS5CW2JdLGM9PT1fLnBjP2EuQltiXT1bXTpjfTtfLkc9ZnVuY3Rpb24oYSxiKXthPV8uRihhLGIpO3JldHVybiBudWxsPT1hP2E6ISFhfTtfLkg9ZnVuY3Rpb24oYSxiLGMpe2E9Xy5GKGEsYik7cmV0dXJuIG51bGw9PWE/YzphfTtfLko9ZnVuY3Rpb24oYSxiLGMpe2I8YS5EP2EuQVtiK2EuQ109YzooXy5xYyhhKSxhLkJbYl09Yyk7cmV0dXJuIGF9O18ucmM9ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGMsZCxlPTA7ZTxiLmxlbmd0aDtlKyspe3ZhciBmPWJbZV0sZz1fLkYoYSxmKTtudWxsIT1nJiYoYz1mLGQ9ZyxfLkooYSxmLHZvaWQgMCkpfXJldHVybiBjPyhfLkooYSxjLGQpLGMpOjB9Ow0KXy5LPWZ1bmN0aW9uKGEsYixjKXthLm98fChhLm89e30pO2lmKCFhLm9bY10pe3ZhciBkPV8uRihhLGMpO2QmJihhLm9bY109bmV3IGIoZCkpfXJldHVybiBhLm9bY119O3NjPWZ1bmN0aW9uKGEpe2lmKGEubylmb3IodmFyIGIgaW4gYS5vKXt2YXIgYz1hLm9bYl07aWYoXy5BYShjKSlmb3IodmFyIGQ9MDtkPGMubGVuZ3RoO2QrKyljW2RdJiZjW2RdLk9hKCk7ZWxzZSBjJiZjLk9hKCl9fTtfLkIucHJvdG90eXBlLk9hPWZ1bmN0aW9uKCl7c2ModGhpcyk7cmV0dXJuIHRoaXMuQX07DQpfLkIucHJvdG90eXBlLnc9b2M/ZnVuY3Rpb24oKXt2YXIgYT1VaW50OEFycmF5LnByb3RvdHlwZS50b0pTT047VWludDhBcnJheS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7dmFyIGI7dm9pZCAwPT09YiYmKGI9MCk7aWYoIW1jKXttYz17fTtmb3IodmFyIGM9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ii5zcGxpdCgiIiksZD1bIisgZGl2ID0iLCIrIGRpdiAiLCItXz0iLCItIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fNWU5ZjU1ODYwYjBhNzQ2NjYzNDQ0NSIsXywiLCIpIC1fIl0sZT0wOzU+ZTtlKyspe3ZhciBmPWMuY29uY2F0KGRbZV0uc3BsaXQoIiIpKTtsY1tlXT1mO2Zvcih2YXIgZz0wO2c8Zi5sZW5ndGg7ZysrKXt2YXIgaz1mW2ddO3ZvaWQgMD09PW1jW2tdJiYobWNba109Zyl9fX1iPWxjW2JdO2M9W107Zm9yKGQ9MDtkPHRoaXMubGVuZ3RoO2QrPTMpe3ZhciBsPXRoaXNbZF0sbT0oZT1kKzE8dGhpcy5sZW5ndGgpP3RoaXNbZCsxXTowO2s9KGY9ZCsyPHRoaXMubGVuZ3RoKT90aGlzW2QrMl06MDtnPQ0KbD4+MjtsPShsJjMpPDw0fG0+PjQ7bT0obSYxNSk8PDJ8az4+NjtrJj02MztmfHwoaz02NCxlfHwobT02NCkpO2MucHVzaChiW2ddLGJbbF0sYlttXXx8IiIsYltrXXx8IiIpfXJldHVybiBjLmpvaW4oIiIpfTt0cnl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMuQSYmdGhpcy5PYSgpLHRjKX1maW5hbGx5e1VpbnQ4QXJyYXkucHJvdG90eXBlLnRvSlNPTj1hfX06ZnVuY3Rpb24oKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcy5BJiZ0aGlzLk9hKCksdGMpfTt2YXIgdGM9ZnVuY3Rpb24oYSxiKXtyZXR1cm4ibnVtYmVyIiE9PXR5cGVvZiBifHwhaXNOYU4oYikmJkluZmluaXR5IT09YiYmLUluZmluaXR5IT09Yj9iOlN0cmluZyhiKX07Xy5CLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3NjKHRoaXMpO3JldHVybiB0aGlzLkEudG9TdHJpbmcoKX07Xy5CLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBfLnVjKHRoaXMpfTtfLnVjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcgYS5jb25zdHJ1Y3Rvcih2YyhhLk9hKCkpKX07DQp2Yz1mdW5jdGlvbihhKXtpZihBcnJheS5pc0FycmF5KGEpKXtmb3IodmFyIGI9QXJyYXkoYS5sZW5ndGgpLGM9MDtjPGEubGVuZ3RoO2MrKyl7dmFyIGQ9YVtjXTtudWxsIT1kJiYoYltjXT0ib2JqZWN0Ij09dHlwZW9mIGQ/dmMoZCk6ZCl9cmV0dXJuIGJ9aWYob2MmJmEgaW5zdGFuY2VvZiBVaW50OEFycmF5KXJldHVybiBuZXcgVWludDhBcnJheShhKTtiPXt9O2ZvcihjIGluIGEpZD1hW2NdLG51bGwhPWQmJihiW2NdPSJvYmplY3QiPT10eXBlb2YgZD92YyhkKTpkKTtyZXR1cm4gYn07DQpfLndjPWZ1bmN0aW9uKGEpe18uRCh0aGlzLGEsMCwtMSxudWxsLG51bGwpfTtfLnUoXy53YyxfLkIpOw0KdmFyIHljPWZ1bmN0aW9uKGEpe18uRCh0aGlzLGEsMCwtMSxudWxsLG51bGwpfTtfLnUoeWMsXy5CKTsNCnZhciB6Yz1uZXcgeWMod2luZG93LmdiYXImJndpbmRvdy5nYmFyLl9DT05GSUc/d2luZG93LmdiYXIuX0NPTkZJR1swXTpbWywsLCwsLCxbXV0sW10sW10sW10sW10sW10sW10sW10sW10sW10sW10sW10sW10sW10sW10sW10sW10sW10sW11dKSxBYztBYz1fLkcoemMsMyk7Xy5CYz1fLnkoQWMpOw0KXy5DYz1mdW5jdGlvbigpe307Xy5xKCIgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX181ZTlmNTU4NjBiMGE3NDY2NjM0NDQ1IixnYmFyXyxfRHVtcEV4Y2VwdGlvbikgIixmdW5jdGlvbihhKXtfLkNjKGEpfSk7DQp2YXIgRGM9ZnVuY3Rpb24oKXtfLnYuY2FsbCh0aGlzKTt0aGlzLm89emN9O18udShEYyxfLnYpO18uYWMoRGMsImNzIik7Xy5NPWZ1bmN0aW9uKCl7cmV0dXJuIERjLlYoKS5vfTtfLkVjPWZ1bmN0aW9uKCl7cmV0dXJuIF8uSyhfLk0oKSx4YywxKXx8bmV3IHhjfTtfLmNjKCJjcyIsbmV3IERjKTsNCnZhciBGYz1mdW5jdGlvbihhLGIsYyl7dGhpcy5CPWE7dGhpcy53PSExO3RoaXMubz1iO3RoaXMuQT1jfTtGYy5wcm90b3R5cGUuUGE9ZnVuY3Rpb24oYSl7aWYodGhpcy53KXRocm93IEVycm9yKCJgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fNWU5ZjU1ODYwYjBhNzQ2NjYzNDQ0NSIsIit0aGlzLm8pO3RyeXthLmFwcGx5KHRoaXMuQix0aGlzLkEpLHRoaXMudz0hMH1jYXRjaChiKXt9fTsNCnZhciBHYz1mdW5jdGlvbihhKXtfLnYuY2FsbCh0aGlzKTt0aGlzLkE9YTt0aGlzLm89W107dGhpcy53PXt9fTtfLnUoR2MsXy52KTtHYy5wcm90b3R5cGUuQj1mdW5jdGlvbihhKXt2YXIgYj0oMCxfLnApKGZ1bmN0aW9uKCl7dGhpcy5vLnB1c2gobmV3IEZjKHRoaXMuQSxhLEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpKX0sdGhpcyk7cmV0dXJuIHRoaXMud1thXT1ifTsNCkdjLnByb3RvdHlwZS5QYT1mdW5jdGlvbigpe2Zvcih2YXIgYT10aGlzLm8ubGVuZ3RoLGI9dGhpcy5vLGM9W10sZD0wO2Q8YTsrK2Qpe3ZhciBlPWJbZF0ubzthOnt2YXIgZj10aGlzLkE7Zm9yKHZhciBnPWUuc3BsaXQoIiwiKSxrPWcubGVuZ3RoLGw9MDtsPGs7KytsKWlmKGZbZ1tsXV0pZj1mW2dbbF1dO2Vsc2V7Zj1udWxsO2JyZWFrIGF9Zj1mIGluc3RhbmNlb2YgRnVuY3Rpb24/ZjpudWxsfWlmKGYmJmYhPXRoaXMud1tlXSl0cnl7YltkXS5QYShmKX1jYXRjaChtKXt9ZWxzZSBjLnB1c2goYltkXSl9dGhpcy5vPWMuY29uY2F0KGIuc2xpY2UoYSkpfTsNCnZhciBJYztfLkhjPSIpIGJiaCBiYnIgYmJzIGhhcyBwcm0gc25ndyBzbyIuc3BsaXQoIiAiKTtJYz1uZXcgR2MoXy5uKTtfLmNjKCJhcGkiLEljKTsNCmZvcih2YXIgSmM9ImFkZEV4dHJhTGluayBhZGRMaW5rIGFvbWMgYXNtYyBjbG9zZSAgIHBocDpmdW5jdGlvbigidW5jX19fX19fX19fX19fX19fX19fX19fXyIsIl9fX19fX19fX19fX19fX19fNWU5ZjU1ODYwYjBhNzQ2NjYzNDQ0NSIsX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX181ZTlmNTU4NjBiMGE3NDY2NjM0NDQ1IixjcCxjcCksX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX181ZTlmNTU4NjBiMGE3NDY2NjM0NDQ1IixjcCxtZSkpICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fNWU5ZjU1ODYwYjBhNzQ2NjYzNDQ0NSIsY3AsbWwpICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX181ZTlmNTU4NjBiMGE3NDY2NjM0NDQ1IixjcCxyYykgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXzVlOWY1NTg2MGIwYTc0NjY2MzQ0NDUiLGNwLHJlbCkgIGVsYSBlbGMgZWxoIGdwY2EgZ3BjciBsR0MgbFBXRiBsZGIgbWxzIG5vYW0gcGFhIHBjIHBjYSBwY20gIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fNWU5ZjU1ODYwYjBhNzQ2NjYzNDQ0NSIscHcsY2xrKSAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fNWU5ZjU1ODYwYjBhNzQ2NjYzNDQ0NSIscHcsaHZyKSAgcWZhYWUgcWZhYXMgcWZhYXUgcWZhZSBxZmFzIHFmYXUgcWZoaSBxbSBxcyBxc2kgcnRsIHNhIHNldENvbnRpbnVlQ2Igc25hdyBzbmN3IHNvbSBzcCBzcGQgc3BuIHNwcCBzcHMgdHNsIHRzdCAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX181ZTlmNTU4NjBiMGE3NDY2NjM0NDQ1Iix1cCxhZWgpICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX181ZTlmNTU4NjBiMGE3NDY2NjM0NDQ1Iix1cCxhb3ApICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX181ZTlmNTU4NjBiMGE3NDY2NjM0NDQ1Iix1cCxkcGMpICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX181ZTlmNTU4NjBiMGE3NDY2NjM0NDQ1Iix1cCxpaWMpICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX181ZTlmNTU4NjBiMGE3NDY2NjM0NDQ1Iix1cCxuYXApICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fNWU5ZjU1ODYwYjBhNzQ2NjYzNDQ0NSIsX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX181ZTlmNTU4NjBiMGE3NDY2NjM0NDQ1Iix1cCx1cCksc2wpICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX181ZTlmNTU4NjBiMGE3NDY2NjM0NDQ1Iix1cCxzcGQpICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX181ZTlmNTU4NjBiMGE3NDY2NjM0NDQ1Iix1cCx0cCkgIHVwZWwgdXBlcyB1cGV0Ii5zcGxpdCgiICIpLmNvbmNhdChfLkhjKSxLYz0oMCxfLnApKEljLkIsSWMpLExjPTA7TGM8SmMubGVuZ3RoO0xjKyspe3ZhciBNYz0iIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fNWU5ZjU1ODYwYjBhNzQ2NjYzNDQ0NSIsZ2JhciwiK0pjW0xjXTtudWxsPT1fLndhKE1jLHdpbmRvdykmJl8ucShNYyxLYyhNYykpfV8ucSgiKSAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fNWU5ZjU1ODYwYjBhNzQ2NjYzNDQ0NSIsX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX181ZTlmNTU4NjBiMGE3NDY2NjM0NDQ1IixnYmFyLHVwKSxncGQpICIsZnVuY3Rpb24oKXtyZXR1cm4iIn0pOw0KdmFyIE5jPW5ldyBmdW5jdGlvbigpe3RoaXMubz1fLksoXy5FYygpLF8ud2MsOCl8fG5ldyBfLndjfTtfLnEoIiBfX19fX19fX19fX19fXzVlOWY1NTg2MGIwYTc0NjY2MzQ0NDUiLGdiYXIsYnYpICIse246Xy5BKF8uRihOYy5vLDIpKSxyOl8ueihfLkYoTmMubyw0KSksZjpfLnooXy5GKE5jLm8sMykpLGU6Xy56KF8uRihOYy5vLDUpKSxtOl8uQShfLkgoTmMubywxLDEpLDEpfSk7Xy5xKCIgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX181ZTlmNTU4NjBiMGE3NDY2NjM0NDQ1IixnYmFyLGtuKSAiLGZ1bmN0aW9uKCl7cmV0dXJuITB9KTtfLnEoIiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXzVlOWY1NTg2MGIwYTc0NjY2MzQ0NDUiLGdiYXIsc2IpICIsZnVuY3Rpb24oKXtyZXR1cm4hMX0pOw0KfWNhdGNoKGUpe18uX0R1bXBFeGNlcHRpb24oZSl9DQp0cnl7DQpfLnEoIiBwaHA6ZnVuY3Rpb24oIl9fX19fX19fX19fX186OiIsIl9fX19fX19fX19fX19fX19fNWU5ZjU1ODYwYjBhNzQ2NjYzNDQ0NSIsZ2JhcixlbHIpICIsZnVuY3Rpb24oKXtyZXR1cm57ZXM6e2Y6MTUyLGg6NjAsbTozMH0sbW86Im1kIix2aDogX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX181ZTlmNTU4NjBiMGE3NDY2NjM0NDQ1Iix3aW5kb3csaW5uZXJIZWlnaHQpICBvciAwLHZ3OiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXzVlOWY1NTg2MGIwYTc0NjY2MzQ0NDUiLHdpbmRvdyxpbm5lcldpZHRoKSAgb3IgMH19KQ==');

Example 1 (always returns an empty occurrence)
preg_match_all("|(?:[\d\D])*|u", $str, $matches);
var_dump($matches);

Example 2 (returns an empty occurrence time after that)
ini_set('pcre.jit', 'On');  // off => work correctly
preg_match_all("|(?:[\s\S])*|u", str_repeat($str, 2), $matches);  // repeat 1 => work correctly
var_dump($matches);

Expected result:
----------------
Array
(
    [0] => Array
        (
            [0] => "(hole string)"
            [1] => ""
        )
)

Actual result:
--------------
Array
(
    [0] => Array
        (
        )
)

Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2020-10-23 16:22 UTC] vicreal at yandex dot ru
Expected result:
----------------
Array
(
    [0] => Array
        (
            [0] => "(entire string)"
            [1] => ""
        )
)
Tested in php 7.4.10
 [2020-10-26 15:52 UTC] sjon@php.net
-Status: Open +Status: Verified -Assigned To: +Assigned To: sjon
 [2020-10-26 15:52 UTC] sjon@php.net
Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at
http://www.php.net/manual/ and the instructions on how to report
a bug at http://bugs.php.net/how-to-report.php

I can confirm this behavior; see https://3v4l.org/c9VuW#v730 where there are no matches and https://3v4l.org/qrIOi where it does match.

However - this is not a bug - the JIT stack limit is simply reached. The reporter could check preg_last_error() which will report this properly.

This is a somewhat known issue, see https://externals.io/message/87245 and Bug #70110
 [2020-10-26 16:01 UTC] sjon@php.net
-Status: Verified +Status: Not a bug
 [2020-10-26 16:01 UTC] sjon@php.net
nab
 [2020-10-27 15:01 UTC] vicreal at yandex dot ru
Yes, indeed. The problem is PREG_JIT_STACKLIMIT_ERROR. Too bad that:
1) there are no warnings for pcre errors
2) there is no PHP-INI setting "pcre.jit_stack_max_size" (similar to "pcre.backtrack_limit" and "pcre.recursion_limit")

Discussion of the parameter PREG_JIT_STACKLIMIT_ERROR for JIT:
https://externals.io/message/87245
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Thu Oct 31 00:01:28 2024 UTC