summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libass/ass_parse.c10
-rw-r--r--libass/ass_utils.c10
-rw-r--r--libass/ass_utils.h2
3 files changed, 9 insertions, 13 deletions
diff --git a/libass/ass_parse.c b/libass/ass_parse.c
index 47d22e6..afba8a7 100644
--- a/libass/ass_parse.c
+++ b/libass/ass_parse.c
@@ -772,16 +772,10 @@ char *parse_tag(ASS_Renderer *render_priv, char *p, char *end, double pwr)
break;
}
} else if (tag("r")) {
- char *style;
if (nargs) {
- char *start = args->start;
- end = args->end;
- style = malloc(end - start + 1);
- strncpy(style, start, end - start);
- style[end - start] = '\0';
+ int len = args->end - args->start;
reset_render_context(render_priv,
- lookup_style_strict(render_priv->track, style));
- free(style);
+ lookup_style_strict(render_priv->track, args->start, len));
} else
reset_render_context(render_priv, NULL);
} else if (tag("be")) {
diff --git a/libass/ass_utils.c b/libass/ass_utils.c
index c545012..778da80 100644
--- a/libass/ass_utils.c
+++ b/libass/ass_utils.c
@@ -337,19 +337,21 @@ int lookup_style(ASS_Track *track, char *name)
* \brief find style by name as in \r
* \param track track
* \param name style name
+ * \param len style name length
* \return style in track->styles
* Returns NULL if no style has the given name.
*/
-ASS_Style *lookup_style_strict(ASS_Track *track, char *name)
+ASS_Style *lookup_style_strict(ASS_Track *track, char *name, size_t len)
{
int i;
for (i = track->n_styles - 1; i >= 0; --i) {
- if (strcmp(track->styles[i].Name, name) == 0)
+ if (strncmp(track->styles[i].Name, name, len) == 0 &&
+ track->styles[i].Name[len] == '\0')
return track->styles + i;
}
ass_msg(track->library, MSGL_WARN,
- "[%p]: Warning: no style named '%s' found",
- track, name);
+ "[%p]: Warning: no style named '%.*s' found",
+ track, (int) len, name);
return NULL;
}
diff --git a/libass/ass_utils.h b/libass/ass_utils.h
index 40d8953..db47c32 100644
--- a/libass/ass_utils.h
+++ b/libass/ass_utils.h
@@ -65,7 +65,7 @@ unsigned ass_utf8_get_char(char **str);
unsigned ass_utf8_put_char(char *dest, uint32_t ch);
void ass_msg(ASS_Library *priv, int lvl, char *fmt, ...);
int lookup_style(ASS_Track *track, char *name);
-ASS_Style *lookup_style_strict(ASS_Track *track, char *name);
+ASS_Style *lookup_style_strict(ASS_Track *track, char *name, size_t len);
#ifdef CONFIG_ENCA
void *ass_guess_buffer_cp(ASS_Library *library, unsigned char *buffer,
int buflen, char *preferred_language,