From 2b26ea1aa33e478f55a3e717f8eec7a669870fe6 Mon Sep 17 00:00:00 2001 From: Carsten Brandt Date: Fri, 22 Jul 2022 22:41:35 +0200 Subject: [PATCH 1/3] Added failing test for #164 --- Makefile | 2 +- tests/ReferenceContextTest.php | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index add949a6..7d9358f0 100644 --- a/Makefile +++ b/Makefile @@ -40,7 +40,7 @@ fix-style: php-cs-fixer.phar cli: docker-compose run --rm php bash -install: +install: composer.json package.json $(DOCKER_PHP) composer install --prefer-dist --no-interaction --no-progress --ansi $(DOCKER_NODE) yarn install diff --git a/tests/ReferenceContextTest.php b/tests/ReferenceContextTest.php index b06eb5fc..40e65baf 100644 --- a/tests/ReferenceContextTest.php +++ b/tests/ReferenceContextTest.php @@ -179,6 +179,14 @@ public function normalizeUriProvider() '/var/www/api/../definitions.yaml', 'file:///var/www/definitions.yaml', ], + [ + '/var/www/api/schema/../../definitions.yaml', + 'file:///var/www/definitions.yaml', + ], + [ + '/var/www/api/schema/./../definitions.yaml', + 'file:///var/www/api/definitions.yaml', + ], [ '/var/www/api/../definitions.yaml#/components/Pet', 'file:///var/www/definitions.yaml#/components/Pet', From 705e08275d1c9d9eef1622e026720f5f98d13885 Mon Sep 17 00:00:00 2001 From: Arinzechukwu Date: Fri, 28 Jul 2023 16:49:47 +0100 Subject: [PATCH 2/3] Fixed issues with relative path reference parsing --- src/ReferenceContext.php | 16 ++++++++++++---- tests/ReferenceContextTest.php | 6 +++++- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/ReferenceContext.php b/src/ReferenceContext.php index bde0a964..302e00ce 100644 --- a/src/ReferenceContext.php +++ b/src/ReferenceContext.php @@ -121,10 +121,18 @@ private function reduceDots($path) unset($parts[$i]); continue; } - if ($i > 0 && $parts[$i] === '..' && $parts[$i - $parentOffset] !== '..') { - unset($parts[$i - $parentOffset]); - unset($parts[$i]); - $parentOffset += 2; + + if ($i > 0 && $parts[$i] === '..') { + $parent = $i - $parentOffset; + //Make sure parent exists, if not, check the next parent etc + while($parent >= 0 && empty($parts[$parent])){ + $parent--; + } + //Confirm parent is valid + if(!empty($parts[$parent]) && $parts[$parent] !== '..'){ + unset($parts[$parent]); + unset($parts[$i]); + } } } return '/'.implode('/', $parts); diff --git a/tests/ReferenceContextTest.php b/tests/ReferenceContextTest.php index 40e65baf..bd450bc5 100644 --- a/tests/ReferenceContextTest.php +++ b/tests/ReferenceContextTest.php @@ -183,10 +183,14 @@ public function normalizeUriProvider() '/var/www/api/schema/../../definitions.yaml', 'file:///var/www/definitions.yaml', ], + [ + '/var/www/api/schema/./../data/./../definitions.yaml', + 'file:///var/www/api/definitions.yaml', + ], [ '/var/www/api/schema/./../definitions.yaml', 'file:///var/www/api/definitions.yaml', - ], + ], [ '/var/www/api/../definitions.yaml#/components/Pet', 'file:///var/www/definitions.yaml#/components/Pet', From bbc57204ca2055fd5f86fbf148b97ea47e6dd63c Mon Sep 17 00:00:00 2001 From: Arinzechukwu Date: Mon, 31 Jul 2023 15:06:26 +0100 Subject: [PATCH 3/3] Fixed issues with reducing url dots --- src/ReferenceContext.php | 2 +- tests/ReferenceContextTest.php | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/ReferenceContext.php b/src/ReferenceContext.php index 302e00ce..6c3a4f18 100644 --- a/src/ReferenceContext.php +++ b/src/ReferenceContext.php @@ -131,8 +131,8 @@ private function reduceDots($path) //Confirm parent is valid if(!empty($parts[$parent]) && $parts[$parent] !== '..'){ unset($parts[$parent]); - unset($parts[$i]); } + unset($parts[$i]); } } return '/'.implode('/', $parts); diff --git a/tests/ReferenceContextTest.php b/tests/ReferenceContextTest.php index bd450bc5..dad12c1f 100644 --- a/tests/ReferenceContextTest.php +++ b/tests/ReferenceContextTest.php @@ -179,6 +179,10 @@ public function normalizeUriProvider() '/var/www/api/../definitions.yaml', 'file:///var/www/definitions.yaml', ], + [ + '/./definitions.yaml', + 'file:///definitions.yaml', + ], [ '/var/www/api/schema/../../definitions.yaml', 'file:///var/www/definitions.yaml',