lavfi/overlay: fix crash in case of invalid expression
authorStefano Sabatini <stefasab@gmail.com>
Thu, 11 Apr 2013 21:54:24 +0000 (23:54 +0200)
committerStefano Sabatini <stefasab@gmail.com>
Thu, 11 Apr 2013 22:09:41 +0000 (00:09 +0200)
libavfilter/vf_overlay.c

index 5ac114a..b5c3f6f 100644 (file)
@@ -170,16 +170,21 @@ static void eval_expr(AVFilterContext *ctx, enum EvalTarget eval_tgt)
 static int set_expr(AVExpr **pexpr, const char *expr, void *log_ctx)
 {
     int ret;
+    AVExpr *old = NULL;
 
     if (*pexpr)
-        av_expr_free(*pexpr);
-    *pexpr = NULL;
+        old = *pexpr;
     ret = av_expr_parse(pexpr, expr, var_names,
                         NULL, NULL, NULL, NULL, 0, log_ctx);
-    if (ret < 0)
+    if (ret < 0) {
         av_log(log_ctx, AV_LOG_ERROR,
                "Error when evaluating the expression '%s'\n", expr);
-    return ret;
+        *pexpr = old;
+        return ret;
+    }
+
+    av_expr_free(old);
+    return 0;
 }
 
 static int process_command(AVFilterContext *ctx, const char *cmd, const char *args,