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',