summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormarkus <>2003-10-25 12:41:02 +0000
committermarkus <>2003-10-25 12:41:02 +0000
commit5ea1c776c381a4b2ec02b6dddf2a1294d1f42810 (patch)
tree006cec76dd698224e8176149b1060ed5a3deb6b3
parentc9423a0615f6dadf73060eaa843ac7e53e8ce540 (diff)
downloadopenbsd-5ea1c776c381a4b2ec02b6dddf2a1294d1f42810.tar.gz
openbsd-5ea1c776c381a4b2ec02b6dddf2a1294d1f42810.tar.bz2
openbsd-5ea1c776c381a4b2ec02b6dddf2a1294d1f42810.zip
don't destroy old pointer if realloc fails; from Daniel Lucq; ok deraadt@
-rw-r--r--src/lib/libcrypto/mem.c10
-rw-r--r--src/lib/libssl/src/crypto/mem.c10
2 files changed, 14 insertions, 6 deletions
diff --git a/src/lib/libcrypto/mem.c b/src/lib/libcrypto/mem.c
index 29df7d35b2..bb862db499 100644
--- a/src/lib/libcrypto/mem.c
+++ b/src/lib/libcrypto/mem.c
@@ -352,11 +352,15 @@ void *CRYPTO_realloc_clean(void *str, int old_len, int num, const char *file,
352 realloc_debug_func(str, NULL, num, file, line, 0); 352 realloc_debug_func(str, NULL, num, file, line, 0);
353 ret=malloc_ex_func(num,file,line); 353 ret=malloc_ex_func(num,file,line);
354 if(ret) 354 if(ret)
355 {
355 memcpy(ret,str,old_len); 356 memcpy(ret,str,old_len);
356 OPENSSL_cleanse(str,old_len); 357 OPENSSL_cleanse(str,old_len);
357 free_func(str); 358 free_func(str);
359 }
358#ifdef LEVITTE_DEBUG_MEM 360#ifdef LEVITTE_DEBUG_MEM
359 fprintf(stderr, "LEVITTE_DEBUG_MEM: | 0x%p -> 0x%p (%d)\n", str, ret, num); 361 fprintf(stderr,
362 "LEVITTE_DEBUG_MEM: | 0x%p -> 0x%p (%d)\n",
363 str, ret, num);
360#endif 364#endif
361 if (realloc_debug_func != NULL) 365 if (realloc_debug_func != NULL)
362 realloc_debug_func(str, ret, num, file, line, 1); 366 realloc_debug_func(str, ret, num, file, line, 1);
diff --git a/src/lib/libssl/src/crypto/mem.c b/src/lib/libssl/src/crypto/mem.c
index 29df7d35b2..bb862db499 100644
--- a/src/lib/libssl/src/crypto/mem.c
+++ b/src/lib/libssl/src/crypto/mem.c
@@ -352,11 +352,15 @@ void *CRYPTO_realloc_clean(void *str, int old_len, int num, const char *file,
352 realloc_debug_func(str, NULL, num, file, line, 0); 352 realloc_debug_func(str, NULL, num, file, line, 0);
353 ret=malloc_ex_func(num,file,line); 353 ret=malloc_ex_func(num,file,line);
354 if(ret) 354 if(ret)
355 {
355 memcpy(ret,str,old_len); 356 memcpy(ret,str,old_len);
356 OPENSSL_cleanse(str,old_len); 357 OPENSSL_cleanse(str,old_len);
357 free_func(str); 358 free_func(str);
359 }
358#ifdef LEVITTE_DEBUG_MEM 360#ifdef LEVITTE_DEBUG_MEM
359 fprintf(stderr, "LEVITTE_DEBUG_MEM: | 0x%p -> 0x%p (%d)\n", str, ret, num); 361 fprintf(stderr,
362 "LEVITTE_DEBUG_MEM: | 0x%p -> 0x%p (%d)\n",
363 str, ret, num);
360#endif 364#endif
361 if (realloc_debug_func != NULL) 365 if (realloc_debug_func != NULL)
362 realloc_debug_func(str, ret, num, file, line, 1); 366 realloc_debug_func(str, ret, num, file, line, 1);