提交 0a687ab0 编写于 作者: R Richard Levitte

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: NRich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/2037)
上级 7cb58c0f
...@@ -30,6 +30,7 @@ static ERR_STRING_DATA UI_str_functs[] = { ...@@ -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_DUP_VERIFY_STRING), "UI_dup_verify_string"},
{ERR_FUNC(UI_F_UI_GET0_RESULT), "UI_get0_result"}, {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_NEW_METHOD), "UI_new_method"},
{ERR_FUNC(UI_F_UI_PROCESS), "UI_process"},
{ERR_FUNC(UI_F_UI_SET_RESULT), "UI_set_result"}, {ERR_FUNC(UI_F_UI_SET_RESULT), "UI_set_result"},
{0, NULL} {0, NULL}
}; };
...@@ -40,6 +41,7 @@ static ERR_STRING_DATA UI_str_reasons[] = { ...@@ -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_LARGE), "index too large"},
{ERR_REASON(UI_R_INDEX_TOO_SMALL), "index too small"}, {ERR_REASON(UI_R_INDEX_TOO_SMALL), "index too small"},
{ERR_REASON(UI_R_NO_RESULT_BUFFER), "no result buffer"}, {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_LARGE), "result too large"},
{ERR_REASON(UI_R_RESULT_TOO_SMALL), "result too small"}, {ERR_REASON(UI_R_RESULT_TOO_SMALL), "result too small"},
{ERR_REASON(UI_R_UNKNOWN_CONTROL_COMMAND), "unknown control command"}, {ERR_REASON(UI_R_UNKNOWN_CONTROL_COMMAND), "unknown control command"},
......
...@@ -427,9 +427,13 @@ static int print_error(const char *str, size_t len, UI *ui) ...@@ -427,9 +427,13 @@ static int print_error(const char *str, size_t len, UI *ui)
int UI_process(UI *ui) int UI_process(UI *ui)
{ {
int i, ok = 0; int i, ok = 0;
const char *state = "processing";
if (ui->meth->ui_open_session && !ui->meth->ui_open_session(ui)) if (ui->meth->ui_open_session && !ui->meth->ui_open_session(ui)) {
return -1; state = "opening session";
ok = -1;
goto err;
}
if (ui->flags & UI_FLAG_PRINT_ERRORS) if (ui->flags & UI_FLAG_PRINT_ERRORS)
ERR_print_errors_cb((int (*)(const char *, size_t, void *)) ERR_print_errors_cb((int (*)(const char *, size_t, void *))
...@@ -440,6 +444,7 @@ int UI_process(UI *ui) ...@@ -440,6 +444,7 @@ int UI_process(UI *ui)
&& !ui->meth->ui_write_string(ui, && !ui->meth->ui_write_string(ui,
sk_UI_STRING_value(ui->strings, i))) sk_UI_STRING_value(ui->strings, i)))
{ {
state = "writing strings";
ok = -1; ok = -1;
goto err; goto err;
} }
...@@ -451,6 +456,7 @@ int UI_process(UI *ui) ...@@ -451,6 +456,7 @@ int UI_process(UI *ui)
ok = -2; ok = -2;
goto err; goto err;
case 0: /* Errors */ case 0: /* Errors */
state = "flushing";
ok = -1; ok = -1;
goto err; goto err;
default: /* Success */ default: /* Success */
...@@ -467,6 +473,7 @@ int UI_process(UI *ui) ...@@ -467,6 +473,7 @@ int UI_process(UI *ui)
ok = -2; ok = -2;
goto err; goto err;
case 0: /* Errors */ case 0: /* Errors */
state = "reading strings";
ok = -1; ok = -1;
goto err; goto err;
default: /* Success */ default: /* Success */
...@@ -476,8 +483,16 @@ int UI_process(UI *ui) ...@@ -476,8 +483,16 @@ int UI_process(UI *ui)
} }
} }
err: err:
if (ui->meth->ui_close_session && !ui->meth->ui_close_session(ui)) if (ui->meth->ui_close_session && !ui->meth->ui_close_session(ui)) {
return -1; 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; return ok;
} }
......
...@@ -350,6 +350,7 @@ int ERR_load_UI_strings(void); ...@@ -350,6 +350,7 @@ int ERR_load_UI_strings(void);
# define UI_F_UI_DUP_VERIFY_STRING 106 # define UI_F_UI_DUP_VERIFY_STRING 106
# define UI_F_UI_GET0_RESULT 107 # define UI_F_UI_GET0_RESULT 107
# define UI_F_UI_NEW_METHOD 104 # define UI_F_UI_NEW_METHOD 104
# define UI_F_UI_PROCESS 113
# define UI_F_UI_SET_RESULT 105 # define UI_F_UI_SET_RESULT 105
/* Reason codes. */ /* Reason codes. */
...@@ -357,6 +358,7 @@ int ERR_load_UI_strings(void); ...@@ -357,6 +358,7 @@ int ERR_load_UI_strings(void);
# define UI_R_INDEX_TOO_LARGE 102 # define UI_R_INDEX_TOO_LARGE 102
# define UI_R_INDEX_TOO_SMALL 103 # define UI_R_INDEX_TOO_SMALL 103
# define UI_R_NO_RESULT_BUFFER 105 # 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_LARGE 100
# define UI_R_RESULT_TOO_SMALL 101 # define UI_R_RESULT_TOO_SMALL 101
# define UI_R_UNKNOWN_CONTROL_COMMAND 106 # define UI_R_UNKNOWN_CONTROL_COMMAND 106
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册