X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;ds=sidebyside;f=crypto%2Fbuffer%2Fbuffer.c;h=f4b358bbbd674fab32b11a64ce0aba16b769d76a;hb=778b14b72d369aa7f469a0be3d35306aa1910706;hp=b76ff3ad7acf24302a039e246455c34561fecfc7;hpb=26a3a48d65c7464b400ec1de439994d7f0d25fed;p=oweals%2Fopenssl.git diff --git a/crypto/buffer/buffer.c b/crypto/buffer/buffer.c index b76ff3ad7a..f4b358bbbd 100644 --- a/crypto/buffer/buffer.c +++ b/crypto/buffer/buffer.c @@ -89,10 +89,10 @@ void BUF_MEM_free(BUF_MEM *a) OPENSSL_free(a); } -int BUF_MEM_grow(BUF_MEM *str, int len) +int BUF_MEM_grow(BUF_MEM *str, size_t len) { char *ret; - unsigned int n; + size_t n; if (str->length >= len) { @@ -118,27 +118,69 @@ int BUF_MEM_grow(BUF_MEM *str, int len) else { str->data=ret; - str->length=len; str->max=n; + memset(&str->data[str->length],0,len-str->length); + str->length=len; } return(len); } -char *BUF_strdup(const char *str) +int BUF_MEM_grow_clean(BUF_MEM *str, size_t len) { char *ret; - int n; + size_t n; - if (str == NULL) return(NULL); - - n=strlen(str); - ret=OPENSSL_malloc(n+1); - if (ret == NULL) + if (str->length >= len) { - BUFerr(BUF_F_BUF_STRDUP,ERR_R_MALLOC_FAILURE); - return(NULL); + memset(&str->data[len],0,str->length-len); + str->length=len; + return(len); } - memcpy(ret,str,n+1); - return(ret); + if (str->max >= len) + { + memset(&str->data[str->length],0,len-str->length); + str->length=len; + return(len); + } + n=(len+3)/3*4; + if (str->data == NULL) + ret=OPENSSL_malloc(n); + else + ret=OPENSSL_realloc_clean(str->data,str->max,n); + if (ret == NULL) + { + BUFerr(BUF_F_BUF_MEM_GROW_CLEAN,ERR_R_MALLOC_FAILURE); + len=0; + } + else + { + str->data=ret; + str->max=n; + memset(&str->data[str->length],0,len-str->length); + str->length=len; + } + return(len); } +void BUF_reverse(unsigned char *out, unsigned char *in, size_t size) + { + size_t i; + if (in) + { + out += size - 1; + for (i = 0; i < size; i++) + *in++ = *out--; + } + else + { + unsigned char *q; + char c; + q = out + size - 1; + for (i = 0; i < size/2; i++) + { + c = *q; + *q-- = *out; + *out++ = c; + } + } + }