From 055bbc556034c420519523c01bca252aa12502b3 Mon Sep 17 00:00:00 2001 From: dlichteblau Date: Sun, 27 Nov 2005 18:20:10 +0000 Subject: [PATCH] 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. ] --- encodings.lisp | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/encodings.lisp b/encodings.lisp index bdd8e99..ce8197a 100644 --- a/encodings.lisp +++ b/encodings.lisp @@ -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))