[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [34810] trunk/blender/source: enforce string limits ( reported by pedantic checking tools & some developers).

Campbell Barton ideasman42 at gmail.com
Sun Feb 13 04:21:44 CET 2011


Revision: 34810
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=34810
Author:   campbellbarton
Date:     2011-02-13 03:21:27 +0000 (Sun, 13 Feb 2011)
Log Message:
-----------
enforce string limits (reported by pedantic checking tools & some developers).
mostly replace strcpy with BLI_strncpy and multiple strcat's with a BLI_snprintf().
also fix possible crash if CWD isnt available.

Modified Paths:
--------------
    trunk/blender/source/blender/blenfont/intern/blf_dir.c
    trunk/blender/source/blender/blenfont/intern/blf_lang.c
    trunk/blender/source/blender/blenkernel/BKE_armature.h
    trunk/blender/source/blender/blenkernel/intern/armature.c
    trunk/blender/source/blender/blenkernel/intern/blender.c
    trunk/blender/source/blender/blenkernel/intern/boids.c
    trunk/blender/source/blender/blenkernel/intern/constraint.c
    trunk/blender/source/blender/blenkernel/intern/deform.c
    trunk/blender/source/blender/blenkernel/intern/exotic.c
    trunk/blender/source/blender/blenkernel/intern/font.c
    trunk/blender/source/blender/blenkernel/intern/idprop.c
    trunk/blender/source/blender/blenkernel/intern/object.c
    trunk/blender/source/blender/blenkernel/intern/pointcache.c
    trunk/blender/source/blender/blenkernel/intern/sequencer.c
    trunk/blender/source/blender/blenlib/BLI_path_util.h
    trunk/blender/source/blender/blenlib/intern/bpath.c
    trunk/blender/source/blender/blenlib/intern/path_util.c
    trunk/blender/source/blender/blenlib/intern/storage.c
    trunk/blender/source/blender/blenloader/BLO_writefile.h
    trunk/blender/source/blender/blenloader/intern/readfile.c
    trunk/blender/source/blender/blenloader/intern/writefile.c
    trunk/blender/source/blender/collada/DocumentImporter.cpp
    trunk/blender/source/blender/editors/armature/editarmature.c
    trunk/blender/source/blender/editors/interface/interface.c
    trunk/blender/source/blender/editors/interface/interface_draw.c
    trunk/blender/source/blender/editors/interface/interface_handlers.c
    trunk/blender/source/blender/editors/interface/resources.c
    trunk/blender/source/blender/editors/mesh/editmesh_loop.c
    trunk/blender/source/blender/editors/physics/physics_fluid.c
    trunk/blender/source/blender/editors/space_file/file_ops.c
    trunk/blender/source/blender/editors/space_file/filesel.c
    trunk/blender/source/blender/editors/space_sequencer/sequencer_add.c
    trunk/blender/source/blender/editors/space_sequencer/sequencer_edit.c
    trunk/blender/source/blender/makesdna/DNA_armature_types.h
    trunk/blender/source/blender/makesrna/intern/rna_sequencer.c
    trunk/blender/source/blender/makesrna/intern/rna_userdef.c
    trunk/blender/source/blender/modifiers/intern/MOD_collision.c
    trunk/blender/source/blender/modifiers/intern/MOD_explode.c
    trunk/blender/source/blender/modifiers/intern/MOD_fluidsim_util.c
    trunk/blender/source/blender/modifiers/intern/MOD_mask.c
    trunk/blender/source/blender/modifiers/intern/MOD_screw.c
    trunk/blender/source/blender/modifiers/intern/MOD_shapekey.c
    trunk/blender/source/blender/modifiers/intern/MOD_shrinkwrap.c
    trunk/blender/source/blender/modifiers/intern/MOD_simpledeform.c
    trunk/blender/source/blender/modifiers/intern/MOD_surface.c
    trunk/blender/source/blender/python/generic/IDProp.c
    trunk/blender/source/blender/render/intern/source/pipeline.c
    trunk/blender/source/blender/windowmanager/intern/wm_files.c
    trunk/blender/source/creator/creator.c

Modified: trunk/blender/source/blender/blenfont/intern/blf_dir.c
===================================================================
--- trunk/blender/source/blender/blenfont/intern/blf_dir.c	2011-02-13 02:55:23 UTC (rev 34809)
+++ trunk/blender/source/blender/blenfont/intern/blf_dir.c	2011-02-13 03:21:27 UTC (rev 34810)
@@ -125,20 +125,16 @@
 {
 	DirBLF *dir;
 	char full_path[FILE_MAXDIR+FILE_MAXFILE];
-	char *s;
-	
-	dir= global_font_dir.first;
-	s= NULL;
-	while (dir) {
-		BLI_join_dirfile(full_path, dir->path, file);
+	char *s= NULL;
+
+	for(dir=global_font_dir.first; dir; dir= dir->next) {
+		BLI_join_dirfile(full_path, sizeof(full_path), dir->path, file);
 		if (BLI_exist(full_path)) {
-			s= (char *)MEM_mallocN(strlen(full_path)+1,"blf_dir_search");
-			strcpy(s, full_path);
+			s= BLI_strdup(full_path);
 			break;
 		}
-		dir= dir->next;
 	}
-	
+
 	if (!s) {
 		/* check the current directory, why not ? */
 		if (BLI_exist(file))

Modified: trunk/blender/source/blender/blenfont/intern/blf_lang.c
===================================================================
--- trunk/blender/source/blender/blenfont/intern/blf_lang.c	2011-02-13 02:55:23 UTC (rev 34809)
+++ trunk/blender/source/blender/blenfont/intern/blf_lang.c	2011-02-13 03:21:27 UTC (rev 34810)
@@ -38,11 +38,11 @@
 #include "DNA_listBase.h"
 #include "DNA_vec_types.h"
 
+#include "MEM_guardedalloc.h"
 
-
-#include "BLI_blenlib.h"
 #include "BLI_linklist.h"	/* linknode */
 #include "BLI_string.h"
+#include "BLI_path_util.h"
 
 
 #ifdef __APPLE__
@@ -79,20 +79,14 @@
 #else
 	char *locreturn= setlocale(LC_ALL, str);
 	if (locreturn == NULL) {
-		char *lang;
+		char *lang= BLI_sprintfN("%s.UTF-8", str);
 
-		lang= (char*)malloc(sizeof(char)*(strlen(str)+7));
-
-		lang[0]= '\0';
-		strcat(lang, str);
-		strcat(lang, ".UTF-8");
-
 		locreturn= setlocale(LC_ALL, lang);
 		if (locreturn == NULL) {
 			printf("could not change language to %s nor %s\n", str, lang);
 		}
 
-		free(lang);
+		MEM_freeN(lang);
 	}
 
 	setlocale(LC_NUMERIC, "C");
@@ -100,12 +94,12 @@
 	textdomain(DOMAIN_NAME);
 	bindtextdomain(DOMAIN_NAME, global_messagepath);
 	/* bind_textdomain_codeset(DOMAIN_NAME, global_encoding_name); */
-	strcpy(global_language, str);
+	BLI_strncpy(global_language, str, sizeof(global_language));
 }
 
 void BLF_lang_encoding(const char *str)
 {
-	strcpy(global_encoding_name, str);
+	BLI_strncpy(global_encoding_name, str, sizeof(global_encoding_name));
 	/* bind_textdomain_codeset(DOMAIN_NAME, encoding_name); */
 }
 
@@ -116,7 +110,7 @@
 	return;
 }
 
-void BLF_lang_encoding(char *str)
+void BLF_lang_encoding(const char *str)
 {
 	(void)str;
 	return;

Modified: trunk/blender/source/blender/blenkernel/BKE_armature.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_armature.h	2011-02-13 02:55:23 UTC (rev 34809)
+++ trunk/blender/source/blender/blenkernel/BKE_armature.h	2011-02-13 03:21:27 UTC (rev 34810)
@@ -80,7 +80,7 @@
 void make_local_armature(struct bArmature *arm);
 struct bArmature *copy_armature(struct bArmature *arm);
 
-int bone_autoside_name (char *name, int strip_number, short axis, float head, float tail);
+int bone_autoside_name (char name[32], int strip_number, short axis, float head, float tail);
 
 struct Bone *get_named_bone (struct bArmature *arm, const char *name);
 

Modified: trunk/blender/source/blender/blenkernel/intern/armature.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/armature.c	2011-02-13 02:55:23 UTC (rev 34809)
+++ trunk/blender/source/blender/blenkernel/intern/armature.c	2011-02-13 03:21:27 UTC (rev 34810)
@@ -248,16 +248,15 @@
 }
 
 /* Finds the best possible extension to the name on a particular axis. (For renaming, check for unique names afterwards)
- * This assumes that bone names are at most 32 chars long!
  * 	strip_number: removes number extensions  (TODO: not used)
  *	axis: the axis to name on
  *	head/tail: the head/tail co-ordinate of the bone on the specified axis
  */
-int bone_autoside_name (char *name, int UNUSED(strip_number), short axis, float head, float tail)
+int bone_autoside_name (char name[MAXBONENAME], int UNUSED(strip_number), short axis, float head, float tail)
 {
 	unsigned int len;
-	char	basename[32]={""};
-	char 	extension[5]={""};
+	char	basename[MAXBONENAME]= "";
+	char 	extension[5]= "";
 
 	len= strlen(name);
 	if (len == 0) return 0;
@@ -350,13 +349,13 @@
 				}
 			}
 		}
