subparse: detect closing tags even if there's a space after the slash

</ i> should be handled like </i>

https://bugzilla.gnome.org/show_bug.cgi?id=755875
This commit is contained in:
Tim-Philipp Müller 2015-09-30 18:17:13 +01:00
parent c5c2466d36
commit 7fb9cd453b

View file

@ -683,15 +683,24 @@ subrip_unescape_formatting (gchar * txt)
} }
for (pos = txt; pos != NULL && *pos != '\0'; ++pos) { for (pos = txt; pos != NULL && *pos != '\0'; ++pos) {
if (g_ascii_strncasecmp (pos, "&lt;/u&gt;", 10) == 0 || gchar *tag;
g_ascii_strncasecmp (pos, "&lt;/i&gt;", 10) == 0 ||
g_ascii_strncasecmp (pos, "&lt;/b&gt;", 10) == 0) { /* look for start of an escaped closing tag */
if (g_ascii_strncasecmp (pos, "&lt;/", 5) != 0)
continue;
tag = pos + 5;
while (*tag == ' ')
++tag;
if ((*tag == 'u' || *tag == 'i' || *tag == 'b') &&
g_ascii_strncasecmp (tag + 1, "&gt;", 4) == 0) {
gsize tag_len = (guintptr) (tag + 1 + 4 - pos);
pos[0] = '<'; pos[0] = '<';
pos[1] = '/'; pos[1] = '/';
pos[2] = g_ascii_tolower (pos[5]); pos[2] = g_ascii_tolower (*tag);
pos[3] = '>'; pos[3] = '>';
/* move NUL terminator as well */ /* 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; pos += 3;
} }
} }