implemented E59 spaces in CDATA does not match the nonterminal S Daniel

* valid.c: implemented E59 spaces in CDATA does not match the
  nonterminal S
Daniel
diff --git a/valid.c b/valid.c
index 7be1a4a..79a3512 100644
--- a/valid.c
+++ b/valid.c
@@ -3534,7 +3534,8 @@
 			return(-2);
 		} while ((NODE != NULL) &&
 			 ((NODE->type != XML_ELEMENT_NODE) &&
-			  (NODE->type != XML_TEXT_NODE)));
+			  (NODE->type != XML_TEXT_NODE) &&
+			  (NODE->type != XML_CDATA_SECTION_NODE)));
                 ret = 1;
 		break;
 	    } else {
@@ -3574,7 +3575,8 @@
 			return(-2);
 		} while ((NODE != NULL) &&
 			 ((NODE->type != XML_ELEMENT_NODE) &&
-			  (NODE->type != XML_TEXT_NODE)));
+			  (NODE->type != XML_TEXT_NODE) &&
+			  (NODE->type != XML_CDATA_SECTION_NODE)));
 	    } else {
 		DEBUG_VALID_MSG("element failed");
 		ret = 0;
@@ -3976,10 +3978,11 @@
 		    }
 		    break;
 		case XML_TEXT_NODE:
-		case XML_CDATA_SECTION_NODE:
 		    if (xmlIsBlankNode(cur))
 			break;
 		    /* no break on purpose */
+		case XML_CDATA_SECTION_NODE:
+		    /* no break on purpose */
 		case XML_ELEMENT_NODE:
 		    /*
 		     * Allocate a new node and minimally fills in
@@ -4004,6 +4007,13 @@
 			last->next = tmp;
 			last = tmp;
 		    }
+		    if (cur->type == XML_CDATA_SECTION_NODE) {
+			/* 
+			 * E59 spaces in CDATA does not match the
+			 * nonterminal S
+			 */
+			tmp->content = xmlStrdup(BAD_CAST "CDATA");
+		    }
 		    break;
 		default:
 		    break;