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