Use u_char instead of char to avoid buffer overflow error

This commit is contained in:
CSDUMMI 2025-05-10 17:47:09 +02:00
parent c37f91d2d2
commit 47406b5def

22
wai.c
View file

@ -54,7 +54,7 @@ struct stack {
struct module {
struct type_t *types;
char *funcs[128];
u_char *funcs[128];
struct table_t *tables;
struct mem_t *mems;
struct global_t *globals;
@ -63,7 +63,7 @@ struct module {
struct start_t *start;
struct import_t *imports;
struct export_t *exports;
char *binary;
u_char *binary;
struct stack stack;
int scope;
};
@ -111,7 +111,7 @@ double stack_top(struct stack *s) {
return s->items[s->count-1];
}
int parse_type(char *binary, int len) {
int parse_type(u_char *binary, int len) {
int i = 0;
enum TYPE param = binary[i];
printf("type %x\n", param);
@ -131,11 +131,11 @@ int parse_type(char *binary, int len) {
return i;
}
int parse_function(struct module *module, char *binary, double param, int len);
int parse_instruction(struct module *module, char *binary, double param, int len) {
int parse_function(struct module *module, u_char *binary, double param, int len);
int parse_instruction(struct module *module, u_char *binary, double param, int len) {
int i = 0;
enum INSTRUCTION instr = (u_char) binary[i];
char *instr_addr = &binary[i];
u_char *instr_addr = &binary[i];
incr(i, len);
switch (instr) {
@ -205,7 +205,7 @@ int parse_instruction(struct module *module, char *binary, double param, int len
return i;
}
int parse_function(struct module *module, char *binary, double param, int len) {
int parse_function(struct module *module, u_char *binary, double param, int len) {
int i = 0;
int body_size = binary[i];
incr(i, len);
@ -219,7 +219,7 @@ int parse_function(struct module *module, char *binary, double param, int len) {
return i;
}
int parse_section(struct module *module, char *binary, int len) {
int parse_section(struct module *module, u_char *binary, int len) {
int i = 0;
enum section type = binary[i];
incr(i, len);
@ -314,9 +314,9 @@ int parse_section(struct module *module, char *binary, int len) {
return i;
}
int parse_module(char *binary, size_t len) {
int parse_module(u_char *binary, size_t len) {
int i = 0;
char *magic = "\0asm";
u_char *magic = "\0asm";
while (i < 4) {
if (binary[i] != magic[i]) {
fprintf(stderr, "no wasm magic\n");
@ -355,7 +355,7 @@ int main(int argc, char **argv) {
stat(argv[1], &st);
printf("size: %ld\n", st.st_size);
char *binary = malloc(st.st_size);
unsigned char *binary = malloc(st.st_size);
fread(binary, st.st_size, st.st_size, file);
if (parse_module(binary, st.st_size) == -1) {