diff options
Diffstat (limited to '')
| -rw-r--r-- | src/lib/libcrypto/mem_clr.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/src/lib/libcrypto/mem_clr.c b/src/lib/libcrypto/mem_clr.c index e4b7f540b0..add1f78020 100644 --- a/src/lib/libcrypto/mem_clr.c +++ b/src/lib/libcrypto/mem_clr.c | |||
| @@ -64,12 +64,14 @@ unsigned char cleanse_ctr = 0; | |||
| 64 | void OPENSSL_cleanse(void *ptr, size_t len) | 64 | void OPENSSL_cleanse(void *ptr, size_t len) |
| 65 | { | 65 | { |
| 66 | unsigned char *p = ptr; | 66 | unsigned char *p = ptr; |
| 67 | size_t loop = len; | 67 | size_t loop = len, ctr = cleanse_ctr; |
| 68 | while(loop--) | 68 | while(loop--) |
| 69 | { | 69 | { |
| 70 | *(p++) = cleanse_ctr; | 70 | *(p++) = (unsigned char)ctr; |
| 71 | cleanse_ctr += (17 + (unsigned char)((int)p & 0xF)); | 71 | ctr += (17 + ((size_t)p & 0xF)); |
| 72 | } | 72 | } |
| 73 | if(memchr(ptr, cleanse_ctr, len)) | 73 | p=memchr(ptr, (unsigned char)ctr, len); |
| 74 | cleanse_ctr += 63; | 74 | if(p) |
| 75 | ctr += (63 + (size_t)p); | ||
| 76 | cleanse_ctr = (unsigned char)ctr; | ||
| 75 | } | 77 | } |
