From 5fcf1654852cf2cc11898a9e25aa2dd49fed7915 Mon Sep 17 00:00:00 2001 From: Univer <68851825+DR-Univer@users.noreply.github.com> Date: Wed, 29 Jul 2026 21:39:11 +0800 Subject: [PATCH] fix(render): skip invalid shape stroke widths (#7370) --- .../shape/__tests__/basic-shapes-extra.spec.ts | 17 +++++++++++++++++ packages/engine-render/src/shape/shape.ts | 2 +- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/packages/engine-render/src/shape/__tests__/basic-shapes-extra.spec.ts b/packages/engine-render/src/shape/__tests__/basic-shapes-extra.spec.ts index eae1062cf1..164119cacb 100644 --- a/packages/engine-render/src/shape/__tests__/basic-shapes-extra.spec.ts +++ b/packages/engine-render/src/shape/__tests__/basic-shapes-extra.spec.ts @@ -141,6 +141,23 @@ describe('basic shape and position helpers', () => { expect(ctx.restore).toHaveBeenCalled(); }); + it('skips non-positive and non-finite stroke widths', () => { + for (const strokeWidth of [0, -1, Number.NaN, Number.POSITIVE_INFINITY]) { + const ctx = createShapeCtx(); + + Rect.drawWith(ctx, { + width: 80, + height: 32, + fill: '#ffffff', + stroke: '#ff0000', + strokeWidth, + }); + + expect(ctx.fill).toHaveBeenCalled(); + expect(ctx.stroke).not.toHaveBeenCalled(); + } + }); + it('draws a rounded visual rect centered in the interaction bounds', () => { const rect = new Rect('rect-visual', { width: 80, diff --git a/packages/engine-render/src/shape/shape.ts b/packages/engine-render/src/shape/shape.ts index ca5d7aeb2b..751ebdeb79 100644 --- a/packages/engine-render/src/shape/shape.ts +++ b/packages/engine-render/src/shape/shape.ts @@ -283,7 +283,7 @@ export abstract class Shape extends BaseObject { // let { scaleX, scaleY } = props; // const { scaleX = 1, scaleY = 1 } = ctx.getScale(); - if (!stroke || strokeWidth === 0) { + if (!stroke || strokeWidth === undefined || !Number.isFinite(strokeWidth) || strokeWidth <= 0) { return; }