From: Evan You Date: Tue, 28 Nov 2023 10:31:17 +0000 (+0800) Subject: fix(parser): should reset inRCDATA state X-Git-Tag: v3.4.0-alpha.4~15 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=ef97e8b07d8350106c940f23679444b698832067;p=thirdparty%2Fvuejs%2Fcore.git fix(parser): should reset inRCDATA state --- 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