From e4febca4bd5346e3652cac308f47a3c1efac73b7 Mon Sep 17 00:00:00 2001 From: Annika Date: Sun, 5 Jul 2026 20:23:51 -0700 Subject: [PATCH] fixed out of bounds memory access during trapezoid drawing --- test | Bin 45312 -> 41256 bytes test.cpp | 21 +++++++++++++++------ 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/test b/test index 2ae5e071550d5f981fbf16b47a0bed75548035e6..c54dc493e3c244f3f53157b5411b96d5437b584e 100755 GIT binary patch literal 41256 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 diff --git a/test.cpp b/test.cpp index 4b3a9be..5586200 100644 --- a/test.cpp +++ b/test.cpp @@ -168,8 +168,8 @@ namespace UwU { int16_t yGrad[h]; // calculate gradient coefficients - Helpers::bresenham(0, w - 1, 255, xGrad); - Helpers::bresenham(0, h - 1, 255, yGrad); + Helpers::bresenham(0, 0, w - 1, 255, xGrad); + Helpers::bresenham(0, 0, h - 1, 255, yGrad); // for each point calculate, alpha blend and print color Color Lmix = Color(); @@ -236,10 +236,19 @@ namespace UwU { int16_t LeftBound[height]; int16_t RightBound[height]; - Helpers::bresenham(coords.xl0, coords.y1 - coords.y0, coords.xl1, LeftBound); - Helpers::bresenham(coords.xr0, coords.y1 - coords.y0, coords.xr1, RightBound); + Helpers::bresenham(0, coords.xl0, coords.y1 - coords.y0, coords.xl1, LeftBound); + Helpers::bresenham(0, coords.xr0, coords.y1 - coords.y0, coords.xr1, RightBound); - for (uint16_t i = 0; i <= height; i++) { + printf("leftbound\n"); + for (uint16_t i = 0; i < height; i++) { + printf("(%u, %u)\n", i, LeftBound[i]); + } + printf("rightbound\n"); + for (uint16_t i = 0; i < height; i++) { + printf("(%u, %u)\n", i, RightBound[i]); + } + + for (uint16_t i = 0; i < height; i++) { for (uint16_t x = LeftBound[i]; x <= RightBound[i]; x++) { // printf("(%u, %u)", x, i + coords.y0); putPixel((uint32_t)x, (uint32_t)i + coords.y0, color.r, color.g, color.b, color.a); @@ -364,7 +373,7 @@ int main(void) { draw.rectangleGradient(UwU::Coord2(200, 200), UwU::Coord2(600, 400), red, blue, alpha, red); draw.trapezoid(UwU::Trapezoid(300, 400, 360, 380, 600, 400), green); - draw.triangle(UwU::Triangle(200, 100, 240, 200, 320, 300), green); + draw.triangle(UwU::Triangle(200, 100, 240, 300, 320, 300), green); draw.point(UwU::Coord2(387, 43), green);