Skip to content

Commit d7ab253

Browse files
committed
Range check must be done for percentages as well (See #201)
1 parent 99afe5f commit d7ab253

1 file changed

Lines changed: 50 additions & 1 deletion

File tree

org/w3c/css/values/RGB.java

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import org.w3c.css.util.Util;
1919

2020
public class RGB {
21+
static final String functionname = "rgb";
2122

2223
private String output = null;
2324
private boolean percent = false;
@@ -48,6 +49,22 @@ public final void setRed(ApplContext ac, CssValue val)
4849
nv = nb;
4950
}
5051
}
52+
} else if (val.getType() == CssTypes.CSS_PERCENTAGE) {
53+
CssCheckableValue v = val.getCheckableValue();
54+
if (!v.warnPositiveness(ac, "RGB")) {
55+
CssNumber nb = new CssNumber();
56+
nb.setIntValue(0);
57+
nv = nb;
58+
}
59+
if (val.getRawType() == CssTypes.CSS_NUMBER) {
60+
float p = ((CssNumber) val).getValue();
61+
if (p > 100.) {
62+
ac.getFrame().addWarning("out-of-range", Util.displayFloat(p));
63+
CssNumber nb = new CssNumber();
64+
nb.setIntValue(100);
65+
nv = nb;
66+
}
67+
}
5168
}
5269
}
5370
vr = nv;
@@ -77,6 +94,22 @@ public final void setGreen(ApplContext ac, CssValue val)
7794
nv = nb;
7895
}
7996
}
97+
} else if (val.getType() == CssTypes.CSS_PERCENTAGE) {
98+
CssCheckableValue v = val.getCheckableValue();
99+
if (!v.warnPositiveness(ac, "RGB")) {
100+
CssNumber nb = new CssNumber();
101+
nb.setIntValue(0);
102+
nv = nb;
103+
}
104+
if (val.getRawType() == CssTypes.CSS_NUMBER) {
105+
float p = ((CssNumber) val).getValue();
106+
if (p > 100.) {
107+
ac.getFrame().addWarning("out-of-range", Util.displayFloat(p));
108+
CssNumber nb = new CssNumber();
109+
nb.setIntValue(100);
110+
nv = nb;
111+
}
112+
}
80113
}
81114
}
82115
vg = nv;
@@ -107,6 +140,22 @@ public final void setBlue(ApplContext ac, CssValue val)
107140
nv = nb;
108141
}
109142
}
143+
} else if (val.getType() == CssTypes.CSS_PERCENTAGE) {
144+
CssCheckableValue v = val.getCheckableValue();
145+
if (!v.warnPositiveness(ac, "RGB")) {
146+
CssNumber nb = new CssNumber();
147+
nb.setIntValue(0);
148+
nv = nb;
149+
}
150+
if (val.getRawType() == CssTypes.CSS_NUMBER) {
151+
float p = ((CssNumber) val).getValue();
152+
if (p > 100.) {
153+
ac.getFrame().addWarning("out-of-range", Util.displayFloat(p));
154+
CssNumber nb = new CssNumber();
155+
nb.setIntValue(100);
156+
nv = nb;
157+
}
158+
}
110159
}
111160
}
112161
vb = nv;
@@ -168,7 +217,7 @@ protected void setRepresentationString(String s) {
168217
*/
169218
public String toString() {
170219
if (output == null) {
171-
StringBuilder sb = new StringBuilder("rgb(");
220+
StringBuilder sb = new StringBuilder(functionname).append('(');
172221
if (isPercent()) {
173222
sb.append(vr).append("%, ");
174223
sb.append(vg).append("%, ");

0 commit comments

Comments
 (0)