[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [57996] trunk/blender/source/blender/ editors/interface/interface_handlers.c: Fix #36001: crashing copying long strings in text buttons.

Brecht Van Lommel brechtvanlommel at pandora.be
Thu Jul 4 16:37:38 CEST 2013


Revision: 57996
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=57996
Author:   blendix
Date:     2013-07-04 14:37:38 +0000 (Thu, 04 Jul 2013)
Log Message:
-----------
Fix #36001: crashing copying long strings in text buttons.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/interface/interface_handlers.c

Modified: trunk/blender/source/blender/editors/interface/interface_handlers.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_handlers.c	2013-07-04 14:11:42 UTC (rev 57995)
+++ trunk/blender/source/blender/editors/interface/interface_handlers.c	2013-07-04 14:37:38 UTC (rev 57996)
@@ -1852,7 +1852,6 @@
 
 static bool ui_textedit_copypaste(uiBut *but, uiHandleButtonData *data, const int mode)
 {
-	char buf[UI_MAX_DRAW_STR] = {0};
 	char *str, *p, *pbuf;
 	int x;
 	bool changed = false;
@@ -1868,6 +1867,7 @@
 		p = pbuf = WM_clipboard_text_get(0);
 
 		if (p && p[0]) {
+			char buf[UI_MAX_DRAW_STR] = {0};
 			unsigned int y;
 			buf_len = 0;
 			while (*p && *p != '\r' && *p != '\n' && buf_len < UI_MAX_DRAW_STR - 1) {
@@ -1904,14 +1904,16 @@
 	/* cut & copy */
 	else if (ELEM(mode, UI_TEXTEDIT_COPY, UI_TEXTEDIT_CUT)) {
 		/* copy the contents to the copypaste buffer */
-		for (x = but->selsta; x <= but->selend; x++) {
-			if (x == but->selend)
-				buf[x] = '\0';
-			else
-				buf[(x - but->selsta)] = str[x];
-		}
+		int sellen = but->selend - but->selsta;
+		char *buf = MEM_callocN(sizeof(char)*(sellen + 1), "ui_textedit_copypaste");
 
+		for (x = 0; x < sellen; x++)
+			buf[x] = str[but->selsta + x];
+		buf[sellen] = '\0';
+
 		WM_clipboard_text_set(buf, 0);
+
+		MEM_freeN(buf);
 		
 		/* for cut only, delete the selection afterwards */
 		if (mode == UI_TEXTEDIT_CUT) {




More information about the Bf-blender-cvs mailing list