on master help sign in
Fix segfault in MKSTR
0d5c5b6Edwin Brady
rts/idris_rts.c+12−3
@@ -146,12 +146,21 @@ VAL MKFLOAT(VM* vm, double val) {
146}
146}
147
147
148VAL MKSTR(VM* vm, char* str) {
148VAL MKSTR(VM* vm, char* str) {
149+ int len;
150+ if (str == NULL) {
151+ len = 0;
152+ } else {
153+ len = strlen(str)+1;
154+ }
149 Closure* cl = allocate(vm, sizeof(Closure) + // Type) + sizeof(char*) +
155 Closure* cl = allocate(vm, sizeof(Closure) + // Type) + sizeof(char*) +
150− sizeof(char)*strlen(str)+1, 0);
156+ sizeof(char)*len, 0);
151 SETTY(cl, STRING);
157 SETTY(cl, STRING);
152 cl -> info.str = (char*)cl + sizeof(Closure);
158 cl -> info.str = (char*)cl + sizeof(Closure);
153−
159+ if (str == NULL) {
160+ cl->info.str = NULL;
161+ } else {
154− strcpy(cl -> info.str, str);
162+ strcpy(cl -> info.str, str);
163+ }
155 return cl;
164 return cl;
156}
165}
157
166