diff options
author | Jonathan Tran <jon@allspice.io> | 2023-06-13 02:44:47 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-06-13 14:44:47 +0800 |
commit | f62cd2f4738c1b3cf7c31e8b98702a709bdd4072 (patch) | |
tree | 17dac9b30739851d0a90b848f79f726c05659979 /web_src/js/markup | |
parent | 419804fd4d5cb655a51f245010b8eb1163b26bc2 (diff) | |
download | gitea-f62cd2f4738c1b3cf7c31e8b98702a709bdd4072.tar.gz gitea-f62cd2f4738c1b3cf7c31e8b98702a709bdd4072.zip |
Fix task list checkbox toggle to work with YAML front matter (#25184)
Fixes #25160.
`data-source-position` of checkboxes in a task list was incorrect
whenever there was YAML front matter. This would result in issue content
or PR descriptions getting corrupted with random `x` or space characters
when a user checked or unchecked a task.
Diffstat (limited to 'web_src/js/markup')
-rw-r--r-- | web_src/js/markup/tasklist.js | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/web_src/js/markup/tasklist.js b/web_src/js/markup/tasklist.js index 0f03837baa..ad1c6964a7 100644 --- a/web_src/js/markup/tasklist.js +++ b/web_src/js/markup/tasklist.js @@ -29,6 +29,14 @@ export function initMarkupTasklist() { const encoder = new TextEncoder(); const buffer = encoder.encode(oldContent); + // Indexes may fall off the ends and return undefined. + if (buffer[position - 1] !== '['.codePointAt(0) || + buffer[position] !== ' '.codePointAt(0) && buffer[position] !== 'x'.codePointAt(0) || + buffer[position + 1] !== ']'.codePointAt(0)) { + // Position is probably wrong. Revert and don't allow change. + checkbox.checked = !checkbox.checked; + throw new Error(`Expected position to be space or x and surrounded by brackets, but it's not: position=${position}`); + } buffer.set(encoder.encode(checkboxCharacter), position); const newContent = new TextDecoder().decode(buffer); |