fix: sanitizer checks fix (iteration 1)
This commit is contained in:
+18
-1
@@ -42,6 +42,7 @@ fzl_vm_t *fzl_mkvm(const char *filepath)
|
||||
if (!fd)
|
||||
{
|
||||
snprintf(last_err, sizeof(last_err), "failed to open file '%s'", filepath);
|
||||
free(vm);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -50,6 +51,8 @@ fzl_vm_t *fzl_mkvm(const char *filepath)
|
||||
if (memcmp(hdr, expect_hdr, 5) != 0)
|
||||
{
|
||||
snprintf(last_err, sizeof(last_err), "magic check error");
|
||||
fclose(fd);
|
||||
free(vm);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -60,6 +63,8 @@ fzl_vm_t *fzl_mkvm(const char *filepath)
|
||||
if (ops_count < 1)
|
||||
{
|
||||
snprintf(last_err, sizeof(last_err), "there is nothing to do (0 ops)");
|
||||
fclose(fd);
|
||||
free(vm);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -89,6 +94,9 @@ fzl_vm_t *fzl_mkvm(const char *filepath)
|
||||
}
|
||||
else
|
||||
{
|
||||
fclose(fd);
|
||||
free(vm->consts);
|
||||
free(vm);
|
||||
snprintf(last_err, sizeof(last_err), "unknown const type at index %ld",
|
||||
i);
|
||||
return NULL;
|
||||
@@ -104,6 +112,7 @@ fzl_vm_t *fzl_mkvm(const char *filepath)
|
||||
fread(&op, sizeof(uint64_t), 1, fd);
|
||||
vm->ops[i] = op;
|
||||
}
|
||||
fclose(fd);
|
||||
|
||||
return vm;
|
||||
}
|
||||
@@ -732,6 +741,14 @@ int fzl_vm_run(fzl_vm_t *vm)
|
||||
}
|
||||
}
|
||||
|
||||
if (wrlvl <= -1)
|
||||
{
|
||||
snprintf(last_err, sizeof(last_err),
|
||||
"runtime error - name '%s' not found in this scope", wrname);
|
||||
print_err_data(vm);
|
||||
return -1;
|
||||
}
|
||||
|
||||
fzl_vm_env_wresult_t wresult =
|
||||
fzl_env_writevalue(vm->estack[wrlvl], (char *)wrname, value);
|
||||
if (wresult != FZL_VM_ENV_WRESULT_OK)
|
||||
@@ -825,7 +842,7 @@ int fzl_vm_run(fzl_vm_t *vm)
|
||||
else if (fn_id == FZL_BUILTIN_EXIT)
|
||||
{
|
||||
fzl_value_t arg = vm->dstack[--vm->dtop];
|
||||
exit(arg.as.i);
|
||||
return arg.as.i;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
+10
-1
@@ -49,6 +49,7 @@ run_args_t *parse_args(int argc, char **argv)
|
||||
{
|
||||
printf("Error: unknown flag '%s'.\n", argv[i]);
|
||||
printf("Use 'fz --help' to read the usage\n");
|
||||
free(args);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
@@ -57,6 +58,7 @@ run_args_t *parse_args(int argc, char **argv)
|
||||
{
|
||||
printf("Error: last argument MUST be a file path\n");
|
||||
printf("Use 'fz --help' for help\n");
|
||||
free(args);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -73,6 +75,7 @@ int main(int argc, char **argv)
|
||||
else if (args->help)
|
||||
{
|
||||
print_hint();
|
||||
free(args);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -80,6 +83,7 @@ int main(int argc, char **argv)
|
||||
if (!vm)
|
||||
{
|
||||
printf("Error: %s\n", fzl_vm_geterror());
|
||||
free(args);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -90,7 +94,12 @@ int main(int argc, char **argv)
|
||||
int result = fzl_vm_run(vm);
|
||||
if (result != 0)
|
||||
{
|
||||
printf("Error: %s\n", fzl_vm_geterror());
|
||||
char *err = fzl_vm_geterror();
|
||||
if (err && err[0])
|
||||
printf("Error: %s\n", err);
|
||||
|
||||
free(args);
|
||||
fzl_freevm(vm);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user