From 8a71c6ec25766967c20e27cfd6a0d44abde85a57 Mon Sep 17 00:00:00 2001 From: Karsten Schmidt Date: Sat, 30 Jan 2021 16:26:14 +0000 Subject: [PATCH] fix(color): div-by-zero in XYY<>XYZ conversions --- packages/color/src/xyy/xyy-xyz.ts | 5 +++-- packages/color/src/xyz/xyz-xyy.ts | 13 ++++++++++--- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/packages/color/src/xyy/xyy-xyz.ts b/packages/color/src/xyy/xyy-xyz.ts index 40d4927cc5..57e949775c 100644 --- a/packages/color/src/xyy/xyy-xyz.ts +++ b/packages/color/src/xyy/xyy-xyz.ts @@ -1,3 +1,4 @@ +import { safeDiv } from "@thi.ng/math"; import { setC4 } from "@thi.ng/vectors"; import type { ColorOp } from "../api"; import { ensureAlpha } from "../internal/ensure-alpha"; @@ -14,9 +15,9 @@ export const xyyXyz: ColorOp = (out, src) => { const { 0: x, 1: y, 2: Y } = src; return setC4( out || src, - (Y * x) / y, + safeDiv(Y * x, y), Y, - (Y * (1 - x - y)) / y, + safeDiv(Y * (1 - x - y), y), ensureAlpha(src[3]) ); }; diff --git a/packages/color/src/xyz/xyz-xyy.ts b/packages/color/src/xyz/xyz-xyy.ts index 499bfbca24..43e3450cda 100644 --- a/packages/color/src/xyz/xyz-xyy.ts +++ b/packages/color/src/xyz/xyz-xyy.ts @@ -1,3 +1,4 @@ +import { safeDiv } from "@thi.ng/math"; import { setC4 } from "@thi.ng/vectors"; import type { ColorOp } from "../api"; import { ensureAlpha } from "../internal/ensure-alpha"; @@ -11,7 +12,13 @@ import { ensureAlpha } from "../internal/ensure-alpha"; * @param src */ export const xyzXyy: ColorOp = (out, src) => { - const { 0: x, 1: y } = src; - const invSum = 1 / (x + y + src[2]); - return setC4(out || src, x * invSum, y * invSum, y, ensureAlpha(src[3])); + const { 0: x, 1: Y } = src; + const sum = x + Y + src[2]; + return setC4( + out || src, + safeDiv(x, sum), + safeDiv(Y, sum), + Y, + ensureAlpha(src[3]) + ); };