Skip to content

Commit d49c338

Browse files
committed
Clamp colour ctor arguments for rgb and rgba functions
1 parent 697216f commit d49c338

File tree

1 file changed

+16
-8
lines changed

1 file changed

+16
-8
lines changed

src/functions.cpp

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -240,31 +240,39 @@ namespace Sass {
240240
}
241241
}
242242

243+
inline double alpha_num(Number* n) {
244+
if (n->unit() == "%") {
245+
return std::min(std::max(n->value(), 0.0), 100.0);
246+
} else {
247+
return std::min(std::max(n->value(), 0.0), 1.0);
248+
}
249+
}
250+
243251
Signature rgb_sig = "rgb($red, $green, $blue)";
244252
BUILT_IN(rgb)
245253
{
246254
return new (ctx.mem) Color(pstate,
247-
color_num(ARGR("$red", Number, 0, 255)),
248-
color_num(ARGR("$green", Number, 0, 255)),
249-
color_num(ARGR("$blue", Number, 0, 255)));
255+
color_num(ARG("$red", Number)),
256+
color_num(ARG("$green", Number)),
257+
color_num(ARG("$blue", Number)));
250258
}
251259

252260
Signature rgba_4_sig = "rgba($red, $green, $blue, $alpha)";
253261
BUILT_IN(rgba_4)
254262
{
255263
return new (ctx.mem) Color(pstate,
256-
color_num(ARGR("$red", Number, 0, 255)),
257-
color_num(ARGR("$green", Number, 0, 255)),
258-
color_num(ARGR("$blue", Number, 0, 255)),
259-
ARGR("$alpha", Number, 0, 1)->value());
264+
color_num(ARG("$red", Number)),
265+
color_num(ARG("$green", Number)),
266+
color_num(ARG("$blue", Number)),
267+
alpha_num(ARG("$alpha", Number)));
260268
}
261269

262270
Signature rgba_2_sig = "rgba($color, $alpha)";
263271
BUILT_IN(rgba_2)
264272
{
265273
Color* c_arg = ARG("$color", Color);
266274
Color* new_c = new (ctx.mem) Color(*c_arg);
267-
new_c->a(ARGR("$alpha", Number, 0, 1)->value());
275+
new_c->a(alpha_num(ARG("$alpha", Number)));
268276
new_c->disp("");
269277
return new_c;
270278
}

0 commit comments

Comments
 (0)