subrip: Throw errors when reading invalid timestamps.
[srt2vtt.git] / srt2vtt / subrip.scm
index 167aff804a4b1d8c8b24f3902ce425c1e4f2f350..44f118e8752223e614ad35d437f6203aaea729fc 100644 (file)
             read-subrips))
 
 (define parse-time
-  (let ((regexp (make-regexp "([0-9]+):([0-9]+):([0-9]+),([0-9]+)")))
+  (let ((regexp (make-regexp "^([0-9]+):([0-9]+):([0-9]+),([0-9]+)$")))
     (lambda (s)
       "Parse the SubRip formatted timestamp in the string S into a 4
 element list.  Valid input looks like '00:00:03.417'."
       (let ((match (regexp-exec regexp s)))
-        (map (cut match:substring match <>) '(1 2 3 4))))))
+        (if match
+            (map (cut match:substring match <>) '(1 2 3 4))
+            (error "Invalid SubRip timestamp: " s))))))
 
 (define parse-time-span
-  (let ((regexp (make-regexp "([0-9:,]+) --> ([0-9:,]+)")))
+  (let ((regexp (make-regexp "^([0-9:,]+) --> ([0-9:,]+)$")))
     (lambda (s)
       "Parse the SubRip formatted time span in the string S and return
 two values: the start time and the end time.  Valid input looks like
 '00:00:03.417 --> 00:00:04.936'."
       (let ((match (regexp-exec regexp s)))
-        (values (parse-time (match:substring match 1))
-                (parse-time (match:substring match 2)))))))
+        (if match
+            (values (parse-time (match:substring match 1))
+                    (parse-time (match:substring match 2)))
+            (error "Invalid SubRip time range: " s))))))
 
 (define (read-subrip port)
   "Read a SubRip formatted subtitle from PORT."