]> git.rm.cloudns.org Git - xonotic/netradiant.git/commitdiff
q3map2: add safe string copy functions
authorBen Noordhuis <info@bnoordhuis.nl>
Sat, 17 Mar 2012 23:34:31 +0000 (00:34 +0100)
committerBen Noordhuis <info@bnoordhuis.nl>
Sun, 18 Mar 2012 01:17:09 +0000 (02:17 +0100)
* Q_strncpyz()
* Q_strncat()
* Q_strcat()

Guard against buffer overruns, always zero terminate the result.

tools/quake3/q3map2/main.c
tools/quake3/q3map2/q3map2.h

index 2ea7c9236160f6c7706598f828f097d088d1af3c..e74a89cfc76141b124fc1f030a59b61d3a1cc9ef 100644 (file)
@@ -46,6 +46,38 @@ vec_t Random( void ){
 }
 
 
+char *Q_strncpyz( char *dst, const char *src, size_t len ) {
+       if ( len == 0 ) {
+               abort();
+       }
+
+       strncpy( dst, src, len );
+       dst[ len - 1 ] = '\0';
+       return dst;
+}
+
+
+char *Q_strcat( char *dst, size_t dlen, const char *src ) {
+       size_t n = strlen( dst  );
+
+       if ( n > dlen ) {
+               abort(); /* buffer overflow */
+       }
+
+       return Q_strncpyz( dst + n, src, dlen - n );
+}
+
+
+char *Q_strncat( char *dst, size_t dlen, const char *src, size_t slen ) {
+       size_t n = strlen( dst );
+
+       if ( n > dlen ) {
+               abort(); /* buffer overflow */
+       }
+
+       return Q_strncpyz( dst + n, src, MIN( slen, dlen - n ) );
+}
+
 
 /*
    ExitQ3Map()
index bb7569152870610c4cf480c17c3780515a3eab38..245e34c6cb34298ff989684bcf3db4adbc129f32 100644 (file)
@@ -83,6 +83,8 @@
 
 #include <stdlib.h>
 
+#define MIN(a, b) ((a) < (b) ? (a) : (b))
+#define MAX(a, b) ((a) > (b) ? (a) : (b))
 
 
 /* -------------------------------------------------------------------------------
@@ -1446,6 +1448,9 @@ surfaceInfo_t;
 
 /* main.c */
 vec_t                       Random( void );
+char                        *Q_strncpyz( char *dst, const char *src, size_t len );
+char                        *Q_strcat( char *dst, size_t dlen, const char *src );
+char                        *Q_strncat( char *dst, size_t dlen, const char *src, size_t slen );
 int                         BSPInfo( int count, char **fileNames );
 int                         ScaleBSPMain( int argc, char **argv );
 int                         ConvertMain( int argc, char **argv );