-		
-		if ((32 - len) < strlen(extension) + 1) { /* add 1 for the '.' */
+
+		if ((MAXBONENAME - len) < strlen(extension) + 1) { /* add 1 for the '.' */
 			strncpy(name, basename, len-strlen(extension));
 		}
-		
-		sprintf(name, "%s.%s", basename, extension);
-		
+
+		BLI_snprintf(name, MAXBONENAME, "%s.%s", basename, extension);
+
 		return 1;
 	}
 

Modified: trunk/blender/source/blender/blenkernel/intern/blender.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/blender.c	2011-02-13 02:55:23 UTC (rev 34809)
+++ trunk/blender/source/blender/blenkernel/intern/blender.c	2011-02-13 03:21:27 UTC (rev 34810)
@@ -457,7 +457,7 @@
 		success= BKE_read_file_from_memfile(C, &uel->memfile, NULL);
 
 	/* restore */
-	strcpy(G.main->name, mainstr); /* restore */
+	BLI_strncpy(G.main->name, mainstr, sizeof(G.main->name)); /* restore */
 	G.fileflags= fileflags;
 
 	if(success) {
@@ -525,7 +525,7 @@
 	
 		success= BLO_write_file(CTX_data_main(C), tstr, G.fileflags, NULL, NULL);
 		
-		strcpy(curundo->str, tstr);
+		BLI_strncpy(curundo->str, tstr, sizeof(curundo->str));
 	}
 	else {
 		MemFile *prevfile=NULL;

Modified: trunk/blender/source/blender/blenkernel/intern/boids.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/boids.c	2011-02-13 02:55:23 UTC (rev 34809)
+++ trunk/blender/source/blender/blenkernel/intern/boids.c	2011-02-13 03:21:27 UTC (rev 34810)
@@ -1470,7 +1470,7 @@
 
 	rule->type = type;
 	rule->flag |= BOIDRULE_IN_AIR|BOIDRULE_ON_LAND;
-	strcpy(rule->name, boidrule_type_items[type-1].name);
+	BLI_strncpy(rule->name, boidrule_type_items[type-1].name, sizeof(rule->name));
 
 	return rule;
 }

