From d19a709dce307c408de289512c41e7983188e84e Mon Sep 17 00:00:00 2001 From: Arinzechukwu <meet.arinze@gmail.com> Date: Fri, 28 Jul 2023 16:49:47 +0100 Subject: [PATCH 1/2] 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 bde0a96..302e00c 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 40e65ba..bd450bc 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 159cbf6be0171c86b3fde50911526627557e446a Mon Sep 17 00:00:00 2001 From: Arinzechukwu <meet.arinze@gmail.com> Date: Mon, 31 Jul 2023 15:06:26 +0100 Subject: [PATCH 2/2] 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 302e00c..6c3a4f1 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 bd450bc..dad12c1 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',