LibWeb: Ignore non-finite shadow offset values

This commit is contained in:
Tim Ledbetter 2025-10-21 10:11:33 +01:00 committed by Jelle Raaijmakers
parent b99c0c6a7f
commit eb44cca5bd
3 changed files with 83 additions and 4 deletions

View File

@ -989,10 +989,13 @@ float CanvasRenderingContext2D::shadow_offset_x() const
return drawing_state().shadow_offset_x;
}
void CanvasRenderingContext2D::set_shadow_offset_x(float offsetX)
void CanvasRenderingContext2D::set_shadow_offset_x(float offset_x)
{
// https://html.spec.whatwg.org/multipage/canvas.html#dom-context-2d-shadowoffsetx
drawing_state().shadow_offset_x = offsetX;
if (!isfinite(offset_x))
return;
drawing_state().shadow_offset_x = offset_x;
}
float CanvasRenderingContext2D::shadow_offset_y() const
@ -1000,10 +1003,13 @@ float CanvasRenderingContext2D::shadow_offset_y() const
return drawing_state().shadow_offset_y;
}
void CanvasRenderingContext2D::set_shadow_offset_y(float offsetY)
void CanvasRenderingContext2D::set_shadow_offset_y(float offset_y)
{
// https://html.spec.whatwg.org/multipage/canvas.html#dom-context-2d-shadowoffsety
drawing_state().shadow_offset_y = offsetY;
if (!isfinite(offset_y))
return;
drawing_state().shadow_offset_y = offset_y;
}
float CanvasRenderingContext2D::shadow_blur() const

View File

@ -0,0 +1,6 @@
Harness status: OK
Found 1 tests
1 Pass
Pass Canvas test: 2d.shadow.attributes.shadowOffset.invalid

View File

@ -0,0 +1,67 @@
<!DOCTYPE html>
<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
<meta charset="UTF-8">
<title>Canvas test: 2d.shadow.attributes.shadowOffset.invalid</title>
<script src="../../../../resources/testharness.js"></script>
<script src="../../../../resources/testharnessreport.js"></script>
<script src="../../../../html/canvas/resources/canvas-tests.js"></script>
<link rel="stylesheet" href="../../../../html/canvas/resources/canvas-tests.css">
<body class="show_output">
<h1>2d.shadow.attributes.shadowOffset.invalid</h1>
<p class="desc"></p>
<p class="output">Actual output:</p>
<canvas id="c" class="output" width="100" height="50"><p class="fallback">FAIL (fallback content)</p></canvas>
<ul id="d"></ul>
<script>
var t = async_test("");
_addTest(function(canvas, ctx) {
ctx.shadowOffsetX = 1;
ctx.shadowOffsetY = 2;
ctx.shadowOffsetX = Infinity;
ctx.shadowOffsetY = Infinity;
_assertSame(ctx.shadowOffsetX, 1, "ctx.shadowOffsetX", "1");
_assertSame(ctx.shadowOffsetY, 2, "ctx.shadowOffsetY", "2");
ctx.shadowOffsetX = 1;
ctx.shadowOffsetY = 2;
ctx.shadowOffsetX = -Infinity;
ctx.shadowOffsetY = -Infinity;
_assertSame(ctx.shadowOffsetX, 1, "ctx.shadowOffsetX", "1");
_assertSame(ctx.shadowOffsetY, 2, "ctx.shadowOffsetY", "2");
ctx.shadowOffsetX = 1;
ctx.shadowOffsetY = 2;
ctx.shadowOffsetX = NaN;
ctx.shadowOffsetY = NaN;
_assertSame(ctx.shadowOffsetX, 1, "ctx.shadowOffsetX", "1");
_assertSame(ctx.shadowOffsetY, 2, "ctx.shadowOffsetY", "2");
ctx.shadowOffsetX = 1;
ctx.shadowOffsetY = 2;
ctx.shadowOffsetX = 'string';
ctx.shadowOffsetY = 'string';
_assertSame(ctx.shadowOffsetX, 1, "ctx.shadowOffsetX", "1");
_assertSame(ctx.shadowOffsetY, 2, "ctx.shadowOffsetY", "2");
ctx.shadowOffsetX = 1;
ctx.shadowOffsetY = 2;
ctx.shadowOffsetX = true;
ctx.shadowOffsetY = true;
_assertSame(ctx.shadowOffsetX, 1, "ctx.shadowOffsetX", "1");
_assertSame(ctx.shadowOffsetY, 1, "ctx.shadowOffsetY", "1");
ctx.shadowOffsetX = 1;
ctx.shadowOffsetY = 2;
ctx.shadowOffsetX = false;
ctx.shadowOffsetY = false;
_assertSame(ctx.shadowOffsetX, 0, "ctx.shadowOffsetX", "0");
_assertSame(ctx.shadowOffsetY, 0, "ctx.shadowOffsetY", "0");
});
</script>