From 0ba772c7295d5d331a9211ed63a74f5516afbdbc Mon Sep 17 00:00:00 2001 From: jsing <> Date: Thu, 24 Apr 2014 15:12:20 +0000 Subject: Remove some malloc/strlcpy/strlcat horror. Just use asprintf and avoid an unchecked malloc at the same time. ok beck@ --- src/lib/libcrypto/ui/ui_lib.c | 37 ++++++++++++----------------------- src/lib/libssl/src/crypto/ui/ui_lib.c | 37 ++++++++++++----------------------- 2 files changed, 24 insertions(+), 50 deletions(-) (limited to 'src/lib') diff --git a/src/lib/libcrypto/ui/ui_lib.c b/src/lib/libcrypto/ui/ui_lib.c index 5f9b484105..c19d894d4e 100644 --- a/src/lib/libcrypto/ui/ui_lib.c +++ b/src/lib/libcrypto/ui/ui_lib.c @@ -388,33 +388,20 @@ UI_dup_error_string(UI *ui, const char *text) char * UI_construct_prompt(UI *ui, const char *object_desc, const char *object_name) { - char *prompt = NULL; + char *format = "Enter %s for %s:"; + char *prompt; if (ui->meth->ui_construct_prompt) - prompt = ui->meth->ui_construct_prompt(ui, - object_desc, object_name); - else { - char prompt1[] = "Enter "; - char prompt2[] = " for "; - char prompt3[] = ":"; - int len = 0; - - if (object_desc == NULL) - return NULL; - len = sizeof(prompt1) - 1 + strlen(object_desc); - if (object_name) - len += sizeof(prompt2) - 1 + strlen(object_name); - len += sizeof(prompt3) - 1; - - prompt = (char *)malloc(len + 1); - strlcpy(prompt, prompt1, len + 1); - strlcat(prompt, object_desc, len + 1); - if (object_name) { - strlcat(prompt, prompt2, len + 1); - strlcat(prompt, object_name, len + 1); - } - strlcat(prompt, prompt3, len + 1); - } + return ui->meth->ui_construct_prompt(ui, object_desc, + object_name); + + if (object_desc == NULL) + return NULL; + if (object_name == NULL) + format = "Enter %s:"; + if (asprintf(&prompt, format, object_desc, object_name) == -1) + return NULL; + return prompt; } diff --git a/src/lib/libssl/src/crypto/ui/ui_lib.c b/src/lib/libssl/src/crypto/ui/ui_lib.c index 5f9b484105..c19d894d4e 100644 --- a/src/lib/libssl/src/crypto/ui/ui_lib.c +++ b/src/lib/libssl/src/crypto/ui/ui_lib.c @@ -388,33 +388,20 @@ UI_dup_error_string(UI *ui, const char *text) char * UI_construct_prompt(UI *ui, const char *object_desc, const char *object_name) { - char *prompt = NULL; + char *format = "Enter %s for %s:"; + char *prompt; if (ui->meth->ui_construct_prompt) - prompt = ui->meth->ui_construct_prompt(ui, - object_desc, object_name); - else { - char prompt1[] = "Enter "; - char prompt2[] = " for "; - char prompt3[] = ":"; - int len = 0; - - if (object_desc == NULL) - return NULL; - len = sizeof(prompt1) - 1 + strlen(object_desc); - if (object_name) - len += sizeof(prompt2) - 1 + strlen(object_name); - len += sizeof(prompt3) - 1; - - prompt = (char *)malloc(len + 1); - strlcpy(prompt, prompt1, len + 1); - strlcat(prompt, object_desc, len + 1); - if (object_name) { - strlcat(prompt, prompt2, len + 1); - strlcat(prompt, object_name, len + 1); - } - strlcat(prompt, prompt3, len + 1); - } + return ui->meth->ui_construct_prompt(ui, object_desc, + object_name); + + if (object_desc == NULL) + return NULL; + if (object_name == NULL) + format = "Enter %s:"; + if (asprintf(&prompt, format, object_desc, object_name) == -1) + return NULL; + return prompt; } -- cgit v1.2.3-55-g6feb