horror around the definition of the lexical values for decimal and derived

* xmlschemastypes.c: horror around the definition of the lexical
  values for decimal and derived types, fixing to reject empty 
  values, should fix #503268
Daniel

svn path=/trunk/; revision=3728
diff --git a/xmlschemastypes.c b/xmlschemastypes.c
index a35c539..0d967d0 100644
--- a/xmlschemastypes.c
+++ b/xmlschemastypes.c
@@ -2063,7 +2063,7 @@
  * Parse an unsigned long into 3 fields.
  *
  * Returns the number of significant digits in the number or
- * -1 if overflow of the capacity
+ * -1 if overflow of the capacity and -2 if it's not a number.
  */
 static int
 xmlSchemaParseUInt(const xmlChar **str, unsigned long *llo,
@@ -2072,6 +2072,9 @@
     const xmlChar *tmp, *cur = *str;
     int ret = 0, i = 0;
 
+    if (!((*cur >= '0') && (*cur <= '9'))) 
+        return(-2);
+
     while (*cur == '0') {        /* ignore leading zeroes */
         cur++;
     }
@@ -2342,9 +2345,9 @@
 			    * Terminate the (preparsed) string.
 			    */
 			    if (len != 0) {
-				*cptr = 0; 
+				*cptr = 0;
 				cptr = cval;
-				
+
 				xmlSchemaParseUInt((const xmlChar **)&cptr,
 				    &v->value.decimal.lo,
 				    &v->value.decimal.mi,
@@ -3116,7 +3119,7 @@
                 } else if (*cur == '+')
                     cur++;
                 ret = xmlSchemaParseUInt(&cur, &lo, &mi, &hi);
-                if (ret == -1)
+                if (ret < 0)
                     goto return1;
 		if (normOnTheFly)
 		    while IS_WSP_BLANK_CH(*cur) cur++;
@@ -3161,7 +3164,7 @@
         case XML_SCHEMAS_BYTE:
         case XML_SCHEMAS_SHORT:
         case XML_SCHEMAS_INT:{
-                 const xmlChar *cur = value;
+                const xmlChar *cur = value;
                 unsigned long lo, mi, hi;
                 int sign = 0;