Skip to content

Commit 19144b0

Browse files
authored
fix: add validation around disallowed sequence expressions to element attributes (#11149)
1 parent 15eb5b5 commit 19144b0

File tree

4 files changed

+30
-1
lines changed

4 files changed

+30
-1
lines changed

.changeset/fresh-dots-destroy.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"svelte": patch
3+
---
4+
5+
fix: add validation around disallowed sequence expressions to element attributes

packages/svelte/src/compiler/phases/2-analyze/validation.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,12 @@ function validate_element(node, context) {
9898
if (context.state.analysis.runes && is_expression) {
9999
const expression = attribute.value[0].expression;
100100
if (expression.type === 'SequenceExpression') {
101-
error(expression, 'invalid-sequence-expression');
101+
let i = /** @type {number} */ (expression.start);
102+
while (--i > 0) {
103+
const char = context.state.analysis.source[i];
104+
if (char === '(') break; // parenthesized sequence expressions are ok
105+
if (char === '{') error(expression, 'invalid-sequence-expression');
106+
}
102107
}
103108
}
104109

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { test } from '../../test';
2+
3+
export default test({
4+
error: {
5+
code: 'invalid-sequence-expression',
6+
message:
7+
'Sequence expressions are not allowed as attribute/directive values in runes mode, unless wrapped in parentheses',
8+
position: [124, 131]
9+
}
10+
});
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<script>
2+
let { x, y, z } = $props();
3+
</script>
4+
5+
<!-- allowed -->
6+
<span foo={(x, y, z)} />
7+
8+
<!-- not allowed -->
9+
<span foo={x, y, z} />

0 commit comments

Comments
 (0)