From 12b19fab33a097c8ff7335eee4ef0f9bf7047790 Mon Sep 17 00:00:00 2001 From: Michael Ochmann Date: Wed, 22 Feb 2023 17:04:13 +0100 Subject: [PATCH] fixed illegal memory accesses --- src/PNGRenderer.hpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/PNGRenderer.hpp b/src/PNGRenderer.hpp index 8fa5587..065e508 100644 --- a/src/PNGRenderer.hpp +++ b/src/PNGRenderer.hpp @@ -5,6 +5,7 @@ #include #include #include +#include #include "stb_image_write.hpp" #include "Renderer.hpp" @@ -21,7 +22,7 @@ class PNGRenderer : public Renderer { std::vector bitmap; void drawPixelScaled(size_t x, size_t y, Color color) { - size_t pixelSize = this->targetSize / (this->sourceSize + 2); + size_t pixelSize = floor(static_cast(this->targetSize) / static_cast(this->sourceSize + 2)); if (pixelSize < 1) { std::cerr << "ERROR: output file size is too small" << std::endl; @@ -41,19 +42,20 @@ class PNGRenderer : public Renderer { public: PNGRenderer(const std::vector& pixels, size_t sourceSize, size_t targetSize) : Renderer(pixels, sourceSize, targetSize) { if (this->targetSize == 0) - this->targetSize = sourceSize; - this->bitmap = std::vector(targetSize * targetSize, 0xFFFFFFFF); + this->targetSize = (sourceSize + 2) * 2; + this->bitmap = std::vector(this->targetSize * this->targetSize, PNGRenderer::WHITE); } virtual void render(const std::string& filename) override { for (size_t y = 0; y < sourceSize; y++) { for (size_t x = 0; x < sourceSize; x++) { - Color color = pixels.at(y * sourceSize + x) ? PNGRenderer::BLACK : PNGRenderer::WHITE; - this->drawPixelScaled(x, y, color); + if (!pixels.at(y * sourceSize + x)) + continue; + this->drawPixelScaled(x, y, PNGRenderer::BLACK); } } - stbi_write_png(filename.c_str(), targetSize, targetSize, 4, this->bitmap.data(), targetSize * sizeof(Color)); + stbi_write_png(filename.c_str(), targetSize, targetSize, 4, this->bitmap.data(), sizeof(Color) * targetSize); } };