Security fixes brought forward from 0.9.7.
This commit is contained in:
@@ -125,6 +125,43 @@ int BUF_MEM_grow(BUF_MEM *str, int len)
|
||||
return(len);
|
||||
}
|
||||
|
||||
int BUF_MEM_grow_clean(BUF_MEM *str, int len)
|
||||
{
|
||||
char *ret;
|
||||
unsigned int n;
|
||||
|
||||
if (str->length >= len)
|
||||
{
|
||||
memset(&str->data[len],0,str->length-len);
|
||||
str->length=len;
|
||||
return(len);
|
||||
}
|
||||
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,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);
|
||||
}
|
||||
|
||||
char *BUF_strdup(const char *str)
|
||||
{
|
||||
char *ret;
|
||||
@@ -143,3 +180,23 @@ char *BUF_strdup(const char *str)
|
||||
return(ret);
|
||||
}
|
||||
|
||||
size_t BUF_strlcpy(char *dst, const char *src, size_t size)
|
||||
{
|
||||
size_t l = 0;
|
||||
for(; size > 1 && *src; size--)
|
||||
{
|
||||
*dst++ = *src++;
|
||||
l++;
|
||||
}
|
||||
if (size)
|
||||
*dst = '\0';
|
||||
return l + strlen(src);
|
||||
}
|
||||
|
||||
size_t BUF_strlcat(char *dst, const char *src, size_t size)
|
||||
{
|
||||
size_t l = 0;
|
||||
for(; size > 0 && *dst; size--, dst++)
|
||||
l++;
|
||||
return l + BUF_strlcpy(dst, src, size);
|
||||
}
|
||||
|
Reference in New Issue
Block a user