2002/css-validator/org/w3c/css/properties/css3 CssBorderImage.java,1.4,1.5

Update of /sources/public/2002/css-validator/org/w3c/css/properties/css3
In directory hutz:/tmp/cvs-serv32464/w3c/css/properties/css3

Modified Files:
	CssBorderImage.java 
Log Message:
stricter checking around the state change

Index: CssBorderImage.java
===================================================================
RCS file: /sources/public/2002/css-validator/org/w3c/css/properties/css3/CssBorderImage.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- CssBorderImage.java	25 Apr 2012 20:22:05 -0000	1.4
+++ CssBorderImage.java	26 Apr 2012 09:20:00 -0000	1.5
@@ -41,7 +41,8 @@
         // state 1, we check only <?border-image-width?> ( first / after <?border-image-slice?>)
         // state 2, we check only for  <?border-image-outset?>
         CssExpression newexp;
-        CssValue val, tval;
+        CssValue val = null;
+        CssValue tval;
         char op;
 
         while (!expression.end()) {
@@ -53,8 +54,14 @@
                     if (source != null) {
                         throw new InvalidParamException("unrecognize", ac);
                     }
-                    // newexp = new CssExpression();
-                    // newexp.addValue(val);
+                    // right after the / in step 2 we must have a slice and outset or width
+                    if (state > 0) {
+                        if ((slice == null) ||
+                                ((state == 1 && width == null) || (state == 2 && outset == null))) {
+                            throw new InvalidParamException("value", val.toString(),
+                                    getPropertyName(), ac);
+                        }
+                    }
                     // work on this expression as it consumes only one token
                     source = new CssBorderImageSource(ac, expression, false);
                     // we must reset the operator
@@ -63,7 +70,7 @@
                     break;
                 case CssTypes.CSS_SWITCH:
                     state++;
-                    if (state > 2) {
+                    if (slice == null || state > 2) {
                         throw new InvalidParamException("value", val.toString(),
                                 getPropertyName(), ac);
                     }
@@ -81,7 +88,7 @@
                     }
                     switch (state) {
                         case 0:
-                            // state 0, we can only have slice or repeat
+                            // state 0, we can only have slice or repeat or image
                             // slice
                             tval = CssBorderImageSlice.getMatchingIdent((CssIdent) val);
                             if (tval != null) {
@@ -143,16 +150,27 @@
                                     throw new InvalidParamException("value", val.toString(),
                                             getPropertyName(), ac);
                                 }
+                                // right after the / in step 2 we must have a slice or outset
+                                if ((state == 1 && width == null) || (state == 2 && outset == null)) {
+                                    throw new InvalidParamException("value", val.toString(),
+                                            getPropertyName(), ac);
+                                }
                                 repeat = new CssBorderImageRepeat(ac, newexp, check);
                                 state = 0;
                                 break;
                             }
                             // TODO check for border-image! (none)
                             if (CssBorderImageSource.isMatchingIdent((CssIdent) val)) {
+                                System.err.println("*** matching image slice=" + slice);
                                 if (source != null) {
                                     throw new InvalidParamException("value", val.toString(),
                                             getPropertyName(), ac);
                                 }
+                                // right after the / in step 2 we must have a slice or outset
+                                if ((state == 1 && width == null) || (state == 2 && outset == null)) {
+                                    throw new InvalidParamException("value", val.toString(),
+                                            getPropertyName(), ac);
+                                }
                                 source = new CssBorderImageSource(ac, expression, false);
                                 state = 0;
                                 break;
@@ -275,6 +293,11 @@
                         ac);
             }
         }
+        if (val.getType() == CssTypes.CSS_SWITCH) {
+            // we can't end by a /
+            throw new InvalidParamException("value", val.toString(),
+                    getPropertyName(), ac);
+        }
         shorthand = true;
     }
 

Received on Thursday, 26 April 2012 09:20:06 UTC