diff options
author | jsing <> | 2014-04-24 15:12:20 +0000 |
---|---|---|
committer | jsing <> | 2014-04-24 15:12:20 +0000 |
commit | 0ba772c7295d5d331a9211ed63a74f5516afbdbc (patch) | |
tree | 59de245e1efbefa030b8119042483ab699626091 /src/lib | |
parent | 24f437ddb1b6ef36ec5b11f24b7b9d5ce1257f1c (diff) | |
download | openbsd-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.c | 37 | ||||
-rw-r--r-- | src/lib/libssl/src/crypto/ui/ui_lib.c | 37 |
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) | |||
388 | char * | 388 | char * |
389 | UI_construct_prompt(UI *ui, const char *object_desc, const char *object_name) | 389 | UI_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) | |||
388 | char * | 388 | char * |
389 | UI_construct_prompt(UI *ui, const char *object_desc, const char *object_name) | 389 | UI_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 | ||