bug76514.phpt 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542
  1. --TEST--
  2. Bug #76514 Regression in preg_match makes it fail with PREG_JIT_STACKLIMIT_ERROR
  3. --FILE--
  4. <?php
  5. $str = '{
  6. "config": {
  7. "cache-files-ttl": 0,
  8. "discard-changes": true
  9. },
  10. "minimum-stability": "stable",
  11. "prefer-stable": false,
  12. "provide": {
  13. "heroku-sys/cedar": "14.2016.03.22"
  14. },
  15. "repositories": [
  16. {
  17. "packagist.org": false
  18. },
  19. {
  20. "type": "package",
  21. "package": [
  22. {
  23. "type": "metapackage",
  24. "name": "anthonymartin/geo-location",
  25. "version": "v1.0.0",
  26. "require": {
  27. "heroku-sys/php": ">=5.3.0"
  28. },
  29. "replace": [],
  30. "provide": [],
  31. "conflict": []
  32. },
  33. {
  34. "type": "metapackage",
  35. "name": "aws/aws-sdk-php",
  36. "version": "3.9.4",
  37. "require": {
  38. "heroku-sys/php": ">=5.5"
  39. },
  40. "replace": [],
  41. "provide": [],
  42. "conflict": []
  43. },
  44. {
  45. "type": "metapackage",
  46. "name": "cloudinary/cloudinary_php",
  47. "version": "dev-master",
  48. "require": {
  49. "heroku-sys/ext-curl": "*",
  50. "heroku-sys/ext-json": "*",
  51. "heroku-sys/php": ">=5.3.0"
  52. },
  53. "replace": [],
  54. "provide": [],
  55. "conflict": []
  56. },
  57. {
  58. "type": "metapackage",
  59. "name": "doctrine/annotations",
  60. "version": "v1.2.7",
  61. "require": {
  62. "heroku-sys/php": ">=5.3.2"
  63. },
  64. "replace": [],
  65. "provide": [],
  66. "conflict": []
  67. },
  68. {
  69. "type": "metapackage",
  70. "name": "doctrine/cache",
  71. "version": "v1.6.0",
  72. "require": {
  73. "heroku-sys/php": "~5.5|~7.0"
  74. },
  75. "replace": [],
  76. "provide": [],
  77. "conflict": []
  78. },
  79. {
  80. "type": "metapackage",
  81. "name": "doctrine/collections",
  82. "version": "v1.3.0",
  83. "require": {
  84. "heroku-sys/php": ">=5.3.2"
  85. },
  86. "replace": [],
  87. "provide": [],
  88. "conflict": []
  89. },
  90. {
  91. "type": "metapackage",
  92. "name": "doctrine/common",
  93. "version": "v2.6.1",
  94. "require": {
  95. "heroku-sys/php": "~5.5|~7.0"
  96. },
  97. "replace": [],
  98. "provide": [],
  99. "conflict": []
  100. },
  101. {
  102. "type": "metapackage",
  103. "name": "doctrine/inflector",
  104. "version": "v1.1.0",
  105. "require": {
  106. "heroku-sys/php": ">=5.3.2"
  107. },
  108. "replace": [],
  109. "provide": [],
  110. "conflict": []
  111. },
  112. {
  113. "type": "metapackage",
  114. "name": "doctrine/lexer",
  115. "version": "v1.0.1",
  116. "require": {
  117. "heroku-sys/php": ">=5.3.2"
  118. },
  119. "replace": [],
  120. "provide": [],
  121. "conflict": []
  122. },
  123. {
  124. "type": "metapackage",
  125. "name": "geoip/geoip",
  126. "version": "v1.16",
  127. "require": [],
  128. "replace": [],
  129. "provide": [],
  130. "conflict": {
  131. "heroku-sys/ext-geoip": "*"
  132. }
  133. },
  134. {
  135. "type": "metapackage",
  136. "name": "giggsey/libphonenumber-for-php",
  137. "version": "7.2.5",
  138. "require": {
  139. "heroku-sys/ext-mbstring": "*"
  140. },
  141. "replace": [],
  142. "provide": [],
  143. "conflict": []
  144. },
  145. {
  146. "type": "metapackage",
  147. "name": "guzzlehttp/guzzle",
  148. "version": "5.3.0",
  149. "require": {
  150. "heroku-sys/php": ">=5.4.0"
  151. },
  152. "replace": [],
  153. "provide": [],
  154. "conflict": []
  155. },
  156. {
  157. "type": "metapackage",
  158. "name": "guzzlehttp/promises",
  159. "version": "1.0.3",
  160. "require": {
  161. "heroku-sys/php": ">=5.5.0"
  162. },
  163. "replace": [],
  164. "provide": [],
  165. "conflict": []
  166. },
  167. {
  168. "type": "metapackage",
  169. "name": "guzzlehttp/psr7",
  170. "version": "1.2.3",
  171. "require": {
  172. "heroku-sys/php": ">=5.4.0"
  173. },
  174. "replace": [],
  175. "provide": [],
  176. "conflict": []
  177. },
  178. {
  179. "type": "metapackage",
  180. "name": "guzzlehttp/ringphp",
  181. "version": "1.1.0",
  182. "require": {
  183. "heroku-sys/php": ">=5.4.0"
  184. },
  185. "replace": [],
  186. "provide": [],
  187. "conflict": []
  188. },
  189. {
  190. "type": "metapackage",
  191. "name": "guzzlehttp/streams",
  192. "version": "3.0.0",
  193. "require": {
  194. "heroku-sys/php": ">=5.4.0"
  195. },
  196. "replace": [],
  197. "provide": [],
  198. "conflict": []
  199. },
  200. {
  201. "type": "metapackage",
  202. "name": "hipchat/hipchat-php",
  203. "version": "v1.4",
  204. "require": {
  205. "heroku-sys/php": ">=5.3.0"
  206. },
  207. "replace": [],
  208. "provide": [],
  209. "conflict": []
  210. },
  211. {
  212. "type": "metapackage",
  213. "name": "kriswallsmith/buzz",
  214. "version": "v0.15",
  215. "require": {
  216. "heroku-sys/php": ">=5.3.0"
  217. },
  218. "replace": [],
  219. "provide": [],
  220. "conflict": []
  221. },
  222. {
  223. "type": "metapackage",
  224. "name": "league/csv",
  225. "version": "8.0.0",
  226. "require": {
  227. "heroku-sys/ext-mbstring": "*",
  228. "heroku-sys/php": ">=5.5.0"
  229. },
  230. "replace": [],
  231. "provide": [],
  232. "conflict": []
  233. },
  234. {
  235. "type": "metapackage",
  236. "name": "league/fractal",
  237. "version": "0.13.0",
  238. "require": {
  239. "heroku-sys/php": ">=5.4"
  240. },
  241. "replace": [],
  242. "provide": [],
  243. "conflict": []
  244. },
  245. {
  246. "type": "metapackage",
  247. "name": "mashape/unirest-php",
  248. "version": "1.2.1",
  249. "require": {
  250. "heroku-sys/ext-curl": "*",
  251. "heroku-sys/ext-json": "*",
  252. "heroku-sys/php": ">=5.3.0"
  253. },
  254. "replace": [],
  255. "provide": [],
  256. "conflict": []
  257. },
  258. {
  259. "type": "metapackage",
  260. "name": "mtdowling/jmespath.php",
  261. "version": "2.3.0",
  262. "require": {
  263. "heroku-sys/php": ">=5.4.0"
  264. },
  265. "replace": [],
  266. "provide": [],
  267. "conflict": []
  268. },
  269. {
  270. "type": "metapackage",
  271. "name": "palex/phpstructureddata",
  272. "version": "v2.0.1",
  273. "require": {
  274. "heroku-sys/php": ">=5.3.0"
  275. },
  276. "replace": [],
  277. "provide": [],
  278. "conflict": []
  279. },
  280. {
  281. "type": "metapackage",
  282. "name": "psr/http-message",
  283. "version": "1.0",
  284. "require": {
  285. "heroku-sys/php": ">=5.3.0"
  286. },
  287. "replace": [],
  288. "provide": [],
  289. "conflict": []
  290. },
  291. {
  292. "type": "metapackage",
  293. "name": "react/promise",
  294. "version": "v2.2.1",
  295. "require": {
  296. "heroku-sys/php": ">=5.4.0"
  297. },
  298. "replace": [],
  299. "provide": [],
  300. "conflict": []
  301. },
  302. {
  303. "type": "metapackage",
  304. "name": "rollbar/rollbar",
  305. "version": "v0.15.0",
  306. "require": {
  307. "heroku-sys/ext-curl": "*"
  308. },
  309. "replace": [],
  310. "provide": [],
  311. "conflict": []
  312. },
  313. {
  314. "type": "metapackage",
  315. "name": "ronanguilloux/isocodes",
  316. "version": "1.2.0",
  317. "require": {
  318. "heroku-sys/ext-bcmath": "*",
  319. "heroku-sys/php": ">=5.4.0"
  320. },
  321. "replace": [],
  322. "provide": [],
  323. "conflict": []
  324. },
  325. {
  326. "type": "metapackage",
  327. "name": "sendgrid/sendgrid",
  328. "version": "2.1.1",
  329. "require": {
  330. "heroku-sys/php": ">=5.3"
  331. },
  332. "replace": [],
  333. "provide": [],
  334. "conflict": []
  335. },
  336. {
  337. "type": "metapackage",
  338. "name": "sendgrid/smtpapi",
  339. "version": "0.0.1",
  340. "require": {
  341. "heroku-sys/php": ">=5.3"
  342. },
  343. "replace": [],
  344. "provide": [],
  345. "conflict": []
  346. },
  347. {
  348. "type": "metapackage",
  349. "name": "symfony/css-selector",
  350. "version": "v2.8.2",
  351. "require": {
  352. "heroku-sys/php": ">=5.3.9"
  353. },
  354. "replace": [],
  355. "provide": [],
  356. "conflict": []
  357. },
  358. {
  359. "type": "metapackage",
  360. "name": "symfony/http-foundation",
  361. "version": "v2.8.2",
  362. "require": {
  363. "heroku-sys/php": ">=5.3.9"
  364. },
  365. "replace": [],
  366. "provide": [],
  367. "conflict": []
  368. },
  369. {
  370. "type": "metapackage",
  371. "name": "symfony/polyfill-php54",
  372. "version": "v1.1.0",
  373. "require": {
  374. "heroku-sys/php": ">=5.3.3"
  375. },
  376. "replace": [],
  377. "provide": [],
  378. "conflict": []
  379. },
  380. {
  381. "type": "metapackage",
  382. "name": "symfony/polyfill-php55",
  383. "version": "v1.1.0",
  384. "require": {
  385. "heroku-sys/php": ">=5.3.3"
  386. },
  387. "replace": [],
  388. "provide": [],
  389. "conflict": []
  390. },
  391. {
  392. "type": "metapackage",
  393. "name": "thepixeldeveloper/sitemap",
  394. "version": "3.0.0",
  395. "require": {
  396. "heroku-sys/php": ">=5.3.0"
  397. },
  398. "replace": [],
  399. "provide": [],
  400. "conflict": []
  401. },
  402. {
  403. "type": "metapackage",
  404. "name": "tijsverkoyen/css-to-inline-styles",
  405. "version": "1.5.5",
  406. "require": {
  407. "heroku-sys/php": ">=5.3.0"
  408. },
  409. "replace": [],
  410. "provide": [],
  411. "conflict": []
  412. },
  413. {
  414. "type": "metapackage",
  415. "name": "yiisoft/yii",
  416. "version": "1.1.17",
  417. "require": {
  418. "heroku-sys/php": ">=5.1.0"
  419. },
  420. "replace": [],
  421. "provide": [],
  422. "conflict": []
  423. },
  424. {
  425. "type": "metapackage",
  426. "name": "composer.json/composer.lock",
  427. "version": "dev-597511d6d51b96e4a8afeba2c79982e5",
  428. "require": {
  429. "heroku-sys/php": "~5.6.0",
  430. "heroku-sys/ext-newrelic": "*",
  431. "heroku-sys/ext-gd": "*",
  432. "heroku-sys/ext-redis": "*"
  433. },
  434. "replace": [],
  435. "provide": [],
  436. "conflict": []
  437. }
  438. ]
  439. }
  440. ],
  441. "require": {
  442. "composer.json/composer.lock": "dev-597511d6d51b96e4a8afeba2c79982e5",
  443. "anthonymartin/geo-location": "v1.0.0",
  444. "aws/aws-sdk-php": "3.9.4",
  445. "cloudinary/cloudinary_php": "dev-master",
  446. "doctrine/annotations": "v1.2.7",
  447. "doctrine/cache": "v1.6.0",
  448. "doctrine/collections": "v1.3.0",
  449. "doctrine/common": "v2.6.1",
  450. "doctrine/inflector": "v1.1.0",
  451. "doctrine/lexer": "v1.0.1",
  452. "geoip/geoip": "v1.16",
  453. "giggsey/libphonenumber-for-php": "7.2.5",
  454. "guzzlehttp/guzzle": "5.3.0",
  455. "guzzlehttp/promises": "1.0.3",
  456. "guzzlehttp/psr7": "1.2.3",
  457. "guzzlehttp/ringphp": "1.1.0",
  458. "guzzlehttp/streams": "3.0.0",
  459. "hipchat/hipchat-php": "v1.4",
  460. "kriswallsmith/buzz": "v0.15",
  461. "league/csv": "8.0.0",
  462. "league/fractal": "0.13.0",
  463. "mashape/unirest-php": "1.2.1",
  464. "mtdowling/jmespath.php": "2.3.0",
  465. "palex/phpstructureddata": "v2.0.1",
  466. "psr/http-message": "1.0",
  467. "react/promise": "v2.2.1",
  468. "rollbar/rollbar": "v0.15.0",
  469. "ronanguilloux/isocodes": "1.2.0",
  470. "sendgrid/sendgrid": "2.1.1",
  471. "sendgrid/smtpapi": "0.0.1",
  472. "symfony/css-selector": "v2.8.2",
  473. "symfony/http-foundation": "v2.8.2",
  474. "symfony/polyfill-php54": "v1.1.0",
  475. "symfony/polyfill-php55": "v1.1.0",
  476. "thepixeldeveloper/sitemap": "3.0.0",
  477. "tijsverkoyen/css-to-inline-styles": "1.5.5",
  478. "yiisoft/yii": "1.1.17",
  479. "heroku-sys/apache": "^2.4.10",
  480. "heroku-sys/nginx": "~1.8.0"
  481. }
  482. }';
  483. $res = preg_match('{(?(DEFINE)
  484. (?<number> -? (?= [1-9]|0(?!\d) ) \d+ (\.\d+)? ([eE] [+-]? \d+)? )
  485. (?<boolean> true | false | null )
  486. (?<string> " ([^"\\\\]* | \\\\ ["\\\\bfnrt\/] | \\\\ u [0-9a-f]{4} )* " )
  487. (?<array> \[ (?: (?&json) \s* (?: , (?&json) \s* )* )? \s* \] )
  488. (?<pair> \s* (?&string) \s* : (?&json) \s* )
  489. (?<object> \{ (?: (?&pair) (?: , (?&pair) )* )? \s* \} )
  490. (?<json> \s* (?: (?&number) | (?&boolean) | (?&string) | (?&array) | (?&object) ) )
  491. )
  492. ^(?P<start>\s*\{\s*(?:(?&string)\s*:\s*(?&json)\s*,\s*)*?)
  493. (?P<property>'.preg_quote('"require"').'\s*:\s*)(?P<value>(?&json))(?P<end>.*)}sx', $str, $match);
  494. var_dump($res, $match['value'] ?? null, preg_last_error() == PREG_JIT_STACKLIMIT_ERROR);
  495. ?>
  496. --EXPECT--
  497. int(1)
  498. string(1613) "{
  499. "composer.json/composer.lock": "dev-597511d6d51b96e4a8afeba2c79982e5",
  500. "anthonymartin/geo-location": "v1.0.0",
  501. "aws/aws-sdk-php": "3.9.4",
  502. "cloudinary/cloudinary_php": "dev-master",
  503. "doctrine/annotations": "v1.2.7",
  504. "doctrine/cache": "v1.6.0",
  505. "doctrine/collections": "v1.3.0",
  506. "doctrine/common": "v2.6.1",
  507. "doctrine/inflector": "v1.1.0",
  508. "doctrine/lexer": "v1.0.1",
  509. "geoip/geoip": "v1.16",
  510. "giggsey/libphonenumber-for-php": "7.2.5",
  511. "guzzlehttp/guzzle": "5.3.0",
  512. "guzzlehttp/promises": "1.0.3",
  513. "guzzlehttp/psr7": "1.2.3",
  514. "guzzlehttp/ringphp": "1.1.0",
  515. "guzzlehttp/streams": "3.0.0",
  516. "hipchat/hipchat-php": "v1.4",
  517. "kriswallsmith/buzz": "v0.15",
  518. "league/csv": "8.0.0",
  519. "league/fractal": "0.13.0",
  520. "mashape/unirest-php": "1.2.1",
  521. "mtdowling/jmespath.php": "2.3.0",
  522. "palex/phpstructureddata": "v2.0.1",
  523. "psr/http-message": "1.0",
  524. "react/promise": "v2.2.1",
  525. "rollbar/rollbar": "v0.15.0",
  526. "ronanguilloux/isocodes": "1.2.0",
  527. "sendgrid/sendgrid": "2.1.1",
  528. "sendgrid/smtpapi": "0.0.1",
  529. "symfony/css-selector": "v2.8.2",
  530. "symfony/http-foundation": "v2.8.2",
  531. "symfony/polyfill-php54": "v1.1.0",
  532. "symfony/polyfill-php55": "v1.1.0",
  533. "thepixeldeveloper/sitemap": "3.0.0",
  534. "tijsverkoyen/css-to-inline-styles": "1.5.5",
  535. "yiisoft/yii": "1.1.17",
  536. "heroku-sys/apache": "^2.4.10",
  537. "heroku-sys/nginx": "~1.8.0"
  538. }"
  539. bool(false)