UI_construct_prompt: check for NULL when allocating prompt
[openssl.git] / crypto / ui / ui_lib.c
index 7ab249c3be320acd30f5e778c26cb7f98a212a11..41bc926ca4c6ec15a2901d3177a89bbbd5e68540 100644 (file)
@@ -90,6 +90,7 @@ UI *UI_new_method(const UI_METHOD *method)
 
        ret->strings=NULL;
        ret->user_data=NULL;
+       ret->flags=0;
        CRYPTO_new_ex_data(CRYPTO_EX_INDEX_UI, ret, &ret->ex_data);
        return ret;
        }
@@ -430,6 +431,8 @@ char *UI_construct_prompt(UI *ui, const char *object_desc,
                len += sizeof(prompt3) - 1;
 
                prompt = (char *)OPENSSL_malloc(len + 1);
+               if (prompt == NULL)
+                       return NULL;
                BUF_strlcpy(prompt, prompt1, len + 1);
                BUF_strlcat(prompt, object_desc, len + 1);
                if (object_name)
@@ -692,6 +695,17 @@ int UI_method_set_closer(UI_METHOD *method, int (*closer)(UI *ui))
                return -1;
        }
 
+int UI_method_set_prompt_constructor(UI_METHOD *method, char *(*prompt_constructor)(UI* ui, const char* object_desc, const char* object_name))
+       {
+       if (method)
+               {
+               method->ui_construct_prompt = prompt_constructor;
+               return 0;
+               }
+       else
+               return -1;
+       }
+
 int (*UI_method_get_opener(UI_METHOD *method))(UI*)
        {
        if (method)
@@ -732,6 +746,14 @@ int (*UI_method_get_closer(UI_METHOD *method))(UI*)
                return NULL;
        }
 
+char* (*UI_method_get_prompt_constructor(UI_METHOD *method))(UI*, const char*, const char*)
+       {
+       if (method)
+               return method->ui_construct_prompt;
+       else
+               return NULL;
+       }
+
 enum UI_string_types UI_get_string_type(UI_STRING *uis)
        {
        if (!uis)
@@ -896,9 +918,9 @@ int UI_set_result(UI *ui, UI_STRING *uis, const char *result)
                                break;
                                }
                        }
+               }
        default:
                break;
                }
-               }
        return 0;
        }