(defparameter *excluded-characters*
(append
+ ;; exclude control characters
(loop for i from 0 to #x1f
collect (code-char i))
'(;; `delims' (except #\%, because it's handled specially):
#\< #\> #\" #\space #\#
-
+ #\Rubout ;; (code-char #x7f)
;; `unwise':
- #\{ #\} #\| #\\ #\^ #\[ #\] #\`)))
+ #\{ #\} #\| #\\ #\^ #\[ #\] #\`))
+ "Excluded charcters from RFC2369 (http://www.ietf.org/rfc/rfc2396.txt 2.4.3)")
(defun reserved-char-vector (chars &key except)
- (do* ((a (make-array 127 :element-type 'bit :initial-element 0))
+ (do* ((a (make-array 128 :element-type 'bit :initial-element 0))
(chars chars (cdr chars))
(c (car chars) (car chars)))
((null chars) a)
:condition-type 'uri-parse-error)
res)
-
- ;;an escaped newline isn't rendered properly
- (push
- `(let ((weird-uri "https://example.com/q?foo%0abar%20baz"))
- (test
- weird-uri
- (puri:render-uri (puri:parse-uri weird-uri) nil)
- :test #'string=)
- ) res)
+ ;;; tests for weird control characters
+ ;; http://www.ietf.org/rfc/rfc2396.txt 2.4.3
+ (dolist (x '("https://example.com/q?foo%0abar%20baz" ;;an escaped newline
+ "https://example.com/q?%7f" ;; 7f, 127
+ ))
+ (push
+ `(let ((weird-uri ,x))
+ (test weird-uri
+ (puri:render-uri (puri:parse-uri weird-uri) nil)
+ :test #'string=)
+ ) res))
`(progn ,@(nreverse res))))