fixed: was potentially storing stack-allocated name strings in the trackmap
authorJohn Tsiombikas <nuclear@member.fsf.org>
Thu, 30 Dec 2021 11:49:46 +0000 (13:49 +0200)
committerJohn Tsiombikas <nuclear@member.fsf.org>
Thu, 30 Dec 2021 11:49:46 +0000 (13:49 +0200)
Makefile
Makefile.android
src/demosys.c
src/demosys.h
src/rbtree.c

index 154c2ab..bf39c07 100644 (file)
--- 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)
index 8bc3714..0ce9be3 100644 (file)
@@ -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
index f16f589..12c7a15 100644 (file)
@@ -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);
+}
index ab829be..717ac4e 100644 (file)
@@ -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_ */
index 765e542..c87c945 100644 (file)
@@ -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;