From f84de16f397b06831ea5569a285518c035285f46 Mon Sep 17 00:00:00 2001
From: "Dr. David von Oheimb" <David.von.Oheimb@siemens.com>
Date: Tue, 4 Aug 2020 10:11:02 +0200
Subject: [PATCH] apps_ui.c: Improve error handling and return value of
 setup_ui_method()

Reviewed-by: Tomas Mraz <tmraz@fedoraproject.org>
(Merged from https://github.com/openssl/openssl/pull/12493)
---
 apps/lib/apps_ui.c | 12 +++++++-----
 apps/openssl.c     |  2 +-
 test/uitest.c      |  2 +-
 3 files changed, 9 insertions(+), 7 deletions(-)

diff --git a/apps/lib/apps_ui.c b/apps/lib/apps_ui.c
index 13f8670d9f..8523cda3c2 100644
--- a/apps/lib/apps_ui.c
+++ b/apps/lib/apps_ui.c
@@ -106,11 +106,13 @@ int setup_ui_method(void)
     ui_fallback_method = UI_OpenSSL();
 #endif
     ui_method = UI_create_method("OpenSSL application user interface");
-    UI_method_set_opener(ui_method, ui_open);
-    UI_method_set_reader(ui_method, ui_read);
-    UI_method_set_writer(ui_method, ui_write);
-    UI_method_set_closer(ui_method, ui_close);
-    return 0;
+    return ui_method != NULL
+        && 0 == UI_method_set_opener(ui_method, ui_open)
+        && 0 == UI_method_set_reader(ui_method, ui_read)
+        && 0 == UI_method_set_writer(ui_method, ui_write)
+        && 0 == UI_method_set_closer(ui_method, ui_close)
+        && 0 == UI_method_set_prompt_constructor(ui_method,
+                                                 ui_prompt_construct);
 }
 
 void destroy_ui_method(void)
diff --git a/apps/openssl.c b/apps/openssl.c
index 6b2c2b9c6b..b426f594b3 100644
--- a/apps/openssl.c
+++ b/apps/openssl.c
@@ -68,7 +68,7 @@ static int apps_startup(void)
                           | OPENSSL_INIT_LOAD_CONFIG, NULL))
         return 0;
 
-    setup_ui_method();
+    (void)setup_ui_method();
 
     /*
      * NOTE: This is an undocumented feature required for testing only.
diff --git a/test/uitest.c b/test/uitest.c
index 289f32b6b0..d45d57d9fb 100644
--- a/test/uitest.c
+++ b/test/uitest.c
@@ -78,7 +78,7 @@ static int test_new_ui(void)
     char pass[16];
     int ok = 0;
 
-    setup_ui_method();
+    (void)setup_ui_method();
     if (TEST_int_gt(password_callback(pass, sizeof(pass), 0, &cb_data), 0)
             && TEST_str_eq(pass, cb_data.password))
         ok = 1;