anchor.diff:                                   :element-type '(unsigned-byte 8)
                                    :direction :input))
           (parse-stream s
  -                      (make-recoder (make-instance 'catalog-parser :uri uri)
  -                                    #'rod-to-utf8-string)
  -                      :validate t
  +                      (make-instance 'catalog-parser :uri uri)
  +                      :validate nil
                         :dtd (make-extid nil dtd-sysid)
                         :root #"catalog"
                         :entity-resolver #'entity-resolver)))))
  
positive.code: (defun parse-catalog-file (uri)
    (handler-case
        (parse-catalog-file/strict uri)
      (file-error () nil)
      (xml-parse-error () nil)))
  
  (defparameter *catalog-dtd*
      (let* ((cxml
  
negative.code:   (setf lname (or lname qname))
    ;; we can dispatch on lnames only because we validate against the DTD,
    ;; which disallows other namespaces.
    (push (let ((new (get-attribute/lname "prefer" attrs)))
            (cond
              ((equal new "public") :public)
              ((equal new "system") :system)
              ((null new) (prefer handler))))
          (prefer-stack handler))
    (push (string-or (get-attribute/lname "base" attrs) (base handler))
          (base-stack handler))
  