Modified: trunk/blender/source/blender/blenkernel/intern/constraint.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/constraint.c	2011-02-13 02:55:23 UTC (rev 34809)
+++ trunk/blender/source/blender/blenkernel/intern/constraint.c	2011-02-13 03:21:27 UTC (rev 34810)
@@ -752,7 +752,7 @@
 			bConstraintTarget *ctn = ct->next; \
 			if (nocopy == 0) { \
 				datatar= ct->tar; \
-				strcpy(datasubtarget, ct->subtarget); \
+				BLI_strncpy(datasubtarget, ct->subtarget, sizeof(datasubtarget)); \
 				con->tarspace= (char)ct->space; \
 			} \
 			 \

Modified: trunk/blender/source/blender/blenkernel/intern/deform.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/deform.c	2011-02-13 02:55:23 UTC (rev 34809)
+++ trunk/blender/source/blender/blenkernel/intern/deform.c	2011-02-13 03:21:27 UTC (rev 34810)
@@ -348,20 +348,20 @@
 	len= strlen(from_name);
 	if(len<3) return; // we don't do names like .R or .L
 
-	strcpy(name, from_name);
+	BLI_strncpy(name, from_name, sizeof(name));
 
 	/* We first check the case with a .### extension, let's find the last period */
 	if(isdigit(name[len-1])) {
 		index= strrchr(name, '.'); // last occurrence
 		if (index && isdigit(index[1]) ) { // doesnt handle case bone.1abc2 correct..., whatever!
 			if(strip_number==0)
-				strcpy(number, index);
+				BLI_strncpy(number, index, sizeof(number));
 			*index= 0;
 			len= strlen(name);
 		}
 	}
 
