Skip to content

Commit 10de667

Browse files
committed
Merge branch '7.3' into 7.4
* 7.3: register attribute loader arguments in a forward-compatible way ensure compatibility with RelayCluster 0.20.0 mark test using a Redis connection as an integration test ensure compatibility with Relay extension 0.20.0 [DependencyInjection] Fix `query_string` env processor for URLs without query string [HttpFoundation] Fix Expires response header for EventStream [DependencyInjection] Fix state corruption in PhpFileLoader during recursive imports [FrameworkBundle] Add missing `useAttributeAsKey` calls [DependencyInjection] Fix loose validation in #[Autowire] attribute [HttpClient] Fix releasing uploaded stream resources Fix JsonPath throwing on quoted True/False/Null
2 parents 226358a + 05b0d78 commit 10de667

File tree

3 files changed

+171
-1
lines changed

3 files changed

+171
-1
lines changed

Tests/Fixtures/cts.json

Lines changed: 156 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4354,6 +4354,58 @@
43544354
"case"
43554355
]
43564356
},
4357+
{
4358+
"name": "filter, quoted True, double quotes",
4359+
"selector": "$[?@.a==\"True\"]",
4360+
"document": [
4361+
{
4362+
"a": "True"
4363+
},
4364+
{
4365+
"a": true
4366+
},
4367+
{
4368+
"a": "SomethingElse"
4369+
}
4370+
],
4371+
"result": [
4372+
{
4373+
"a": "True"
4374+
}
4375+
],
4376+
"result_paths": [
4377+
"$[0]"
4378+
],
4379+
"tags": [
4380+
"case"
4381+
]
4382+
},
4383+
{
4384+
"name": "filter, quoted True, single quotes",
4385+
"selector": "$[?@.a=='True']",
4386+
"document": [
4387+
{
4388+
"a": "True"
4389+
},
4390+
{
4391+
"a": true
4392+
},
4393+
{
4394+
"a": "SomethingElse"
4395+
}
4396+
],
4397+
"result": [
4398+
{
4399+
"a": "True"
4400+
}
4401+
],
4402+
"result_paths": [
4403+
"$[0]"
4404+
],
4405+
"tags": [
4406+
"case"
4407+
]
4408+
},
43574409
{
43584410
"name": "filter, false, incorrectly capitalized",
43594411
"selector": "$[?@==False]",
@@ -4362,6 +4414,58 @@
43624414
"case"
43634415
]
43644416
},
4417+
{
4418+
"name": "filter, quoted False, double quotes",
4419+
"selector": "$[?@.a==\"False\"]",
4420+
"document": [
4421+
{
4422+
"a": "False"
4423+
},
4424+
{
4425+
"a": false
4426+
},
4427+
{
4428+
"a": "SomethingElse"
4429+
}
4430+
],
4431+
"result": [
4432+
{
4433+
"a": "False"
4434+
}
4435+
],
4436+
"result_paths": [
4437+
"$[0]"
4438+
],
4439+
"tags": [
4440+
"case"
4441+
]
4442+
},
4443+
{
4444+
"name": "filter, quoted False, single quotes",
4445+
"selector": "$[?@.a=='False']",
4446+
"document": [
4447+
{
4448+
"a": "False"
4449+
},
4450+
{
4451+
"a": false
4452+
},
4453+
{
4454+
"a": "SomethingElse"
4455+
}
4456+
],
4457+
"result": [
4458+
{
4459+
"a": "False"
4460+
}
4461+
],
4462+
"result_paths": [
4463+
"$[0]"
4464+
],
4465+
"tags": [
4466+
"case"
4467+
]
4468+
},
43654469
{
43664470
"name": "filter, null, incorrectly capitalized",
43674471
"selector": "$[?@==Null]",
@@ -4370,6 +4474,58 @@
43704474
"case"
43714475
]
43724476
},
4477+
{
4478+
"name": "filter, quoted Null, double quotes",
4479+
"selector": "$[?@.a==\"Null\"]",
4480+
"document": [
4481+
{
4482+
"a": "Null"
4483+
},
4484+
{
4485+
"a": null
4486+
},
4487+
{
4488+
"a": "SomethingElse"
4489+
}
4490+
],
4491+
"result": [
4492+
{
4493+
"a": "Null"
4494+
}
4495+
],
4496+
"result_paths": [
4497+
"$[0]"
4498+
],
4499+
"tags": [
4500+
"case"
4501+
]
4502+
},
4503+
{
4504+
"name": "filter, quoted Null, single quotes",
4505+
"selector": "$[?@.a=='Null']",
4506+
"document": [
4507+
{
4508+
"a": "Null"
4509+
},
4510+
{
4511+
"a": null
4512+
},
4513+
{
4514+
"a": "SomethingElse"
4515+
}
4516+
],
4517+
"result": [
4518+
{
4519+
"a": "Null"
4520+
}
4521+
],
4522+
"result_paths": [
4523+
"$[0]"
4524+
],
4525+
"tags": [
4526+
"case"
4527+
]
4528+
},
43734529
{
43744530
"name": "index selector, first element",
43754531
"selector": "$[0]",

Tests/Tokenizer/JsonPathTokenizerTest.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -349,4 +349,18 @@ public static function provideInvalidUtf8PropertyName(): array
349349
'dash sign' => ['-test'],
350350
];
351351
}
352+
353+
public function testQuotedTrueFalseNullShouldNotThrow()
354+
{
355+
foreach (['True', 'False', 'Null'] as $value) {
356+
JsonPathTokenizer::tokenize(
357+
new JsonPath(\sprintf('$[?@.a=="%s"]', $value))
358+
);
359+
JsonPathTokenizer::tokenize(
360+
new JsonPath(\sprintf('$[?@.a==\'%s\']', $value))
361+
);
362+
}
363+
364+
$this->expectNotToPerformAssertions();
365+
}
352366
}

Tokenizer/JsonPathTokenizer.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -355,7 +355,7 @@ private static function validateBareLiterals(string $expr, int $position): void
355355
$filterExpr = ltrim($expr, '?');
356356
$filterExpr = trim($filterExpr);
357357

358-
if (preg_match('/\b(True|False|Null)\b/', $filterExpr)) {
358+
if (preg_match('/(?<!["\'])\b(True|False|Null)\b(?!["\'])/', $filterExpr)) {
359359
throw new InvalidJsonPathException('Incorrectly capitalized literal in filter expression.', $position);
360360
}
361361

0 commit comments

Comments
 (0)