summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorjsing <>2014-04-24 15:12:20 +0000
committerjsing <>2014-04-24 15:12:20 +0000
commit0ba772c7295d5d331a9211ed63a74f5516afbdbc (patch)
tree59de245e1efbefa030b8119042483ab699626091 /src/lib
parent24f437ddb1b6ef36ec5b11f24b7b9d5ce1257f1c (diff)
downloadopenbsd-0ba772c7295d5d331a9211ed63a74f5516afbdbc.tar.gz
openbsd-0ba772c7295d5d331a9211ed63a74f5516afbdbc.tar.bz2
openbsd-0ba772c7295d5d331a9211ed63a74f5516afbdbc.zip
Remove some malloc/strlcpy/strlcat horror. Just use asprintf and avoid an
unchecked malloc at the same time. ok beck@
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/libcrypto/ui/ui_lib.c37
-rw-r--r--src/lib/libssl/src/crypto/ui/ui_lib.c37
2 files changed, 24 insertions, 50 deletions
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)
388char * 388char *
389UI_construct_prompt(UI *ui, const char *object_desc, const char *object_name) 389UI_construct_prompt(UI *ui, const char *object_desc, const char *object_name)
390{ 390{
391 char *prompt = NULL; 391 char *format = "Enter %s for %s:";
392 char *prompt;
392 393
393 if (ui->meth->ui_construct_prompt) 394 if (ui->meth->ui_construct_prompt)
394 prompt = ui->meth->ui_construct_prompt(ui, 395 return ui->meth->ui_construct_prompt(ui, object_desc,
395 object_desc, object_name); 396 object_name);
396 else { 397
397 char prompt1[] = "Enter "; 398 if (object_desc == NULL)
398 char prompt2[] = " for "; 399 return NULL;
399 char prompt3[] = ":"; 400 if (object_name == NULL)
400 int len = 0; 401 format = "Enter %s:";
401 402 if (asprintf(&prompt, format, object_desc, object_name) == -1)
402 if (object_desc == NULL) 403 return NULL;
403 return NULL; 404
404 len = sizeof(prompt1) - 1 + strlen(object_desc);
405 if (object_name)
406 len += sizeof(prompt2) - 1 + strlen(object_name);
407 len += sizeof(prompt3) - 1;
408
409 prompt = (char *)malloc(len + 1);
410 strlcpy(prompt, prompt1, len + 1);
411 strlcat(prompt, object_desc, len + 1);
412 if (object_name) {
413 strlcat(prompt, prompt2, len + 1);
414 strlcat(prompt, object_name, len + 1);
415 }
416 strlcat(prompt, prompt3, len + 1);
417 }
418 return prompt; 405 return prompt;
419} 406}
420 407
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)
388char * 388char *
389UI_construct_prompt(UI *ui, const char *object_desc, const char *object_name) 389UI_construct_prompt(UI *ui, const char *object_desc, const char *object_name)
390{ 390{
391 char *prompt = NULL; 391 char *format = "Enter %s for %s:";
392 char *prompt;
392 393
393 if (ui->meth->ui_construct_prompt) 394 if (ui->meth->ui_construct_prompt)
394 prompt = ui->meth->ui_construct_prompt(ui, 395 return ui->meth->ui_construct_prompt(ui, object_desc,
395 object_desc, object_name); 396 object_name);
396 else { 397
397 char prompt1[] = "Enter "; 398 if (object_desc == NULL)
398 char prompt2[] = " for "; 399 return NULL;
399 char prompt3[] = ":"; 400 if (object_name == NULL)
400 int len = 0; 401 format = "Enter %s:";
401 402 if (asprintf(&prompt, format, object_desc, object_name) == -1)
402 if (object_desc == NULL) 403 return NULL;
403 return NULL; 404
404 len = sizeof(prompt1) - 1 + strlen(object_desc);
405 if (object_name)
406 len += sizeof(prompt2) - 1 + strlen(object_name);
407 len += sizeof(prompt3) - 1;
408
409 prompt = (char *)malloc(len + 1);
410 strlcpy(prompt, prompt1, len + 1);
411 strlcat(prompt, object_desc, len + 1);
412 if (object_name) {
413 strlcat(prompt, prompt2, len + 1);
414 strlcat(prompt, object_name, len + 1);
415 }
416 strlcat(prompt, prompt3, len + 1);
417 }
418 return prompt; 405 return prompt;
419} 406}
420 407