Fix bad parsing of ASS lines embedded into FFmpeg files and containing commas.
authorCarl Hetherington <cth@carlh.net>
Sat, 9 Jun 2018 22:57:00 +0000 (23:57 +0100)
committerCarl Hetherington <cth@carlh.net>
Sat, 9 Jun 2018 22:57:00 +0000 (23:57 +0100)
ChangeLog
src/lib/ffmpeg_decoder.cc

index 85b0f21a9b803334a69a7e452abd6f97f42c1348..7f4c185f21cf40443acfde09a4a6d8096b83e24e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,8 +1,11 @@
 2018-06-09  Carl Hetherington  <cth@carlh.net>
 
+       * Fix bad parsing of ASS lines embedded into FFmpeg files
+       and containing commas.
+
        * Add option to open a DCP in the player (#1312).
 
-a2018-06-08  Carl Hetherington  <cth@carlh.net>
+2018-06-08  Carl Hetherington  <cth@carlh.net>
 
        * Add support for rotation and flipping of video sources,
        and auto-detect when this is necessary (#966).
index 6a8f4d4136dab4322b4b7713536b4e6019b09852..0746458e58fd5be806a75566b398772ad33ff618 100644 (file)
@@ -679,16 +679,24 @@ FFmpegDecoder::decode_ass_subtitle (string ass, ContentTime from)
           produces a single format of Dialogue: lines...
        */
 
-       vector<string> bits;
-       split (bits, ass, is_any_of (","));
-       if (bits.size() < 10) {
+       int commas = 0;
+       string text;
+       for (size_t i = 0; i < ass.length(); ++i) {
+               if (commas < 9 && ass[i] == ',') {
+                       ++commas;
+               } else if (commas == 9) {
+                       text += ass[i];
+               }
+       }
+
+       if (text.empty ()) {
                return;
        }
 
        sub::RawSubtitle base;
        list<sub::RawSubtitle> raw = sub::SSAReader::parse_line (
                base,
-               bits[9],
+               text,
                _ffmpeg_content->video->size().width,
                _ffmpeg_content->video->size().height
                );