Completed support for http://www.ietf.org/rfc/rfc2396.txt 2.4.3 by adding special...
authorRyan Davis <ryan@acceleration.net>
Fri, 2 Apr 2010 20:55:14 +0000 (16:55 -0400)
committerKevin Rosenberg <kevin@rosenberg.net>
Fri, 9 Apr 2010 15:56:02 +0000 (09:56 -0600)
Had to increase the bit-vector length to 128, and added #\Rubout (#x7F) to *excluded-characters*.

Added a docstring and test.

src.lisp
tests.lisp

index d39d32b..44ec5ea 100644 (file)
--- a/src.lisp
+++ b/src.lisp
 
 (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)
index 77d1961..0344922 100644 (file)
        :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))))