core: new param to give outbut buffer size
authorDaniel-Constantin Mierla <miconda@gmail.com>
Tue, 2 Feb 2010 14:06:34 +0000 (15:06 +0100)
committerAndrei Pelinescu-Onciul <andrei@iptel.org>
Wed, 3 Feb 2010 21:50:54 +0000 (22:50 +0100)
- int2strbuf requires now outbut buffer size as parameter
- safer against misuses, suggested by Andrei Pelinescu-Onciul
- if size is less than INT2STR_MAX_LEN, return null pointer
(cherry picked from commit a765213ffa3769577dd7438c95737cb6b98bff74)

ut.h

diff --git a/ut.h b/ut.h
index 3e4d7a6..3d98e11 100644 (file)
--- a/ut.h
+++ b/ut.h
@@ -294,10 +294,15 @@ static inline char* int2str_base(unsigned int l, int* len, int base)
 
 /* print int to asciiz in a string buffer
  * - be sure result buffer is at least INT2STR_MAX_LEN in size */
-static inline char* int2strbuf(unsigned int l, char *r, int* len)
+static inline char* int2strbuf(unsigned int l, char *r, int r_size, int* len)
 {
        int i;
-       
+
+       if(unlikely(r_size<INT2STR_MAX_LEN)) {
+               if (len)
+                       *len = 0;
+               return 0; /* => if someone misuses it => crash (feature no. 1) */
+       }
        i=INT2STR_MAX_LEN-2;
        r[INT2STR_MAX_LEN-1]=0; /* null terminate */
        do{
@@ -316,7 +321,7 @@ extern char ut_buf_int2str[INT2STR_MAX_LEN];
 /* returns a pointer to a static buffer containing l in asciiz & sets len */
 static inline char* int2str(unsigned long l, int* len)
 {
-       return int2strbuf(l, ut_buf_int2str, len);
+       return int2strbuf(l, ut_buf_int2str, INT2STR_MAX_LEN, len);
 }
 
 /* Signed INTeger-TO-STRing: convers a long to a string