summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gst/subparse/gstsubparse.c19
1 files changed, 14 insertions, 5 deletions
diff --git a/gst/subparse/gstsubparse.c b/gst/subparse/gstsubparse.c
index 5dadb0a33..e3069399d 100644
--- a/gst/subparse/gstsubparse.c
+++ b/gst/subparse/gstsubparse.c
@@ -683,15 +683,24 @@ subrip_unescape_formatting (gchar * txt)
}
for (pos = txt; pos != NULL && *pos != '\0'; ++pos) {
- if (g_ascii_strncasecmp (pos, "</u>", 10) == 0 ||
- g_ascii_strncasecmp (pos, "</i>", 10) == 0 ||
- g_ascii_strncasecmp (pos, "</b>", 10) == 0) {
+ gchar *tag;
+
+ /* look for start of an escaped closing tag */
+ if (g_ascii_strncasecmp (pos, "</", 5) != 0)
+ continue;
+ tag = pos + 5;
+ while (*tag == ' ')
+ ++tag;
+ if ((*tag == 'u' || *tag == 'i' || *tag == 'b') &&
+ g_ascii_strncasecmp (tag + 1, ">", 4) == 0) {
+ gsize tag_len = (guintptr) (tag + 1 + 4 - pos);
+
pos[0] = '<';
pos[1] = '/';
- pos[2] = g_ascii_tolower (pos[5]);
+ pos[2] = g_ascii_tolower (*tag);
pos[3] = '>';
/* move NUL terminator as well */
- memmove (pos + 4, pos + 10, strlen (pos + 10) + 1);
+ memmove (pos + 4, pos + tag_len, strlen (pos + tag_len) + 1);
pos += 3;
}
}