From ef97e8b07d8350106c940f23679444b698832067 Mon Sep 17 00:00:00 2001 From: Evan You Date: Tue, 28 Nov 2023 18:31:17 +0800 Subject: [PATCH] fix(parser): should reset inRCDATA state --- packages/compiler-core/__tests__/parse.spec.ts | 6 ++++++ packages/compiler-core/src/tokenizer.ts | 1 + 2 files changed, 7 insertions(+) diff --git a/packages/compiler-core/__tests__/parse.spec.ts b/packages/compiler-core/__tests__/parse.spec.ts index a116d22c14..4e6c80b38e 100644 --- a/packages/compiler-core/__tests__/parse.spec.ts +++ b/packages/compiler-core/__tests__/parse.spec.ts @@ -1952,6 +1952,12 @@ describe('compiler: parse', () => { }) }) + // edge case found in vue-macros where the input is TS or JSX + test('should reset inRCDATA state', () => { + baseParse(``, { parseMode: 'sfc', onError() {} }) + expect(() => baseParse(`{ foo }`)).not.toThrow() + }) + describe('decodeEntities option', () => { test('use decode by default', () => { const ast: any = baseParse('><&'"&foo;') diff --git a/packages/compiler-core/src/tokenizer.ts b/packages/compiler-core/src/tokenizer.ts index 3a25c1c2d3..ea6d0592e0 100644 --- a/packages/compiler-core/src/tokenizer.ts +++ b/packages/compiler-core/src/tokenizer.ts @@ -271,6 +271,7 @@ export default class Tokenizer { this.sectionStart = 0 this.index = 0 this.baseState = State.Text + this.inRCDATA = false this.currentSequence = undefined! this.newlines.length = 0 this.delimiterOpen = defaultDelimitersOpen -- 2.47.3