Do these look right? The strl* ones are only for external users
as it's not used in our tree.
Index: src/crypto/buffer/buffer.h
===================================================================
RCS file: /cvs/src/lib/libssl/src/crypto/buffer/buffer.h,v
retrieving revision 1.8
diff -u -p -u -r1.8 buffer.h
--- src/crypto/buffer/buffer.h 17 Apr 2014 13:58:24 -0000 1.8
+++ src/crypto/buffer/buffer.h 12 Jun 2014 15:46:01 -0000
@@ -90,8 +90,10 @@ void * BUF_memdup(const void *data, size
void BUF_reverse(unsigned char *out, const unsigned char *in, size_t siz);
/* safe string functions */
-size_t BUF_strlcpy(char *dst, const char *src, size_t siz);
-size_t BUF_strlcat(char *dst, const char *src, size_t siz);
+size_t BUF_strlcpy(char *dst, const char *src, size_t siz)
+ __attribute__ ((__bounded__(__string__,1,3)));
+size_t BUF_strlcat(char *dst, const char *src, size_t siz)
+ __attribute__ ((__bounded__(__string__,1,3)));
/* BEGIN ERROR CODES */
Index: src/crypto/md5/md5.h
===================================================================
RCS file: /cvs/src/lib/libssl/src/crypto/md5/md5.h,v
retrieving revision 1.12
diff -u -p -u -r1.12 md5.h
--- src/crypto/md5/md5.h 16 Apr 2014 04:38:11 -0000 1.12
+++ src/crypto/md5/md5.h 12 Jun 2014 15:46:01 -0000
@@ -99,9 +99,11 @@ typedef struct MD5state_st
} MD5_CTX;
int MD5_Init(MD5_CTX *c);
-int MD5_Update(MD5_CTX *c, const void *data, size_t len);
+int MD5_Update(MD5_CTX *c, const void *data, size_t len)
+ __attribute__ ((__bounded__(__buffer__,2,3)));
int MD5_Final(unsigned char *md, MD5_CTX *c);
-unsigned char *MD5(const unsigned char *d, size_t n, unsigned char *md);
+unsigned char *MD5(const unsigned char *d, size_t n, unsigned char *md)
+ __attribute__ ((__bounded__(__buffer__,1,2)));
void MD5_Transform(MD5_CTX *c, const unsigned char *b);
#ifdef __cplusplus
}
Index: src/crypto/sha/sha.h
===================================================================
RCS file: /cvs/src/lib/libssl/src/crypto/sha/sha.h,v
retrieving revision 1.12
diff -u -p -u -r1.12 sha.h
--- src/crypto/sha/sha.h 28 Apr 2014 21:14:50 -0000 1.12
+++ src/crypto/sha/sha.h 12 Jun 2014 15:46:01 -0000
@@ -103,16 +103,20 @@ typedef struct SHAstate_st
#ifndef OPENSSL_NO_SHA0
int SHA_Init(SHA_CTX *c);
-int SHA_Update(SHA_CTX *c, const void *data, size_t len);
+int SHA_Update(SHA_CTX *c, const void *data, size_t len)
+ __attribute__ ((__bounded__(__buffer__,2,3)));
int SHA_Final(unsigned char *md, SHA_CTX *c);
-unsigned char *SHA(const unsigned char *d, size_t n, unsigned char *md);
+unsigned char *SHA(const unsigned char *d, size_t n, unsigned char *md)
+ __attribute__ ((__bounded__(__buffer__,1,2)));
void SHA_Transform(SHA_CTX *c, const unsigned char *data);
#endif
#ifndef OPENSSL_NO_SHA1
int SHA1_Init(SHA_CTX *c);
-int SHA1_Update(SHA_CTX *c, const void *data, size_t len);
+int SHA1_Update(SHA_CTX *c, const void *data, size_t len)
+ __attribute__ ((__bounded__(__buffer__,2,3)));
int SHA1_Final(unsigned char *md, SHA_CTX *c);
-unsigned char *SHA1(const unsigned char *d, size_t n, unsigned char *md);
+unsigned char *SHA1(const unsigned char *d, size_t n, unsigned char *md)
+ __attribute__ ((__bounded__(__buffer__,1,2)));
void SHA1_Transform(SHA_CTX *c, const unsigned char *data);
#endif
@@ -132,13 +136,17 @@ typedef struct SHA256state_st
#ifndef OPENSSL_NO_SHA256
int SHA224_Init(SHA256_CTX *c);
-int SHA224_Update(SHA256_CTX *c, const void *data, size_t len);
+int SHA224_Update(SHA256_CTX *c, const void *data, size_t len)
+ __attribute__ ((__bounded__(__buffer__,2,3)));
int SHA224_Final(unsigned char *md, SHA256_CTX *c);
-unsigned char *SHA224(const unsigned char *d, size_t n,unsigned char *md);
+unsigned char *SHA224(const unsigned char *d, size_t n,unsigned char *md)
+ __attribute__ ((__bounded__(__buffer__,1,2)));
int SHA256_Init(SHA256_CTX *c);
-int SHA256_Update(SHA256_CTX *c, const void *data, size_t len);
+int SHA256_Update(SHA256_CTX *c, const void *data, size_t len)
+ __attribute__ ((__bounded__(__buffer__,2,3)));
int SHA256_Final(unsigned char *md, SHA256_CTX *c);
-unsigned char *SHA256(const unsigned char *d, size_t n,unsigned char *md);
+unsigned char *SHA256(const unsigned char *d, size_t n,unsigned char *md)
+ __attribute__ ((__bounded__(__buffer__,1,2)));
void SHA256_Transform(SHA256_CTX *c, const unsigned char *data);
#endif
@@ -176,13 +184,17 @@ typedef struct SHA512state_st
#ifndef OPENSSL_NO_SHA512
int SHA384_Init(SHA512_CTX *c);
-int SHA384_Update(SHA512_CTX *c, const void *data, size_t len);
+int SHA384_Update(SHA512_CTX *c, const void *data, size_t len)
+ __attribute__ ((__bounded__(__buffer__,2,3)));
int SHA384_Final(unsigned char *md, SHA512_CTX *c);
-unsigned char *SHA384(const unsigned char *d, size_t n,unsigned char *md);
+unsigned char *SHA384(const unsigned char *d, size_t n,unsigned char *md)
+ __attribute__ ((__bounded__(__buffer__,1,2)));
int SHA512_Init(SHA512_CTX *c);
-int SHA512_Update(SHA512_CTX *c, const void *data, size_t len);
+int SHA512_Update(SHA512_CTX *c, const void *data, size_t len)
+ __attribute__ ((__bounded__(__buffer__,2,3)));
int SHA512_Final(unsigned char *md, SHA512_CTX *c);
-unsigned char *SHA512(const unsigned char *d, size_t n,unsigned char *md);
+unsigned char *SHA512(const unsigned char *d, size_t n,unsigned char *md)
+ __attribute__ ((__bounded__(__buffer__,1,2)));
void SHA512_Transform(SHA512_CTX *c, const unsigned char *data);
#endif