diff --git a/src/b_asprintf.h b/src/b_asprintf.h index 5b539f67..4ad3be0f 100644 --- a/src/b_asprintf.h +++ b/src/b_asprintf.h @@ -41,7 +41,7 @@ int vasprintf(char **strp, const char *format, va_list ap) { int len = vscprintf(format, ap); if (len == -1) return -1; - char *str = (char *)malloc((len + 1) * sizeof(char)); + char *str = (char *)calloc(len + 1, sizeof(char)); if (!str) return -1; int retval = vsnprintf(str, len + 1, format, ap); diff --git a/src/b_string.c b/src/b_string.c index a6855dbd..f60b0594 100644 --- a/src/b_string.c +++ b/src/b_string.c @@ -657,8 +657,12 @@ DECLARE_STRING_METHOD(match) { for (int i = 0; i < (int)name_count; i++) { int n = (tab_ptr[0] << 8) | tab_ptr[1]; - char *_key = malloc(sizeof(char *)); - char *_val = malloc(sizeof(char *)); + char *_key = malloc(sizeof(char)); + memset(_key, 0, sizeof(char)); + + char *_val = malloc(sizeof(char)); + memset(_val, 0, sizeof(char)); + sprintf(_key, "%*s", name_entry_size - 3, tab_ptr + 2); sprintf(_val, "%*s", (int)(o_vector[2 * n + 1] - o_vector[2 * n]), subject + o_vector[2 * n]); @@ -779,8 +783,12 @@ DECLARE_STRING_METHOD(matches) { for (i = 0; i < (int)name_count; i++) { int n = (tab_ptr[0] << 8) | tab_ptr[1]; - char *_key = malloc(sizeof(char *)); - char *_val = malloc(sizeof(char *)); + char *_key = malloc(sizeof(char)); + memset(_key, 0, sizeof(char)); + + char *_val = malloc(sizeof(char)); + memset(_val, 0, sizeof(char)); + sprintf(_key, "%*s", name_entry_size - 3, tab_ptr + 2); sprintf(_val, "%*s", (int)(o_vector[2 * n + 1] - o_vector[2 * n]), subject + o_vector[2 * n]); @@ -896,8 +904,12 @@ DECLARE_STRING_METHOD(matches) { for (i = 0; i < (int)name_count; i++) { int n = (tab_ptr[0] << 8) | tab_ptr[1]; - char *_key = malloc(sizeof(char *)); - char *_val = malloc(sizeof(char *)); + char *_key = malloc(sizeof(char)); + memset(_key, 0, sizeof(char)); + + char *_val = malloc(sizeof(char)); + memset(_val, 0, sizeof(char)); + sprintf(_key, "%*s", name_entry_size - 3, tab_ptr + 2); sprintf(_val, "%*s", (int)(o_vector[2 * n + 1] - o_vector[2 * n]), subject + o_vector[2 * n]); diff --git a/src/compiler.c b/src/compiler.c index 3015fbd7..09483048 100644 --- a/src/compiler.c +++ b/src/compiler.c @@ -1038,7 +1038,7 @@ static int read_unicode_escape(b_parser *p, char *string, char *real_string, } static char *compile_string(b_parser *p) { - char *str = (char *)malloc(sizeof(char) * ((p->previous.length - (p->had_error ? 1 : 2)) + 1)); + char *str = (char *)calloc((p->previous.length - (p->had_error ? 1 : 2)) + 1, sizeof(char)); char *real = (char *)(p->previous.start + (p->had_error ? 0 : 1)); int real_length = p->previous.length - (p->had_error ? 1 : 2); diff --git a/src/memory.c b/src/memory.c index 419cf197..7561d9da 100644 --- a/src/memory.c +++ b/src/memory.c @@ -229,7 +229,7 @@ static void free_object(b_vm *vm, b_obj *object) { case OBJ_FUNCTION: { b_obj_func *function = (b_obj_func *)object; free_blob(vm, &function->blob); - // free((void *)function->file); + function->file = NULL; FREE(b_obj_func, object); break; } @@ -320,6 +320,7 @@ void free_objects(b_vm *vm) { } free(vm->gray_stack); + vm->gray_stack = NULL; } void collect_garbage(b_vm *vm) { diff --git a/src/module.c b/src/module.c index 07d96a60..b886de5f 100644 --- a/src/module.c +++ b/src/module.c @@ -27,7 +27,9 @@ void bind_native_modules(b_vm *vm, b_obj_string *module_name, if (is_core_library_file((char *) module_path, module_name->chars)) { for (int i = 0; modules[i].name != NULL; i++) { - if (memcmp(modules[i].name, module_name->chars, module_name->length) == + int _module_name_length = (int)strlen(modules[i].name); + if (_module_name_length == module_name->length && + memcmp(modules[i].name, module_name->chars, _module_name_length) == 0) { b_module_reg module = modules[i].module_func(vm); diff --git a/src/object.c b/src/object.c index f2730556..4f9faa25 100644 --- a/src/object.c +++ b/src/object.c @@ -326,7 +326,7 @@ static inline char *function_to_string(b_obj_func *func) { if (func->name == NULL) { return "