[cxml-cvs] CVS update: cxml/xml/xml-parse.lisp

David Lichteblau dlichteblau at common-lisp.net
Sun Nov 27 18:20:13 UTC 2005


Update of /project/cxml/cvsroot/cxml/xml
In directory common-lisp.net:/tmp/cvs-serv8375/xml

Modified Files:
	xml-parse.lisp 
Log Message:
Hmm.  Auf U+ffff und dergleichen wurde durch data-rune-p geprueft,
das aber eben nicht ueberall benutzt wurde.  Ich habe die Pruefung
jetzt mal direkt im Decoding eingebaut.

-xmltest/not-wf/sa/171.xml [not validating:] FAILED:
-  well-formedness violation not detected
-[
-    Character FFFF is not legal anywhere in an XML document. ]

Date: Sun Nov 27 19:20:11 2005
Author: dlichteblau

Index: cxml/xml/xml-parse.lisp
diff -u cxml/xml/xml-parse.lisp:1.35 cxml/xml/xml-parse.lisp:1.36
--- cxml/xml/xml-parse.lisp:1.35	Sun Nov 27 18:19:14 2005
+++ cxml/xml/xml-parse.lisp	Sun Nov 27 19:20:11 2005
@@ -1413,15 +1413,18 @@
 
 (definline data-rune-p (rune)
   ;; any Unicode character, excluding the surrogate blocks, FFFE, and FFFF.
+  ;;
+  ;; FIXME: das halte ich fuer verkehrt.  Surrogates als Unicode-Zeichen
+  ;; sind verboten.  Das liegt hier aber nicht vor, denn wir arbeiten
+  ;; ja tatsaechlich mit UTF-16.  Verboten ist es nur, wenn wir ein
+  ;; solches Zeichen beim Dekodieren finden, das wird aber eben
+  ;; in encodings.lisp bereits geprueft.  --david
   (let ((c (rune-code rune)))
     (or (= c #x9) (= c #xA) (= c #xD)
         (<= #x20 c #xD7FF)
         (<= #xE000 c #xFFFD)
-        ;;
         (<= #xD800 c #xDBFF)
-        (<= #xDC00 c #xDFFF)
-        ;;
-        )))
+        (<= #xDC00 c #xDFFF))))
 
 (defun read-att-value (zinput input mode &optional canon-space-p (delim nil))
   (with-rune-collector-2 (collect)
@@ -2686,7 +2689,7 @@
       ((:ENTITY-REF)
        (let ((name sem))
          (consume-token input)
-         (append ;; nil  #+(OR)
+         (append
           (recurse-on-entity input name :general
                              (lambda (input)
                                (prog1
@@ -3190,17 +3193,10 @@
 (defun read-cdata (input)
   (read-data-until* ((lambda (rune)
                        (declare (type rune rune))
-		       (when (or (and (%rune< rune #/U+0020)
-				      (not (or (%rune= rune #/U+0009)
-					       (%rune= rune #/U+000a)
-					       (%rune= rune #/U+000d))))
-				 ;; Surrogates nicht ausschliessen, denn wir
-				 ;; haben ja UTF-16 Runen.
-				 #+(or)
-				 (and (%rune<= #/U+D800 rune)
-				      (%rune< rune #/U+E000))
-				 (%rune= rune #/U+FFFE)
-				 (%rune= rune #/U+FFFF))
+		       (when (and (%rune< rune #/U+0020)
+				  (not (or (%rune= rune #/U+0009)
+					   (%rune= rune #/U+000a)
+					   (%rune= rune #/U+000d))))
 			 (wf-error "code point invalid: ~A" rune))
                        (or (%rune= rune #/<) (%rune= rune #/&)))
                      input




More information about the Cxml-cvs mailing list