From e0b5c8457b93d2caa9d7959a28960cd456bbd61d Mon Sep 17 00:00:00 2001 From: MihailRis Date: Fri, 5 Dec 2025 22:41:19 +0300 Subject: [PATCH 1/2] fix corrupted voxel reset --- src/voxels/GlobalChunks.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/voxels/GlobalChunks.cpp b/src/voxels/GlobalChunks.cpp index e284fa07c..cbde6f9c6 100644 --- a/src/voxels/GlobalChunks.cpp +++ b/src/voxels/GlobalChunks.cpp @@ -58,7 +58,7 @@ static void check_voxels(const ContentIndices& indices, Chunk& chunk) { abort(); #endif } - chunk.voxels[i].id = BLOCK_AIR; + chunk.voxels[i] = {}; } } } From ba405ee6fc1541c2e84f62a6a047da711a313ff4 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Fri, 5 Dec 2025 22:41:33 +0300 Subject: [PATCH 2/2] fix libpng error handling --- src/coders/png.cpp | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/coders/png.cpp b/src/coders/png.cpp index a6c3f9e64..7c469e32f 100644 --- a/src/coders/png.cpp +++ b/src/coders/png.cpp @@ -164,12 +164,22 @@ static void read_in_memory(png_structp pngPtr, png_bytep dst, png_size_t toread) reader.offset += toread; } +void png_error_handler(png_structp pngPtr, png_const_charp errorMessage) { + logger.error() << "libpng error: " << errorMessage; + if (pngPtr) { + longjmp(png_jmpbuf(pngPtr), 1); + } + abort(); // Should not be reached if longjmp works +} + std::unique_ptr png::load_image(const ubyte* bytes, size_t size) { if (size < 8 || !png_check_sig(bytes, 8)) { throw std::runtime_error("invalid png signature"); } png_structp pngPtr = nullptr; - pngPtr = png_create_read_struct(PNG_LIBPNG_VER_STRING, nullptr, nullptr, nullptr); + pngPtr = png_create_read_struct( + PNG_LIBPNG_VER_STRING, nullptr, png_error_handler, nullptr + ); if (pngPtr == nullptr) { throw std::runtime_error("failed png_create_read_struct"); } @@ -180,6 +190,11 @@ std::unique_ptr png::load_image(const ubyte* bytes, size_t size) { throw std::runtime_error("failed png_create_info_struct"); } + if (setjmp(png_jmpbuf(pngPtr))) { + png_destroy_read_struct(&pngPtr, &infoPtr, nullptr); + throw std::runtime_error("failed to decode png"); + } + InMemoryReader reader {bytes, size, 0}; png_set_read_fn(pngPtr, &reader, read_in_memory);