From 295b86a1a8efdfe4fb0d9dba6152eb956441603c Mon Sep 17 00:00:00 2001 From: John Tsiombikas Date: Thu, 30 Dec 2021 13:49:46 +0200 Subject: [PATCH] fixed: was potentially storing stack-allocated name strings in the trackmap --- Makefile | 3 +++ Makefile.android | 6 +++++- src/demosys.c | 10 +++++++++- src/demosys.h | 1 - src/rbtree.c | 6 ++++++ 5 files changed, 23 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 154c2ab..bf39c07 100644 --- a/Makefile +++ b/Makefile @@ -38,6 +38,9 @@ $(bin): $(obj) Makefile $(libs) %.w32.o: %.c $(CC) -o $@ $(CFLAGS) -c $< +$(libs_path)/%.a: + $(MAKE) -C libs + .PHONY: clean clean: rm -f $(obj) $(bin) diff --git a/Makefile.android b/Makefile.android index 8bc3714..0ce9be3 100644 --- a/Makefile.android +++ b/Makefile.android @@ -63,7 +63,11 @@ $(name).unsigned.apk: $(so64) $(so32) AndroidManifest.xml $(icons) mkdir -p apkbuild/assets/data apkbuild/assets/sdr cp -r data/* apkbuild/assets/data cp -r sdr/* apkbuild/assets/sdr - mkdir -p apkbuild/res/drawable-xhdpi apkbuild/res/drawable-hdpi apkbuild/res/drawable-mdpi apkbuild/res/drawable-ldpi + mkdir -p apkbuild/res/drawable-xxhdpi apkbuild/res/drawable-xxxhdpi + mkdir -p apkbuild/res/drawable-xhdpi apkbuild/res/drawable-hdpi + mkdir -p apkbuild/res/drawable-mdpi apkbuild/res/drawable-ldpi + cp data/icon192.png apkbuild/res/drawable-xxxhdpi/ic_launcher.png + cp data/icon144.png apkbuild/res/drawable-xxhdpi/ic_launcher.png cp data/icon96.png apkbuild/res/drawable-xhdpi/ic_launcher.png cp data/icon72.png apkbuild/res/drawable-hdpi/ic_launcher.png cp data/icon48.png apkbuild/res/drawable-mdpi/ic_launcher.png diff --git a/src/demosys.c b/src/demosys.c index f16f589..12c7a15 100644 --- a/src/demosys.c +++ b/src/demosys.c @@ -13,6 +13,7 @@ void regscr_testb(void); static void proc_screen_script(struct demoscreen *scr, struct ts_node *node); static void proc_track(struct ts_node *node, const char *pname); static long io_read(void *buf, size_t bytes, void *uptr); +static void del_rbnode(struct rbnode *node, void *cls); int dsys_init(const char *fname) @@ -26,6 +27,8 @@ int dsys_init(const char *fname) if(!(dsys.trackmap = rb_create(RB_KEY_STRING))) { return -1; } + rb_set_delete_func(dsys.trackmap, del_rbnode, 0); + dsys.track = darr_alloc(0, sizeof *dsys.track); dsys.value = darr_alloc(0, sizeof *dsys.value); @@ -291,7 +294,7 @@ int dsys_add_track(const char *name) anm_init_track(dsys.track + idx); - if(rb_insert(dsys.trackmap, (char*)name, (void*)(intptr_t)idx) == -1) { + if(rb_insert(dsys.trackmap, (char*)strdup_nf(name), (void*)(intptr_t)idx) == -1) { fprintf(stderr, "failed to insert to track map: %s\n", name); abort(); } @@ -312,3 +315,8 @@ float dsys_value(const char *name) int idx = dsys_find_track(name); return idx == -1 ? 0.0f : dsys.value[idx]; } + +static void del_rbnode(struct rbnode *node, void *cls) +{ + free(node->key); +} diff --git a/src/demosys.h b/src/demosys.h index ab829be..717ac4e 100644 --- a/src/demosys.h +++ b/src/demosys.h @@ -66,7 +66,6 @@ int dsys_add_screen(struct demoscreen *scr); /* demo event tracks */ int dsys_add_track(const char *name); int dsys_find_track(const char *name); - float dsys_value(const char *name); #endif /* DEMOSYS_H_ */ diff --git a/src/rbtree.c b/src/rbtree.c index 765e542..c87c945 100644 --- a/src/rbtree.c +++ b/src/rbtree.c @@ -128,6 +128,12 @@ int rb_size(struct rbtree *rb) int rb_insert(struct rbtree *rb, void *key, void *data) { +#ifndef NDEBUG + int stack_var; + if(abs((uintptr_t)&stack_var - (uintptr_t)key) < 0x80000) { + fprintf(stderr, "rb_insert warning: key seems to point to the stack\n"); + } +#endif rb->root = insert(rb, rb->root, key, data); rb->root->red = 0; return 0; -- 1.7.10.4