[openssl-commits] [openssl] OpenSSL_1_1_0-stable update

Richard Levitte levitte at openssl.org
Wed Dec 7 23:09:09 UTC 2016


The branch OpenSSL_1_1_0-stable has been updated
       via  aff927e84c3bce5b7ebc2cc72f99a571ea89c2b1 (commit)
      from  72ea4b8de29bd29dcc44b3d3a73660fe4d1bba40 (commit)


- Log -----------------------------------------------------------------
commit aff927e84c3bce5b7ebc2cc72f99a571ea89c2b1
Author: Richard Levitte <levitte at openssl.org>
Date:   Wed Dec 7 16:36:44 2016 +0100

    UI_process() didn't generate errors
    
    Since there are many parts of UI_process() that can go wrong, it isn't
    very helpful to only return -1 with no further explanation.  With this
    change, the error message will at least show which part went wrong.
    
    Reviewed-by: Rich Salz <rsalz at openssl.org>
    (Merged from https://github.com/openssl/openssl/pull/2037)
    (cherry picked from commit 0a687ab0a92d2d68289364a6e232028c229f44bb)

-----------------------------------------------------------------------

Summary of changes:
 crypto/ui/ui_err.c   |  2 ++
 crypto/ui/ui_lib.c   | 23 +++++++++++++++++++----
 include/openssl/ui.h |  2 ++
 3 files changed, 23 insertions(+), 4 deletions(-)

diff --git a/crypto/ui/ui_err.c b/crypto/ui/ui_err.c
index ef03815..b89f9ae 100644
--- a/crypto/ui/ui_err.c
+++ b/crypto/ui/ui_err.c
@@ -30,6 +30,7 @@ static ERR_STRING_DATA UI_str_functs[] = {
     {ERR_FUNC(UI_F_UI_DUP_VERIFY_STRING), "UI_dup_verify_string"},
     {ERR_FUNC(UI_F_UI_GET0_RESULT), "UI_get0_result"},
     {ERR_FUNC(UI_F_UI_NEW_METHOD), "UI_new_method"},
+    {ERR_FUNC(UI_F_UI_PROCESS), "UI_process"},
     {ERR_FUNC(UI_F_UI_SET_RESULT), "UI_set_result"},
     {0, NULL}
 };
@@ -40,6 +41,7 @@ static ERR_STRING_DATA UI_str_reasons[] = {
     {ERR_REASON(UI_R_INDEX_TOO_LARGE), "index too large"},
     {ERR_REASON(UI_R_INDEX_TOO_SMALL), "index too small"},
     {ERR_REASON(UI_R_NO_RESULT_BUFFER), "no result buffer"},
+    {ERR_REASON(UI_R_PROCESSING_ERROR), "processing error"},
     {ERR_REASON(UI_R_RESULT_TOO_LARGE), "result too large"},
     {ERR_REASON(UI_R_RESULT_TOO_SMALL), "result too small"},
     {ERR_REASON(UI_R_UNKNOWN_CONTROL_COMMAND), "unknown control command"},
diff --git a/crypto/ui/ui_lib.c b/crypto/ui/ui_lib.c
index 004aeb0..28f5f61 100644
--- a/crypto/ui/ui_lib.c
+++ b/crypto/ui/ui_lib.c
@@ -423,9 +423,13 @@ static int print_error(const char *str, size_t len, UI *ui)
 int UI_process(UI *ui)
 {
     int i, ok = 0;
+    const char *state = "processing";
 
-    if (ui->meth->ui_open_session && !ui->meth->ui_open_session(ui))
-        return -1;
+    if (ui->meth->ui_open_session && !ui->meth->ui_open_session(ui)) {
+        state = "opening session";
+        ok = -1;
+        goto err;
+    }
 
     if (ui->flags & UI_FLAG_PRINT_ERRORS)
         ERR_print_errors_cb((int (*)(const char *, size_t, void *))
@@ -436,6 +440,7 @@ int UI_process(UI *ui)
             && !ui->meth->ui_write_string(ui,
                                           sk_UI_STRING_value(ui->strings, i)))
         {
+            state = "writing strings";
             ok = -1;
             goto err;
         }
@@ -447,6 +452,7 @@ int UI_process(UI *ui)
             ok = -2;
             goto err;
         case 0:                /* Errors */
+            state = "flushing";
             ok = -1;
             goto err;
         default:               /* Success */
@@ -463,6 +469,7 @@ int UI_process(UI *ui)
                 ok = -2;
                 goto err;
             case 0:            /* Errors */
+                state = "reading strings";
                 ok = -1;
                 goto err;
             default:           /* Success */
@@ -472,8 +479,16 @@ int UI_process(UI *ui)
         }
     }
  err:
-    if (ui->meth->ui_close_session && !ui->meth->ui_close_session(ui))
-        return -1;
+    if (ui->meth->ui_close_session && !ui->meth->ui_close_session(ui)) {
+        if (state == NULL)
+            state = "closing session";
+        ok = -1;
+    }
+
+    if (ok == -1) {
+        UIerr(UI_F_UI_PROCESS, UI_R_PROCESSING_ERROR);
+        ERR_add_error_data(2, "while ", state);
+    }
     return ok;
 }
 
diff --git a/include/openssl/ui.h b/include/openssl/ui.h
index 26f4f04..c62c05d 100644
--- a/include/openssl/ui.h
+++ b/include/openssl/ui.h
@@ -350,6 +350,7 @@ int ERR_load_UI_strings(void);
 # define UI_F_UI_DUP_VERIFY_STRING                        106
 # define UI_F_UI_GET0_RESULT                              107
 # define UI_F_UI_NEW_METHOD                               104
+# define UI_F_UI_PROCESS                                  113
 # define UI_F_UI_SET_RESULT                               105
 
 /* Reason codes. */
@@ -357,6 +358,7 @@ int ERR_load_UI_strings(void);
 # define UI_R_INDEX_TOO_LARGE                             102
 # define UI_R_INDEX_TOO_SMALL                             103
 # define UI_R_NO_RESULT_BUFFER                            105
+# define UI_R_PROCESSING_ERROR                            107
 # define UI_R_RESULT_TOO_LARGE                            100
 # define UI_R_RESULT_TOO_SMALL                            101
 # define UI_R_UNKNOWN_CONTROL_COMMAND                     106


More information about the openssl-commits mailing list