-	strcpy (prefix, name);
+	BLI_strncpy(prefix, name, sizeof(prefix));
 
 #define IS_SEPARATOR(a) ((a)=='.' || (a)==' ' || (a)=='-' || (a)=='_')
 

Modified: trunk/blender/source/blender/blenkernel/intern/exotic.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/exotic.c	2011-02-13 02:55:23 UTC (rev 34809)
+++ trunk/blender/source/blender/blenkernel/intern/exotic.c	2011-02-13 03:21:27 UTC (rev 34810)
@@ -1652,7 +1652,7 @@
 	cent[2]= center[2];
 
 	dxf_get_mesh(scene, &me, &ob, noob);
-	strcpy(oldllay, layname);		
+	BLI_strncpy(oldllay, layname, sizeof(oldllay));
 	if(ob) VECCOPY(ob->loc, cent);
 	dxf_add_mat (ob, me, color, layname);
 

Modified: trunk/blender/source/blender/blenkernel/intern/font.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/font.c	2011-02-13 02:55:23 UTC (rev 34809)
+++ trunk/blender/source/blender/blenkernel/intern/font.c	2011-02-13 03:21:27 UTC (rev 34810)
@@ -96,13 +96,14 @@
 void
 wcs2utf8s(char *dst, wchar_t *src)
 {
-	char ch[5];
+	/* NULL terminator not needed */
+	char ch[4];
 
 	while(*src)
 	{
-		memset(ch, 0, 5);
+		memset(ch, 0, sizeof(ch));
 		chtoutf8(*src++, ch);
-		strcat(dst, ch);
+		dst= strncat(dst, ch, sizeof(ch));
 	}
 }
 
@@ -363,14 +364,14 @@
 	struct TmpFont *tmpfnt;
 	
 	if (strcmp(name, FO_BUILTIN_NAME)==0) {
-		strcpy(filename, name);
+		BLI_strncpy(filename, name, sizeof(filename));
 		
 		pf= get_builtin_packedfile();
 		is_builtin= 1;
 	} else {
 		char dir[FILE_MAXDIR];
 		
-		strcpy(dir, name);
+		BLI_strncpy(dir, name, sizeof(dir));
 		BLI_splitdirstring(dir, filename);
 
 		pf= newPackedFile(NULL, name);

Modified: trunk/blender/source/blender/blenkernel/intern/idprop.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/idprop.c	2011-02-13 02:55:23 UTC (rev 34809)
+++ trunk/blender/source/blender/blenkernel/intern/idprop.c	2011-02-13 03:21:27 UTC (rev 34810)
@@ -711,9 +711,9 @@
 				prop->len = 1; /*NULL string, has len of 1 to account for null byte.*/
 			} else {
 				int stlen = strlen(st) + 1;
-				prop->data.pointer = MEM_callocN(stlen, "id property string 2");
+				prop->data.pointer = MEM_mallocN(stlen, "id property string 2");
 				prop->len = prop->totallen = stlen;
-				strcpy(prop->data.pointer, st);
+				memcpy(prop->data.pointer, st, stlen);
 			}
 			break;
 		}

Modified: trunk/blender/source/blender/blenkernel/intern/object.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/object.c	2011-02-13 02:55:23 UTC (rev 34809)

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list