]> granicus.if.org Git - libass/commitdiff
parse_tag: remove unnecessary malloc
authorOleg Oshmyan <chortos@inbox.lv>
Thu, 29 May 2014 22:38:45 +0000 (23:38 +0100)
committerOleg Oshmyan <chortos@inbox.lv>
Fri, 6 Jun 2014 14:10:07 +0000 (15:10 +0100)
libass/ass_parse.c
libass/ass_utils.c
libass/ass_utils.h

index 47d22e6643103dc73a436f8e80b30474c793f09f..afba8a74cc70f7c50f1f69e97db59d7a7dbd0542 100644 (file)
@@ -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")) {
index c545012f5f27b5aeaa60fb52afd7767b3c5be797..778da8083b9d72d406fb16e0045923c1aeb622f7 100644 (file)
@@ -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;
 }
 
index 40d8953aae4b90a2ffcffe8088e79ca8f78e1c71..db47c3216d31b432c9315792f4fb00676b831759 100644 (file)
@@ -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,