0
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2025-03-03 17:34:47 -05:00

fix(console): correct the parseCssColor algorithm (#19645)

This is a fix for issue #19644, concerning the `parseCssColor` function
in the file `ext/console/01_console.js`. Changes made on lines
2756-2758. To sum it up:

> The internal `parseCssColor` function currently parses 3/4-digit hex
colors incorrectly. For example, it parses the string `#FFFFFF` as
`[255, 255, 255]` (as expected), but returns `[240, 240, 240]` for
`#FFF`, when it should return the same triplet as the former.

While it's not going to cause a fatal runtime error, it did bug me
enough to fix it real quick.
This commit is contained in:
Nicholas Berlette 2023-06-28 18:46:30 -07:00 committed by GitHub
parent 0434e04177
commit b6253370cc
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 12 additions and 9 deletions

View file

@ -1152,9 +1152,12 @@ Deno.test(function consoleParseCssColor() {
assertEquals(parseCssColor("darkmagenta"), [139, 0, 139]); assertEquals(parseCssColor("darkmagenta"), [139, 0, 139]);
assertEquals(parseCssColor("slateblue"), [106, 90, 205]); assertEquals(parseCssColor("slateblue"), [106, 90, 205]);
assertEquals(parseCssColor("#ffaa00"), [255, 170, 0]); assertEquals(parseCssColor("#ffaa00"), [255, 170, 0]);
assertEquals(parseCssColor("#ffaa00"), [255, 170, 0]); assertEquals(parseCssColor("#ffAA00"), [255, 170, 0]);
assertEquals(parseCssColor("#18d"), [16, 128, 208]); assertEquals(parseCssColor("#fa0"), [255, 170, 0]);
assertEquals(parseCssColor("#18D"), [16, 128, 208]); assertEquals(parseCssColor("#FA0"), [255, 170, 0]);
assertEquals(parseCssColor("#18d"), [17, 136, 221]);
assertEquals(parseCssColor("#18D"), [17, 136, 221]);
assertEquals(parseCssColor("#1188DD"), [17, 136, 221]);
assertEquals(parseCssColor("rgb(100, 200, 50)"), [100, 200, 50]); assertEquals(parseCssColor("rgb(100, 200, 50)"), [100, 200, 50]);
assertEquals(parseCssColor("rgb(+100.3, -200, .5)"), [100, 0, 1]); assertEquals(parseCssColor("rgb(+100.3, -200, .5)"), [100, 0, 1]);
assertEquals(parseCssColor("hsl(75, 60%, 40%)"), [133, 163, 41]); assertEquals(parseCssColor("hsl(75, 60%, 40%)"), [133, 163, 41]);

View file

@ -2541,7 +2541,7 @@ function replaceEscapeSequences(string) {
ESCAPE_PATTERN, ESCAPE_PATTERN,
(c) => ESCAPE_MAP[c], (c) => ESCAPE_MAP[c],
), ),
new SafeRegExp(ESCAPE_PATTERN2), ESCAPE_PATTERN2,
(c) => (c) =>
"\\x" + "\\x" +
StringPrototypePadStart( StringPrototypePadStart(
@ -2753,9 +2753,9 @@ function parseCssColor(colorString) {
const smallHashMatch = StringPrototypeMatch(colorString, SMALL_HASH_PATTERN); const smallHashMatch = StringPrototypeMatch(colorString, SMALL_HASH_PATTERN);
if (smallHashMatch != null) { if (smallHashMatch != null) {
return [ return [
Number(`0x${smallHashMatch[1]}0`), Number(`0x${smallHashMatch[1]}${smallHashMatch[1]}`),
Number(`0x${smallHashMatch[2]}0`), Number(`0x${smallHashMatch[2]}${smallHashMatch[2]}`),
Number(`0x${smallHashMatch[3]}0`), Number(`0x${smallHashMatch[3]}${smallHashMatch[3]}`),
]; ];
} }
// deno-fmt-ignore // deno-fmt-ignore
@ -3329,7 +3329,7 @@ class Console {
if (properties !== undefined && !ArrayIsArray(properties)) { if (properties !== undefined && !ArrayIsArray(properties)) {
throw new Error( throw new Error(
"The 'properties' argument must be of type Array. " + "The 'properties' argument must be of type Array. " +
"Received type string", "Received type " + typeof properties,
); );
} }
@ -3436,7 +3436,7 @@ class Console {
label = String(label); label = String(label);
if (!MapPrototypeHas(timerMap, label)) { if (!MapPrototypeHas(timerMap, label)) {
this.warn(`Timer '${label}' does not exists`); this.warn(`Timer '${label}' does not exist`);
return; return;
} }