1
0
mirror of https://github.com/laurent22/joplin.git synced 2024-12-24 10:27:10 +02:00

Merge branch 'release-3.0' into dev

This commit is contained in:
Laurent Cozic 2024-08-23 09:52:04 +01:00
commit fe89b1cf21
5 changed files with 39 additions and 0 deletions

View File

@ -0,0 +1,2 @@
<div class="jop-noMdConv">
&lt;.a

View File

@ -0,0 +1,2 @@
<div>
<.a<iframe src="http://example.com/" >

View File

@ -54,6 +54,8 @@ index 44b4371..bcd7cc2 100644
if (this._cbs.onend) if (this._cbs.onend)
``` ```
To fix an HTML parsing issue (tags were allowed to start with non-alphanumeric characters), [this upstream commit](https://github.com/fb55/htmlparser2/commit/bc010de9df09f2d730a69734e05e5175ea8bd2d7) has also been applied.
* * * * * *
# htmlparser2 # htmlparser2

View File

@ -32,6 +32,7 @@ const enum State {
//comments //comments
BeforeComment, BeforeComment,
InComment, InComment,
InSpecialComment,
AfterComment1, AfterComment1,
AfterComment2, AfterComment2,
@ -87,6 +88,10 @@ function whitespace(c: string): boolean {
return c === " " || c === "\n" || c === "\t" || c === "\f" || c === "\r"; return c === " " || c === "\n" || c === "\t" || c === "\f" || c === "\r";
} }
function isASCIIAlpha(c: string): boolean {
return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z');
}
interface Callbacks { interface Callbacks {
onattribdata(value: string): void; //TODO implement the new event onattribdata(value: string): void; //TODO implement the new event
onattribend(): void; onattribend(): void;
@ -282,6 +287,8 @@ export default class Tokenizer {
} else if (c === "?") { } else if (c === "?") {
this._state = State.InProcessingInstruction; this._state = State.InProcessingInstruction;
this._sectionStart = this._index + 1; this._sectionStart = this._index + 1;
} else if (!isASCIIAlpha(c)) {
this._state = State.Text;
} else { } else {
this._state = this._state =
!this._xmlMode && (c === "s" || c === "S") !this._xmlMode && (c === "s" || c === "S")
@ -309,6 +316,9 @@ export default class Tokenizer {
this._state = State.Text; this._state = State.Text;
this._index--; this._index--;
} }
} else if (!isASCIIAlpha(c)) {
this._state = State.InSpecialComment;
this._sectionStart = this._index;
} else { } else {
this._state = State.InClosingTagName; this._state = State.InClosingTagName;
this._sectionStart = this._index; this._sectionStart = this._index;
@ -454,6 +464,15 @@ export default class Tokenizer {
_stateInComment(c: string) { _stateInComment(c: string) {
if (c === "-") this._state = State.AfterComment1; if (c === "-") this._state = State.AfterComment1;
} }
_stateInSpecialComment(c: string) {
if (c === ">") {
this._cbs.oncomment(
this._buffer.substring(this._sectionStart, this._index)
);
this._state = State.Text;
this._sectionStart = this._index + 1;
}
}
_stateAfterComment1(c: string) { _stateAfterComment1(c: string) {
if (c === "-") { if (c === "-") {
this._state = State.AfterComment2; this._state = State.AfterComment2;
@ -702,6 +721,8 @@ export default class Tokenizer {
this._stateInAttributeName(c); this._stateInAttributeName(c);
} else if (this._state === State.InComment) { } else if (this._state === State.InComment) {
this._stateInComment(c); this._stateInComment(c);
} else if (this._state === State.InSpecialComment) {
this._stateInSpecialComment(c);
} else if (this._state === State.BeforeAttributeName) { } else if (this._state === State.BeforeAttributeName) {
this._stateBeforeAttributeName(c); this._stateBeforeAttributeName(c);
} else if (this._state === State.InTagName) { } else if (this._state === State.InTagName) {

View File

@ -0,0 +1,12 @@
{
"name": "tag names are not ASCII alpha",
"options": {
"parser": {}
},
"html": "<12>text</12>",
"expected": [
{ "event": "text", "data": ["<12>text"] },
{ "event": "comment", "data": ["12"] },
{ "event": "commentend", "data": [] }
]
}