Implement BUF_strnlen() and use it instead of strlen().
authorBen Laurie <ben@links.org>
Wed, 21 May 2014 10:54:54 +0000 (11:54 +0100)
committerBen Laurie <ben@links.org>
Wed, 21 May 2014 10:56:21 +0000 (11:56 +0100)
crypto/buffer/buf_str.c
crypto/buffer/buffer.h

index 84236c7671bc3ce7fd6402809bafc3d3e742c777..07840b57c402cbc193e91156ff671c6caf87de38 100644 (file)
 #include "cryptlib.h"
 #include <openssl/buffer.h>
 
+size_t BUF_strnlen(const char *str, size_t maxlen)
+       {
+       const char *p;
+
+       for (p = str; *p != '\0' && maxlen-- != 0; ++p)
+               ;
+
+       return p - str;
+       }
+
 char *BUF_strdup(const char *str)
        {
        if (str == NULL) return(NULL);
@@ -73,7 +83,7 @@ char *BUF_strndup(const char *str, size_t siz)
 
        if (str == NULL) return(NULL);
 
-       len = strlen(str);
+       len = BUF_strnlen(str, siz);
        if (siz > len)
            siz = len;
 
index f8da32b485074b44e6bb5c0b36ce9e5d1aca2b92..881c2da170e35ca04985b6d6058e1e4839133414 100644 (file)
@@ -85,6 +85,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);