diff options
| author | Samantaz Fox <coding@samantaz.fr> | 2024-02-19 00:03:21 +0100 |
|---|---|---|
| committer | Samantaz Fox <coding@samantaz.fr> | 2024-02-19 00:16:17 +0100 |
| commit | 962ce23cc2ec4d1a5147b9b1e2c1d4d436365d28 (patch) | |
| tree | c9d4e1a0fe1ce645f80a2ca5773d28cccc6cae3e /src | |
| parent | e0ce59d3e8c1230096e680985edac2fa3274e8f1 (diff) | |
| parent | 0ad2eff2a46c28a877de1960a2dc5c15c0f94444 (diff) | |
| download | invidious-962ce23cc2ec4d1a5147b9b1e2c1d4d436365d28.tar.gz invidious-962ce23cc2ec4d1a5147b9b1e2c1d4d436365d28.tar.bz2 invidious-962ce23cc2ec4d1a5147b9b1e2c1d4d436365d28.zip | |
WebVTT::Builder: Add logic to escape special chars (#4414)
Note: WebVTT does allow some tags in the cue payload in some circumstances
while this PR just blindly escapes everything:
https://developer.mozilla.org/en-US/docs/Web/API/WebVTT_API#cue_payload_text_tags
Diffstat (limited to 'src')
| -rw-r--r-- | src/invidious/helpers/webvtt.cr | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/src/invidious/helpers/webvtt.cr b/src/invidious/helpers/webvtt.cr index 56f761ed..260d250f 100644 --- a/src/invidious/helpers/webvtt.cr +++ b/src/invidious/helpers/webvtt.cr @@ -4,13 +4,23 @@ module WebVTT # A WebVTT builder generates WebVTT files private class Builder + # See https://developer.mozilla.org/en-US/docs/Web/API/WebVTT_API#cue_payload + private ESCAPE_SUBSTITUTIONS = { + '&' => "&", + '<' => "<", + '>' => ">", + '\u200E' => "‎", + '\u200F' => "‏", + '\u00A0' => " ", + } + def initialize(@io : IO) end # Writes an vtt cue with the specified time stamp and contents def cue(start_time : Time::Span, end_time : Time::Span, text : String) timestamp(start_time, end_time) - @io << text + @io << self.escape(text) @io << "\n\n" end @@ -29,6 +39,10 @@ module WebVTT @io << '.' << timestamp.milliseconds.to_s.rjust(3, '0') end + private def escape(text : String) : String + return text.gsub(ESCAPE_SUBSTITUTIONS) + end + def document(setting_fields : Hash(String, String)? = nil, &) @io << "WEBVTT\n" |
