Skip to content

Commit 267bf00

Browse files
authored
Merge pull request #166 from cebe/reduce-dots-current-dir
Added failing test for #164
2 parents 1bee348 + bbc5720 commit 267bf00

File tree

3 files changed

+28
-4
lines changed

3 files changed

+28
-4
lines changed

Makefile

+1-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ fix-style: php-cs-fixer.phar
4040
cli:
4141
docker-compose run --rm php bash
4242

43-
install:
43+
install: composer.json package.json
4444
$(DOCKER_PHP) composer install --prefer-dist --no-interaction --no-progress --ansi
4545
$(DOCKER_NODE) yarn install
4646

src/ReferenceContext.php

+11-3
Original file line numberDiff line numberDiff line change
@@ -121,10 +121,18 @@ private function reduceDots($path)
121121
unset($parts[$i]);
122122
continue;
123123
}
124-
if ($i > 0 && $parts[$i] === '..' && $parts[$i - $parentOffset] !== '..') {
125-
unset($parts[$i - $parentOffset]);
124+
125+
if ($i > 0 && $parts[$i] === '..') {
126+
$parent = $i - $parentOffset;
127+
//Make sure parent exists, if not, check the next parent etc
128+
while($parent >= 0 && empty($parts[$parent])){
129+
$parent--;
130+
}
131+
//Confirm parent is valid
132+
if(!empty($parts[$parent]) && $parts[$parent] !== '..'){
133+
unset($parts[$parent]);
134+
}
126135
unset($parts[$i]);
127-
$parentOffset += 2;
128136
}
129137
}
130138
return '/'.implode('/', $parts);

tests/ReferenceContextTest.php

+16
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,22 @@ public function normalizeUriProvider()
179179
'/var/www/api/../definitions.yaml',
180180
'file:///var/www/definitions.yaml',
181181
],
182+
[
183+
'/./definitions.yaml',
184+
'file:///definitions.yaml',
185+
],
186+
[
187+
'/var/www/api/schema/../../definitions.yaml',
188+
'file:///var/www/definitions.yaml',
189+
],
190+
[
191+
'/var/www/api/schema/./../data/./../definitions.yaml',
192+
'file:///var/www/api/definitions.yaml',
193+
],
194+
[
195+
'/var/www/api/schema/./../definitions.yaml',
196+
'file:///var/www/api/definitions.yaml',
197+
],
182198
[
183199
'/var/www/api/../definitions.yaml#/components/Pet',
184200
'file:///var/www/definitions.yaml#/components/Pet',

0 commit comments

Comments
 (0)