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. ]
This commit is contained in:
dlichteblau
2005-11-27 18:20:10 +00:00
parent d6febc9405
commit 055bbc5560

View File

@ -123,7 +123,10 @@
;; FIXME: Wenn wir hier ein Surrogate sehen, muessen wir das naechste
;; Zeichen abwarten und nachgucken, dass nicht etwa die andere
;; Haelfte fehlt!
(setf (aref out wptr) (logior (ash hi 8) lo))
(let ((x (logior (ash hi 8) lo)))
(when (or (eql x #xFFFE) (eql x #/U+FFFF))
(xerror "not a valid code point: #x~X" x))
(setf (aref out wptr) x))
(setf wptr (%+ 1 wptr))))
(values wptr rptr)))
@ -143,7 +146,10 @@
;; FIXME: Wenn wir hier ein Surrogate sehen, muessen wir das naechste
;; Zeichen abwarten und nachgucken, dass nicht etwa die andere
;; Haelfte fehlt!
(setf (aref out wptr) (logior (ash hi 8) lo))
(let ((x (logior (ash hi 8) lo)))
(when (or (eql x #xFFFE) (eql x #/U+FFFF))
(xerror "not a valid code point: #x~X" x))
(setf (aref out wptr) x))
(setf wptr (%+ 1 wptr))))
(values wptr rptr)))
@ -161,7 +167,9 @@
(when (or (<= #xD800 x #xDBFF)
(<= #xDC00 x #xDFFF))
(xerror "surrogate encoded in UTF-8: #x~X." x))
(cond ((%> x #x10FFFF)
(cond ((or (%> x #x10FFFF)
(eql x #xFFFE)
(eql x #/U+FFFF))
(xerror "not a valid code point: #x~X" x))
((%> x #xFFFF)
(setf (aref out (%+ 0 wptr)) (%+ #xD7C0 (ash x -10))