[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/