[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[sc-dev] SF.net SVN: supercollider:[8267] trunk/Source/lang/LangPrimSource/ PyrUStringPrim.cpp



Revision: 8267
          http://supercollider.svn.sourceforge.net/supercollider/?rev=8267&view=rev
Author:   ctrl-t
Date:     2008-12-23 22:04:03 +0000 (Tue, 23 Dec 2008)

Log Message:
-----------
prString_FindRegexp EXC_BAD_ACCESS fix 1

Modified Paths:
--------------
    trunk/Source/lang/LangPrimSource/PyrUStringPrim.cpp

Modified: trunk/Source/lang/LangPrimSource/PyrUStringPrim.cpp
===================================================================
--- trunk/Source/lang/LangPrimSource/PyrUStringPrim.cpp	2008-12-23 20:24:51 UTC (rev 8266)
+++ trunk/Source/lang/LangPrimSource/PyrUStringPrim.cpp	2008-12-23 22:04:03 UTC (rev 8267)
@@ -38,7 +38,7 @@
 #include "PyrKernel.h"
 #include "GC.h"
 
-#define MAXREGEXFIND 100;
+#define MAXREGEXFIND 256;
 
 
 struct SCRegExRegion {
@@ -56,14 +56,17 @@
 	PyrSlot *c = g->sp;     // offset
 		
 	if (!isKindOfSlot(b, class_string) || (c->utag != tagInt)) return errWrongType;
+//	post("prString_FindRegexp\n");
 	int maxfind = MAXREGEXFIND;
 	int offset = c->ui;
 	int stringsize = a->uo->size + 1;
 	int patternsize =  b->uo->size + 1;
 	char *string = (char*)malloc(a->uo->size + 1);
 	err = slotStrVal(a, string, a->uo->size + 1);
-	if (err) return err;
-	
+	if (err){
+		free(string);
+		return err;
+	}
 	char *pattern = (char*)malloc(b->uo->size + 1);
 	err = slotStrVal(b, pattern, b->uo->size + 1);
 	if (err) return err;
@@ -78,6 +81,7 @@
 	ustring =  (UChar*)malloc((stringsize)*sizeof(UChar));
 	u_charsToUChars (string+offset, ustring, stringsize-offset);
 
+
 	unsigned flags = UREGEX_MULTILINE;
 	int groupNumber = 0;
 	SCRegExRegion * what;
@@ -135,7 +139,9 @@
 					int match_start =  what[i].start;
 					int match_length = what[i].end -  what[i].start;
 //					post("for i:%i, start %i, end %i\n",  i, what[i].start,  what[i].end);
-					char *match = (char*)malloc(match_length);
+//					char *match = (char*)malloc(match_length);
+					char match[match_length];
+
 					strncpy(match, string + offset + match_start, match_length);
 					match[match_length] = 0;
 					PyrObject *array = newPyrArray(g->gc, 2, 0, true);
@@ -154,17 +160,24 @@
 		else
 		{
 			SetNil(a);
-			return errNone;
 		}
-	
+		 free(what);
+		 free(pattern);
+		 free(regexStr);
+		 free(ustring);	
+		 free(string);
 		SetObject(a, result_array);
 		g->gc->GCWrite(result_array,a);
-		free(what);
 		//uregex_close(expression);
 		return errNone;	
 	}
 
 		nilout:
+			free(string);
+			free(what);
+			free(pattern);
+			free(regexStr);
+			free(ustring);
 			SetNil(a);
 			return errNone;
 }


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.

_______________________________________________
sc-dev mailing list

info (subscription, etc.): http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml
archive: https://listarc.bham.ac.uk/marchives/sc-dev/
search: https://listarc.bham.ac.uk/lists/sc-dev/search/