composer: JsonManipulator regexes run into PREG_BACKTRACK_LIMIT_ERROR or PREG_JIT_STACKLIMIT_ERROR for large composer.json files

JsonManipulator uses regular expressions to parse composer.json for e.g. composer require runs, so inserting, changing, or removing packages leaves the original formatting of the file (mostly) intact.

If the files are large (in particular, if there is a lot of JSON before the require section), the regular expressions used for this “parsing” may fail in two different ways.

PREG_BACKTRACK_LIMIT_ERROR

With the following composer.json, running composer require ext-foo:* using any PHP version causes a PREG_BACKTRACK_LIMIT_ERROR:

{
    "config": {
        "cache-files-ttl": 0,
        "discard-changes": true
    },
    "minimum-stability": "stable",
    "prefer-stable": false,
    "provide": {
        "heroku-sys\/cedar": "14.2016.03.22"
    },
    "repositories": [
        {
            "packagist": false
        },
        {
            "type": "package",
            "package": [
                {
                    "type": "metapackage",
                    "name": "anthonymartin\/geo-location",
                    "version": "v1.0.0",
                    "require": {
                        "heroku-sys\/php": ">=5.3.0"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "aws\/aws-sdk-php",
                    "version": "3.9.4",
                    "require": {
                        "heroku-sys\/php": ">=5.5"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "cloudinary\/cloudinary_php",
                    "version": "dev-master",
                    "require": {
                        "heroku-sys\/ext-curl": "*",
                        "heroku-sys\/ext-json": "*",
                        "heroku-sys\/php": ">=5.3.0"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "doctrine\/annotations",
                    "version": "v1.2.7",
                    "require": {
                        "heroku-sys\/php": ">=5.3.2"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "doctrine\/cache",
                    "version": "v1.6.0",
                    "require": {
                        "heroku-sys\/php": "~5.5|~7.0"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "doctrine\/collections",
                    "version": "v1.3.0",
                    "require": {
                        "heroku-sys\/php": ">=5.3.2"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "doctrine\/common",
                    "version": "v2.6.1",
                    "require": {
                        "heroku-sys\/php": "~5.5|~7.0"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "doctrine\/inflector",
                    "version": "v1.1.0",
                    "require": {
                        "heroku-sys\/php": ">=5.3.2"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "doctrine\/lexer",
                    "version": "v1.0.1",
                    "require": {
                        "heroku-sys\/php": ">=5.3.2"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "geoip\/geoip",
                    "version": "v1.16",
                    "require": [],
                    "replace": [],
                    "provide": [],
                    "conflict": {
                        "heroku-sys\/ext-geoip": "*"
                    }
                },
                {
                    "type": "metapackage",
                    "name": "giggsey\/libphonenumber-for-php",
                    "version": "7.2.5",
                    "require": {
                        "heroku-sys\/ext-mbstring": "*"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "guzzlehttp\/guzzle",
                    "version": "5.3.0",
                    "require": {
                        "heroku-sys\/php": ">=5.4.0"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "guzzlehttp\/promises",
                    "version": "1.0.3",
                    "require": {
                        "heroku-sys\/php": ">=5.5.0"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "guzzlehttp\/psr7",
                    "version": "1.2.3",
                    "require": {
                        "heroku-sys\/php": ">=5.4.0"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "guzzlehttp\/ringphp",
                    "version": "1.1.0",
                    "require": {
                        "heroku-sys\/php": ">=5.4.0"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "guzzlehttp\/streams",
                    "version": "3.0.0",
                    "require": {
                        "heroku-sys\/php": ">=5.4.0"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "hipchat\/hipchat-php",
                    "version": "v1.4",
                    "require": {
                        "heroku-sys\/php": ">=5.3.0"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "kriswallsmith\/buzz",
                    "version": "v0.15",
                    "require": {
                        "heroku-sys\/php": ">=5.3.0"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "league\/csv",
                    "version": "8.0.0",
                    "require": {
                        "heroku-sys\/ext-mbstring": "*",
                        "heroku-sys\/php": ">=5.5.0"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "league\/fractal",
                    "version": "0.13.0",
                    "require": {
                        "heroku-sys\/php": ">=5.4"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "mashape\/unirest-php",
                    "version": "1.2.1",
                    "require": {
                        "heroku-sys\/ext-curl": "*",
                        "heroku-sys\/ext-json": "*",
                        "heroku-sys\/php": ">=5.3.0"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "mtdowling\/jmespath.php",
                    "version": "2.3.0",
                    "require": {
                        "heroku-sys\/php": ">=5.4.0"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "palex\/phpstructureddata",
                    "version": "v2.0.1",
                    "require": {
                        "heroku-sys\/php": ">=5.3.0"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "psr\/http-message",
                    "version": "1.0",
                    "require": {
                        "heroku-sys\/php": ">=5.3.0"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "react\/promise",
                    "version": "v2.2.1",
                    "require": {
                        "heroku-sys\/php": ">=5.4.0"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "rollbar\/rollbar",
                    "version": "v0.15.0",
                    "require": {
                        "heroku-sys\/ext-curl": "*"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "ronanguilloux\/isocodes",
                    "version": "1.2.0",
                    "require": {
                        "heroku-sys\/ext-bcmath": "*",
                        "heroku-sys\/php": ">=5.4.0"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "sendgrid\/sendgrid",
                    "version": "2.1.1",
                    "require": {
                        "heroku-sys\/php": ">=5.3"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "sendgrid\/smtpapi",
                    "version": "0.0.1",
                    "require": {
                        "heroku-sys\/php": ">=5.3"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "symfony\/css-selector",
                    "version": "v2.8.2",
                    "require": {
                        "heroku-sys\/php": ">=5.3.9"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "symfony\/http-foundation",
                    "version": "v2.8.2",
                    "require": {
                        "heroku-sys\/php": ">=5.3.9"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "symfony\/polyfill-php54",
                    "version": "v1.1.0",
                    "require": {
                        "heroku-sys\/php": ">=5.3.3"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "symfony\/polyfill-php55",
                    "version": "v1.1.0",
                    "require": {
                        "heroku-sys\/php": ">=5.3.3"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "thepixeldeveloper\/sitemap",
                    "version": "3.0.0",
                    "require": {
                        "heroku-sys\/php": ">=5.3.0"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "tijsverkoyen\/css-to-inline-styles",
                    "version": "1.5.5",
                    "require": {
                        "heroku-sys\/php": ">=5.3.0"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "yiisoft\/yii",
                    "version": "1.1.17",
                    "require": {
                        "heroku-sys\/php": ">=5.1.0"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "composer.json\/composer.lock",
                    "version": "dev-597511d6d51b96e4a8afeba2c79982e5",
                    "require": {
                        "heroku-sys\/php": "~5.6.0",
                        "heroku-sys\/ext-newrelic": "*",
                        "heroku-sys\/ext-gd": "*",
                        "heroku-sys\/ext-redis": "*"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                }
            ]
        }
    ],
    "require": {
        "composer.json\/composer.lock": "dev-597511d6d51b96e4a8afeba2c79982e5",
        "anthonymartin\/geo-location": "v1.0.0",
        "aws\/aws-sdk-php": "3.9.4",
        "cloudinary\/cloudinary_php": "dev-master",
        "doctrine\/annotations": "v1.2.7",
        "doctrine\/cache": "v1.6.0",
        "doctrine\/collections": "v1.3.0",
        "doctrine\/common": "v2.6.1",
        "doctrine\/inflector": "v1.1.0",
        "doctrine\/lexer": "v1.0.1",
        "geoip\/geoip": "v1.16",
        "giggsey\/libphonenumber-for-php": "7.2.5",
        "guzzlehttp\/guzzle": "5.3.0",
        "guzzlehttp\/promises": "1.0.3",
        "guzzlehttp\/psr7": "1.2.3",
        "guzzlehttp\/ringphp": "1.1.0",
        "guzzlehttp\/streams": "3.0.0",
        "hipchat\/hipchat-php": "v1.4",
        "kriswallsmith\/buzz": "v0.15",
        "league\/csv": "8.0.0",
        "league\/fractal": "0.13.0",
        "mashape\/unirest-php": "1.2.1",
        "mtdowling\/jmespath.php": "2.3.0",
        "palex\/phpstructureddata": "v2.0.1",
        "psr\/http-message": "1.0",
        "react\/promise": "v2.2.1",
        "rollbar\/rollbar": "v0.15.0",
        "ronanguilloux\/isocodes": "1.2.0",
        "sendgrid\/sendgrid": "2.1.1",
        "sendgrid\/smtpapi": "0.0.1",
        "symfony\/css-selector": "v2.8.2",
        "symfony\/http-foundation": "v2.8.2",
        "symfony\/polyfill-php54": "v1.1.0",
        "symfony\/polyfill-php55": "v1.1.0",
        "thepixeldeveloper\/sitemap": "3.0.0",
        "tijsverkoyen\/css-to-inline-styles": "1.5.5",
        "yiisoft\/yii": "1.1.17",
        "heroku-sys\/apache": "^2.4.10",
        "heroku-sys\/nginx": "~1.8.0"
    }
}

PREG_JIT_STACKLIMIT_ERROR

With the following composer.json, running composer require ext-foo:* using PHP 7 causes a PREG_JIT_STACKLIMIT_ERROR (which Composer does not handle, so it reports it as “Failed to execute regex: Unknown error”):

{
    "config": {
        "cache-files-ttl": 0,
        "discard-changes": true
    },
    "minimum-stability": "stable",
    "prefer-stable": false,
    "provide": {
        "heroku-sys\/cedar": "14.2016.03.22"
    },
    "repositories": [
        {
            "packagist": false
        },
        {
            "type": "package",
            "package": [
                {
                    "type": "metapackage",
                    "name": "algolia\/algoliasearch-client-php",
                    "version": "1.8.1",
                    "require": {
                        "heroku-sys\/ext-mbstring": "*",
                        "heroku-sys\/php": ">=5.4"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "algolia\/algoliasearch-laravel",
                    "version": "1.0.10",
                    "require": {
                        "heroku-sys\/php": ">=5.5.9"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "asm89\/stack-cors",
                    "version": "0.2.1",
                    "require": {
                        "heroku-sys\/php": ">=5.3.2"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "aws\/aws-sdk-php",
                    "version": "3.15.9",
                    "require": {
                        "heroku-sys\/php": ">=5.5"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "aws\/aws-sdk-php-laravel",
                    "version": "3.1.0",
                    "require": {
                        "heroku-sys\/php": ">=5.5.9"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "barryvdh\/laravel-cors",
                    "version": "v0.7.3",
                    "require": {
                        "heroku-sys\/php": ">=5.4.0"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "bookingsync\/oauth2-bookingsync-php",
                    "version": "0.1.3",
                    "require": {
                        "heroku-sys\/php": ">=5.4.0"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "classpreloader\/classpreloader",
                    "version": "3.0.0",
                    "require": {
                        "heroku-sys\/php": ">=5.5.9"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "danielstjules\/stringy",
                    "version": "1.10.0",
                    "require": {
                        "heroku-sys\/ext-mbstring": "*",
                        "heroku-sys\/php": ">=5.3.0"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "dnoegel\/php-xdg-base-dir",
                    "version": "0.1",
                    "require": {
                        "heroku-sys\/php": ">=5.3.2"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "doctrine\/annotations",
                    "version": "v1.2.7",
                    "require": {
                        "heroku-sys\/php": ">=5.3.2"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "doctrine\/cache",
                    "version": "v1.6.0",
                    "require": {
                        "heroku-sys\/php": "~5.5|~7.0"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "doctrine\/collections",
                    "version": "v1.3.0",
                    "require": {
                        "heroku-sys\/php": ">=5.3.2"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "doctrine\/common",
                    "version": "v2.6.1",
                    "require": {
                        "heroku-sys\/php": "~5.5|~7.0"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "doctrine\/dbal",
                    "version": "v2.5.4",
                    "require": {
                        "heroku-sys\/php": ">=5.3.2"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "doctrine\/inflector",
                    "version": "v1.1.0",
                    "require": {
                        "heroku-sys\/php": ">=5.3.2"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "doctrine\/lexer",
                    "version": "v1.0.1",
                    "require": {
                        "heroku-sys\/php": ">=5.3.2"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "fabpot\/goutte",
                    "version": "v3.1.2",
                    "require": {
                        "heroku-sys\/php": ">=5.5.0"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "graham-campbell\/manager",
                    "version": "v2.3.1",
                    "require": {
                        "heroku-sys\/php": ">=5.5.9"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "guzzle\/guzzle",
                    "version": "v3.9.3",
                    "require": {
                        "heroku-sys\/ext-curl": "*",
                        "heroku-sys\/php": ">=5.3.3"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "guzzlehttp\/guzzle",
                    "version": "6.1.1",
                    "require": {
                        "heroku-sys\/php": ">=5.5.0"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "guzzlehttp\/promises",
                    "version": "1.1.0",
                    "require": {
                        "heroku-sys\/php": ">=5.5.0"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "guzzlehttp\/psr7",
                    "version": "1.2.3",
                    "require": {
                        "heroku-sys\/php": ">=5.4.0"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "intercom\/intercom-php",
                    "version": "v1.4.0",
                    "require": {
                        "heroku-sys\/php": ">=5.4.0"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "intervention\/image",
                    "version": "2.3.6",
                    "require": {
                        "heroku-sys\/ext-fileinfo": "*",
                        "heroku-sys\/php": ">=5.4.0"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "jakub-onderka\/php-console-color",
                    "version": "0.1",
                    "require": {
                        "heroku-sys\/php": ">=5.3.2"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "jakub-onderka\/php-console-highlighter",
                    "version": "v0.3.2",
                    "require": {
                        "heroku-sys\/php": ">=5.3.0"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "jeremeamia\/SuperClosure",
                    "version": "2.2.0",
                    "require": {
                        "heroku-sys\/php": ">=5.4"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "jlapp\/swaggervel",
                    "version": "dev-master",
                    "require": {
                        "heroku-sys\/php": ">=5.3.0"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "laravel\/framework",
                    "version": "v5.1.31",
                    "require": {
                        "heroku-sys\/ext-mbstring": "*",
                        "heroku-sys\/ext-openssl": "*",
                        "heroku-sys\/php": ">=5.5.9"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "laravelcollective\/html",
                    "version": "v5.1.9",
                    "require": {
                        "heroku-sys\/php": ">=5.5.9"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "league\/flysystem",
                    "version": "1.0.19",
                    "require": {
                        "heroku-sys\/php": ">=5.4.0"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "league\/flysystem-aws-s3-v3",
                    "version": "1.0.9",
                    "require": {
                        "heroku-sys\/php": ">=5.5.0"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "league\/fractal",
                    "version": "0.13.0",
                    "require": {
                        "heroku-sys\/php": ">=5.4"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "league\/glide",
                    "version": "1.0.0",
                    "require": {
                        "heroku-sys\/php": "^5.4 | ^7.0"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "league\/oauth2-client",
                    "version": "0.12.1",
                    "require": {
                        "heroku-sys\/php": ">=5.4.0"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "mindscape\/raygun4php",
                    "version": "dev-master",
                    "require": {
                        "heroku-sys\/php": ">=5.3.0"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "monolog\/monolog",
                    "version": "1.18.1",
                    "require": {
                        "heroku-sys\/php": ">=5.3.0"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "mtdowling\/cron-expression",
                    "version": "v1.1.0",
                    "require": {
                        "heroku-sys\/php": ">=5.3.2"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "mtdowling\/jmespath.php",
                    "version": "2.3.0",
                    "require": {
                        "heroku-sys\/php": ">=5.4.0"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "namshi\/jose",
                    "version": "5.0.2",
                    "require": {
                        "heroku-sys\/php": ">=5.3.3"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "nesbot\/carbon",
                    "version": "1.21.0",
                    "require": {
                        "heroku-sys\/php": ">=5.3.0"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "nikic\/php-parser",
                    "version": "v2.0.1",
                    "require": {
                        "heroku-sys\/ext-tokenizer": "*",
                        "heroku-sys\/php": ">=5.4"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "orangehill\/iseed",
                    "version": "dev-master",
                    "require": {
                        "heroku-sys\/php": ">=5.4.0"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "paragonie\/random_compat",
                    "version": "v1.2.2",
                    "require": {
                        "heroku-sys\/php": ">=5.2.0"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "phpseclib\/phpseclib",
                    "version": "0.3.10",
                    "require": {
                        "heroku-sys\/php": ">=5.0.0"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "predis\/predis",
                    "version": "v1.0.3",
                    "require": {
                        "heroku-sys\/php": ">=5.3.2"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "psr\/http-message",
                    "version": "1.0",
                    "require": {
                        "heroku-sys\/php": ">=5.3.0"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "psy\/psysh",
                    "version": "v0.7.2",
                    "require": {
                        "heroku-sys\/php": ">=5.3.9"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "swiftmailer\/swiftmailer",
                    "version": "v5.4.1",
                    "require": {
                        "heroku-sys\/php": ">=5.3.3"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "symfony\/browser-kit",
                    "version": "v2.8.3",
                    "require": {
                        "heroku-sys\/php": ">=5.3.9"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "symfony\/console",
                    "version": "v2.7.10",
                    "require": {
                        "heroku-sys\/php": ">=5.3.9"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "symfony\/css-selector",
                    "version": "v2.7.10",
                    "require": {
                        "heroku-sys\/php": ">=5.3.9"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "symfony\/debug",
                    "version": "v2.7.10",
                    "require": {
                        "heroku-sys\/php": ">=5.3.9"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "symfony\/dom-crawler",
                    "version": "v2.7.10",
                    "require": {
                        "heroku-sys\/php": ">=5.3.9"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "symfony\/event-dispatcher",
                    "version": "v2.8.3",
                    "require": {
                        "heroku-sys\/php": ">=5.3.9"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "symfony\/finder",
                    "version": "v2.7.10",
                    "require": {
                        "heroku-sys\/php": ">=5.3.9"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "symfony\/http-foundation",
                    "version": "v2.7.10",
                    "require": {
                        "heroku-sys\/php": ">=5.3.9"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "symfony\/http-kernel",
                    "version": "v2.7.10",
                    "require": {
                        "heroku-sys\/php": ">=5.3.9"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "symfony\/polyfill-php56",
                    "version": "v1.1.1",
                    "require": {
                        "heroku-sys\/php": ">=5.3.3"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "symfony\/polyfill-util",
                    "version": "v1.1.1",
                    "require": {
                        "heroku-sys\/php": ">=5.3.3"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "symfony\/process",
                    "version": "v2.7.10",
                    "require": {
                        "heroku-sys\/php": ">=5.3.9"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "symfony\/routing",
                    "version": "v2.7.10",
                    "require": {
                        "heroku-sys\/php": ">=5.3.9"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "symfony\/translation",
                    "version": "v2.7.10",
                    "require": {
                        "heroku-sys\/php": ">=5.3.9"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "symfony\/var-dumper",
                    "version": "v2.7.10",
                    "require": {
                        "heroku-sys\/php": ">=5.3.9"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "twilio\/sdk",
                    "version": "4.10.0",
                    "require": {
                        "heroku-sys\/php": ">=5.2.1"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "tymon\/jwt-auth",
                    "version": "0.5.9",
                    "require": {
                        "heroku-sys\/php": ">=5.4.0"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "vinkla\/algolia",
                    "version": "2.2.1",
                    "require": {
                        "heroku-sys\/php": "^5.5.9 || ^7.0"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "vlucas\/phpdotenv",
                    "version": "v1.1.1",
                    "require": {
                        "heroku-sys\/php": ">=5.3.2"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "zircote\/swagger-php",
                    "version": "2.0.6",
                    "require": {
                        "heroku-sys\/php": ">=5.4.0"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                },
                {
                    "type": "metapackage",
                    "name": "composer.json\/composer.lock",
                    "version": "dev-9206c0799c01f2eb16f18efa00210bb6",
                    "require": {
                        "heroku-sys\/php": ">=5.5.9",
                        "heroku-sys\/ext-gd": "*",
                        "heroku-sys\/ext-exif": "*",
                        "heroku-sys\/ext-fileinfo": "*"
                    },
                    "replace": [],
                    "provide": [],
                    "conflict": []
                }
            ]
        }
    ],
    "require": {
        "composer.json\/composer.lock": "dev-9206c0799c01f2eb16f18efa00210bb6",
        "algolia\/algoliasearch-client-php": "1.8.1",
        "algolia\/algoliasearch-laravel": "1.0.10",
        "asm89\/stack-cors": "0.2.1",
        "aws\/aws-sdk-php": "3.15.9",
        "aws\/aws-sdk-php-laravel": "3.1.0",
        "barryvdh\/laravel-cors": "v0.7.3",
        "bookingsync\/oauth2-bookingsync-php": "0.1.3",
        "classpreloader\/classpreloader": "3.0.0",
        "danielstjules\/stringy": "1.10.0",
        "dnoegel\/php-xdg-base-dir": "0.1",
        "doctrine\/annotations": "v1.2.7",
        "doctrine\/cache": "v1.6.0",
        "doctrine\/collections": "v1.3.0",
        "doctrine\/common": "v2.6.1",
        "doctrine\/dbal": "v2.5.4",
        "doctrine\/inflector": "v1.1.0",
        "doctrine\/lexer": "v1.0.1",
        "fabpot\/goutte": "v3.1.2",
        "graham-campbell\/manager": "v2.3.1",
        "guzzle\/guzzle": "v3.9.3",
        "guzzlehttp\/guzzle": "6.1.1",
        "guzzlehttp\/promises": "1.1.0",
        "guzzlehttp\/psr7": "1.2.3",
        "intercom\/intercom-php": "v1.4.0",
        "intervention\/image": "2.3.6",
        "jakub-onderka\/php-console-color": "0.1",
        "jakub-onderka\/php-console-highlighter": "v0.3.2",
        "jeremeamia\/SuperClosure": "2.2.0",
        "jlapp\/swaggervel": "dev-master",
        "laravel\/framework": "v5.1.31",
        "laravelcollective\/html": "v5.1.9",
        "league\/flysystem": "1.0.19",
        "league\/flysystem-aws-s3-v3": "1.0.9",
        "league\/fractal": "0.13.0",
        "league\/glide": "1.0.0",
        "league\/oauth2-client": "0.12.1",
        "mindscape\/raygun4php": "dev-master",
        "monolog\/monolog": "1.18.1",
        "mtdowling\/cron-expression": "v1.1.0",
        "mtdowling\/jmespath.php": "2.3.0",
        "namshi\/jose": "5.0.2",
        "nesbot\/carbon": "1.21.0",
        "nikic\/php-parser": "v2.0.1",
        "orangehill\/iseed": "dev-master",
        "paragonie\/random_compat": "v1.2.2",
        "phpseclib\/phpseclib": "0.3.10",
        "predis\/predis": "v1.0.3",
        "psr\/http-message": "1.0",
        "psy\/psysh": "v0.7.2",
        "swiftmailer\/swiftmailer": "v5.4.1",
        "symfony\/browser-kit": "v2.8.3",
        "symfony\/console": "v2.7.10",
        "symfony\/css-selector": "v2.7.10",
        "symfony\/debug": "v2.7.10",
        "symfony\/dom-crawler": "v2.7.10",
        "symfony\/event-dispatcher": "v2.8.3",
        "symfony\/finder": "v2.7.10",
        "symfony\/http-foundation": "v2.7.10",
        "symfony\/http-kernel": "v2.7.10",
        "symfony\/polyfill-php56": "v1.1.1",
        "symfony\/polyfill-util": "v1.1.1",
        "symfony\/process": "v2.7.10",
        "symfony\/routing": "v2.7.10",
        "symfony\/translation": "v2.7.10",
        "symfony\/var-dumper": "v2.7.10",
        "twilio\/sdk": "4.10.0",
        "tymon\/jwt-auth": "0.5.9",
        "vinkla\/algolia": "2.2.1",
        "vlucas\/phpdotenv": "v1.1.1",
        "zircote\/swagger-php": "2.0.6",
        "heroku-sys\/apache": "^2.4.10",
        "heroku-sys\/nginx": "~1.8.0",
        "heroku-sys/ext-blackfire": "*"
    }
}

I understand these are extreme cases (generated by code, not humans), and the quick workaround is to have the require section before the big repositories chunk, but maybe the regexes in JsonManipulator should/could be more… efficient? 😃

About this issue

  • Original URL
  • State: closed
  • Created 8 years ago
  • Comments: 16 (16 by maintainers)

Commits related to this issue

Most upvoted comments

Just to add some closure here, I did the switch over to this new pattern 5ee22f25ba2163d79df4c2b67a3b4fb29e8532af

Found a way to fix the current patterns, but we discussed with @dzuelke and he’s working on cleaning it up with a more readable regex from http://stackoverflow.com/questions/2583472/regex-to-validate-json/3845829#3845829 which would be a cool improvement 😃