summaryrefslogtreecommitdiff
path: root/crypto/buffer
diff options
context:
space:
mode:
Diffstat (limited to 'crypto/buffer')
-rw-r--r--crypto/buffer/buf_str.c11
-rw-r--r--crypto/buffer/buffer.h1
2 files changed, 12 insertions, 0 deletions
diff --git a/crypto/buffer/buf_str.c b/crypto/buffer/buf_str.c
index fdde3d7db4ba..ebc5ab4646ce 100644
--- a/crypto/buffer/buf_str.c
+++ b/crypto/buffer/buf_str.c
@@ -60,6 +60,15 @@
#include "cryptlib.h"
#include <openssl/buffer.h>
+size_t BUF_strnlen(const char *str, size_t maxlen)
+{
+ const char *p;
+
+ for (p = str; maxlen-- != 0 && *p != '\0'; ++p) ;
+
+ return p - str;
+}
+
char *BUF_strdup(const char *str)
{
if (str == NULL)
@@ -74,6 +83,8 @@ char *BUF_strndup(const char *str, size_t siz)
if (str == NULL)
return (NULL);
+ siz = BUF_strnlen(str, siz);
+
ret = OPENSSL_malloc(siz + 1);
if (ret == NULL) {
BUFerr(BUF_F_BUF_STRNDUP, ERR_R_MALLOC_FAILURE);
diff --git a/crypto/buffer/buffer.h b/crypto/buffer/buffer.h
index 632df93c657c..c343dd772f1e 100644
--- a/crypto/buffer/buffer.h
+++ b/crypto/buffer/buffer.h
@@ -84,6 +84,7 @@ BUF_MEM *BUF_MEM_new(void);
void BUF_MEM_free(BUF_MEM *a);
int BUF_MEM_grow(BUF_MEM *str, size_t len);
int BUF_MEM_grow_clean(BUF_MEM *str, size_t len);
+size_t BUF_strnlen(const char *str, size_t maxlen);
char *BUF_strdup(const char *str);
char *BUF_strndup(const char *str, size_t siz);
void *BUF_memdup(const void *data, size_t siz);