Submitted By:            Pierre Labastie <pierre dot labastie at neuf dot fr>
Date:                    2020-01-01
Initial Package Version: 2.6.0
Upstream Status:         PR submitted
Origin:                  Upstream PR #356
Description:             Fix for upstream issue #355

From a80d2fe3bcc2c14c6e1434615d1be38924b668ea Mon Sep 17 00:00:00 2001
From: Carl Zhang <carl.zhang@intel.com>
Date: Mon, 30 Dec 2019 04:38:43 -0500
Subject: [PATCH] adjust call sequence to ensure authenticate operation is
 executed

fixes #355

Signed-off-by: Carl Zhang <carl.zhang@intel.com>
---
 va/va.c | 25 ++++++++++++++++---------
 1 file changed, 16 insertions(+), 9 deletions(-)

diff --git a/va/va.c b/va/va.c
index cfcabff..7f014a1 100644
--- a/va/va.c
+++ b/va/va.c
@@ -367,11 +367,23 @@ static VAStatus va_getDriverNameByIndex(VADisplay dpy, char **driver_name, int c
     VADisplayContextP pDisplayContext = (VADisplayContextP)dpy;
     const char *driver_name_env = NULL;
     VADriverContextP ctx;
+    VAStatus status = VA_STATUS_SUCCESS;
 
     ctx = CTX(dpy);
+    if (pDisplayContext->vaGetDriverNameByIndex) {
+        /*if vaGetDriverNameByIndex is implemented*/
+        status = pDisplayContext->vaGetDriverNameByIndex(pDisplayContext, driver_name, candidate_index);
+    } else {
+        if (candidate_index == 0)
+            status = pDisplayContext->vaGetDriverName(pDisplayContext, driver_name);
+        else
+            status = VA_STATUS_ERROR_INVALID_PARAMETER;
+    }    
     driver_name_env = getenv("LIBVA_DRIVER_NAME");
     /*if user set driver name by vaSetDriverName */
     if (ctx->override_driver_name){
+        if(*driver_name)
+            free(*driver_name);
         *driver_name = strdup(ctx->override_driver_name);
         if (!(*driver_name)) {
               va_errorMessage(dpy, "va_getDriverNameByIndex  failed with %s, out of memory\n",vaErrorStr(VA_STATUS_ERROR_ALLOCATION_FAILED));
@@ -380,19 +392,14 @@ static VAStatus va_getDriverNameByIndex(VADisplay dpy, char **driver_name, int c
         va_infoMessage(dpy, "User requested driver '%s'\n", *driver_name);
         return VA_STATUS_SUCCESS;
     } else if (driver_name_env && (geteuid() == getuid())) {
+        if(*driver_name)
+            free(*driver_name);
         /*if user set driver name by environment variable*/
         *driver_name = strdup(driver_name_env);
         va_infoMessage(dpy, "User environment variable requested driver '%s'\n", *driver_name);
         return VA_STATUS_SUCCESS;
-    } else if (pDisplayContext->vaGetDriverNameByIndex) {
-        /*if vaGetDriverNameByIndex is implemented*/
-        return pDisplayContext->vaGetDriverNameByIndex(pDisplayContext, driver_name, candidate_index);
-    } else {
-        if (candidate_index == 0)
-            return pDisplayContext->vaGetDriverName(pDisplayContext, driver_name);
-        else
-            return VA_STATUS_ERROR_INVALID_PARAMETER;
-    }
+    } 
+    return status;
 }
 
 static char *va_getDriverPath(const char *driver_dir, const char *driver_name)
