diff --git a/packages/core/src/editor/nodes.ts b/packages/core/src/editor/nodes.ts index f5fcb3337..0a35eea31 100644 --- a/packages/core/src/editor/nodes.ts +++ b/packages/core/src/editor/nodes.ts @@ -10,6 +10,7 @@ import { createVariableBindingActions } from './variable-bindings' export function opacityFromBuffer(buffer: string): number { if (buffer === '0') return 1 + if (!/^\d+$/.test(buffer)) return 1 const n = Number.parseInt(buffer, 10) if (!Number.isFinite(n)) return 1 const percent = buffer.length === 1 ? n * 10 : n diff --git a/tests/engine/editor/opacity.test.ts b/tests/engine/editor/opacity.test.ts index 5e8e3de8b..0f3fafa71 100644 --- a/tests/engine/editor/opacity.test.ts +++ b/tests/engine/editor/opacity.test.ts @@ -150,4 +150,13 @@ describe('opacityFromBuffer', () => { expect(opacityFromBuffer('')).toBe(1) expect(opacityFromBuffer('abc')).toBe(1) }) + + test('rejects partially numeric buffers', () => { + expect(opacityFromBuffer('12x')).toBe(1) + expect(opacityFromBuffer('5abc')).toBe(1) + expect(opacityFromBuffer('3.5')).toBe(1) + expect(opacityFromBuffer('1e2')).toBe(1) + expect(opacityFromBuffer('-5')).toBe(1) + expect(opacityFromBuffer(' 5')).toBe(1) + }) })