From 566fc9f76a0ea323a93af275cdc29d8183c1e510 Mon Sep 17 00:00:00 2001 From: "Joseph C. Sible" Date: Thu, 25 Dec 2025 17:42:00 -0500 Subject: [PATCH 1/4] Fix two potential use-after-frees in monster's refcount code --- shmup.cpp | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/shmup.cpp b/shmup.cpp index 1a4f1fff..ee0f8169 100644 --- a/shmup.cpp +++ b/shmup.cpp @@ -83,15 +83,10 @@ struct monster { void rebasePat(const shiftmatrix& new_pat, cell *tgt); - void remove_reference() { - refs--; - if(!refs) { - if(parent) parent->remove_reference(); - delete this; - } - } + void remove_reference(); void set_parent(monster *par) { + if(parent == par) return; if(parent) parent->remove_reference(); parent = par; parent->refs++; @@ -128,6 +123,15 @@ typedef multimap::iterator mit; EX vector active, nonvirtual, additional; +void monster::remove_reference() { + refs--; + if(!refs) { + if(parent) parent->remove_reference(); + nonvirtual.erase(std::remove(nonvirtual.begin(), nonvirtual.end(), this), nonvirtual.end()); + delete this; + } + } + cell *findbaseAround(shiftpoint p, cell *around, int maxsteps) { if(quotient || fake::split()) { From d6efc2b99b29712d06cd47c57fc94c525bccc31a Mon Sep 17 00:00:00 2001 From: "Joseph C. Sible" Date: Mon, 16 Feb 2026 20:42:21 -0500 Subject: [PATCH 2/4] Fix #494: Add libpng-dev to list of packages to install --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 142c5ca9..f475d924 100644 --- a/README.md +++ b/README.md @@ -51,7 +51,7 @@ not the data, which is available on [itch.io](https://zenorogue.itch.io/rogueviz On Linux with apt-get: -```sudo apt-get install make g++ libsdl1.2-dev libsdl-ttf2.0-dev libsdl-gfx1.2-dev libsdl-mixer1.2-dev libglew-dev``` +```sudo apt-get install make g++ libsdl1.2-dev libsdl-ttf2.0-dev libsdl-gfx1.2-dev libsdl-mixer1.2-dev libglew-dev libpng-dev``` On macOS with Homebrew: From 330ba7588961d236c1841bccf1e8f5fb8052d1b5 Mon Sep 17 00:00:00 2001 From: "Joseph C. Sible" Date: Tue, 17 Feb 2026 21:05:58 -0500 Subject: [PATCH 3/4] Fix #496: Log why get_display_modes needs to use fallback values --- config.cpp | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/config.cpp b/config.cpp index 101a1880..c2f2b41c 100644 --- a/config.cpp +++ b/config.cpp @@ -1075,8 +1075,18 @@ EX vector get_display_modes(char which) { #if SDLVER >= 2 SDL_DisplayMode mode; - for(int m=0; m get_display_modes(char which) { #else SDL_Rect **modes = SDL_ListModes(nullptr, 0); - if(modes && modes != (SDL_Rect**)-1) for(int i=0; modes[i]; i++) { + if(!modes) + println(hlog, "SDL_ListModes: No modes available!"); + else if(modes == (SDL_Rect**)-1) + println(hlog, "SDL_ListModes: All resolutions available."); + else if(!*modes) + println(hlog, "SDL_ListModes returned an empty array"); + else for(int i=0; modes[i]; i++) { if(which == 'x') seen.insert(modes[i]->w); if(which == 'y') seen.insert(modes[i]->h); } From 5fa35e5214e6ea3079737e065dad982eecdecf70 Mon Sep 17 00:00:00 2001 From: "Joseph C. Sible" Date: Tue, 17 Feb 2026 21:13:27 -0500 Subject: [PATCH 4/4] Add missing override keywords to hopefully fix CI --- rogueviz/embeddings/compare.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rogueviz/embeddings/compare.cpp b/rogueviz/embeddings/compare.cpp index 81c3e664..b4bc4c9a 100644 --- a/rogueviz/embeddings/compare.cpp +++ b/rogueviz/embeddings/compare.cpp @@ -164,7 +164,7 @@ struct dmercator_embedding : abstract_embedding { virtual string name() override { return "dmercator"; } eGeometryClass get_geometry() override { return gcHyperbolic; } int get_dimension() override { return 3; } - hyperpoint as_hyperpoint(int id) { + hyperpoint as_hyperpoint(int id) override { auto& mc = mcs[id]; hyperpoint h; for(int i=0; i<3; i++) @@ -175,7 +175,7 @@ struct dmercator_embedding : abstract_embedding { ld zero_distance(int id) override { return mcs[id].distance; } - ld distance(int a, int b) { + ld distance(int a, int b) override { if(a == b) return ld(0); ld da = mcs[a].distance; ld db = mcs[b].distance;