summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJelle Raaijmakers <jelle@gmta.nl>2023-04-18 23:55:57 +0200
committerAndreas Kling <kling@serenityos.org>2023-04-19 06:05:10 +0200
commit0e8ef1b8862a7acd3edfedb9b19f1ca2cb837220 (patch)
tree778896fd8e509abc969dfc6e8dee2ec9042b5118
parent8dc55f5fdada0cf0a5abd38ea09b31e8ac0c8cb8 (diff)
downloadserenity-0e8ef1b8862a7acd3edfedb9b19f1ca2cb837220.zip
LibGfx: Prevent out-of-bounds accumulation in PathRasterizer
Negative accumulation on the right-hand side of the accumulation bitmap would wrap around to the left, causing a negative start for certain lines which resulted in horizontal streaks of lower alpha values. Prevent this by not writing out of bounds :^) Fixes #18394
-rw-r--r--Userland/Libraries/LibGfx/Font/PathRasterizer.cpp3
1 files changed, 2 insertions, 1 deletions
diff --git a/Userland/Libraries/LibGfx/Font/PathRasterizer.cpp b/Userland/Libraries/LibGfx/Font/PathRasterizer.cpp
index 4eb56a398d..51b4c1032f 100644
--- a/Userland/Libraries/LibGfx/Font/PathRasterizer.cpp
+++ b/Userland/Libraries/LibGfx/Font/PathRasterizer.cpp
@@ -102,7 +102,8 @@ void PathRasterizer::draw_line(Gfx::FloatPoint p0, Gfx::FloatPoint p1)
// If x0 and x1 are within the same pixel, then area to the right is (1 - (mid(x0, x1) - x0_floor)) * dy
float area = .5f * (x0 + x1) - x0_floor;
m_data[line_offset + x0_floor_i] += directed_dy * (1.f - area);
- m_data[line_offset + x0_floor_i + 1] += directed_dy * area;
+ if (x0_floor_i + 1 < static_cast<u32>(m_size.width()))
+ m_data[line_offset + x0_floor_i + 1] += directed_dy * area;
} else {
float x0_right = 1.f - (x0 - x0_floor);
u32 x1_floor_i = floorf(x1);