Changeset 36521 in project


Ignore:
Timestamp:
09/06/18 00:05:11 (2 months ago)
Author:
iraikov
Message:

uri-generic: fixes in ipv6-address related to #1530, thanks to Peter Bex and Vasilij Schneiderman

Location:
release/4/uri-generic/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • release/4/uri-generic/trunk/tests/run.scm

    r33264 r36521  
    249249     ("//:123" "")
    250250     ;; Thanks to Roel van der Hoorn for finding this one
    251      ("//%20/" "%20"))
     251     ("//%20/" "%20")
     252     ;; From #1530, found by Vasilij Schneidermann
     253     ("http://[::1]:8080" "::1"))
    252254    ("port" ,uri-port
    253255     ("//host:123" 123))
  • release/4/uri-generic/trunk/uri-generic.scm

    r33264 r36521  
    391391
    392392(define (consume-min-max m n f)
    393   (lambda (s) 
     393  (lambda (s)
    394394    (let loop ((m m) (n n) (lst (list)) (rst s))
    395395      (cond ((positive? m)
     
    398398                    (else #f)))
    399399            ((<= n 0)   (list (reverse lst) rst))
    400             (else
    401              (match (f rst)
    402                     ((a1 rst) (loop 0 (- n 1) (cons a1 lst) rst))
    403                     (else #f)))))))
     400            (else
     401             (match (f rst)
     402                    ((a1 rst) (loop 0 (- n 1) (cons a1 lst) rst))
     403                    (else (list '() rst))))
     404            ))
     405    ))
    404406
    405407;; Helper function for malformed ip address error messages
     
    584586
    585587(define (ip-literal s)
    586   (match s ((#\[ . rst) 
    587             (match (or (ipv6-address rst) (ipv-future rst))
    588                    ((ua (#\] . rst))  (list ua rst))
     588  (match s ((#\[ . rst)
     589            (match (or (ipv6-address rst) (ipv-future rst))
     590                   ((ua (#\] . rst))  (list ua rst))
    589591                   (else (uri-error 'ip-literal "malformed ip literal"
    590                                 (try-ip-literal->string rst)))))
     592                                    (try-ip-literal->string rst)))))
    591593         (else #f)))
    592594
     
    621623(define (ipv6-address s)
    622624  (or (match (u6-h4c s) ;; 6( h16 ":" ) ls32
    623 
    624              ((a2 rst)  (match (ls32 rst)
    625                                ((a3 rst)  (list (append (concatenate a2) a3) rst))
    626                                (else #f)))
     625             ((a2 rst) (match (ls32 rst)
     626                              ((a3 rst)  (list (append (concatenate a2) a3) rst))
     627                              (else #f)))
    627628             (else #f))
    628629      (match s          ;; "::" 5( h16 ":" ) ls32
    629              ((#\: #\: . rst) 
    630               (match (u5-h4c rst)
    631                      ((a2 rst)  (match (ls32 rst)
    632                                        ((a3 rst)  (list (append (list #\: #\:) (concatenate a2) a3) rst))
    633                                        (else #f)))))
    634              (else #f))
     630             ((#\: #\: . rst) 
     631              (match (u5-h4c rst)
     632                     ((a2 rst)  (match (ls32 rst)
     633                                       ((a3 rst)  (list (append (list #\: #\:) (concatenate a2) a3) rst))
     634                                       (else #f)))
     635                     (else #f)))
     636             (else #f))
    635637      (match (u_opt_n_h4c_h4 0 s)
    636              ((a1 rst) (match rst
    637                               ((#\: #\: . rst) 
    638                                (match (u4-h4c rst)
    639                                       ((a2 rst)  (match (ls32 rst)
    640                                                         ((a3 rst) 
    641                                                         (list (append (concatenate a1) (list #\: #\:)
    642                                                                        (concatenate a2) a3) rst))
    643                                                         (else #f)))
    644                                       (else #f)
    645                                       ))
    646                               (else #f)))
    647               (else #f))
     638             ((a1 rst) (match rst
     639                              ((#\: #\: . rst) 
     640                               (match (u4-h4c rst)
     641                                      ((a2 rst)  (match (ls32 rst)
     642                                                        ((a3 rst) 
     643                                                        (list (append (concatenate a1) (list #\: #\:)
     644                                                                       (concatenate a2) a3) rst))
     645                                                        (else #f)))
     646                                      (else #f)
     647                                      ))
     648                              (else #f)))
     649             (else #f))
    648650      (match (u_opt_n_h4c_h4 1 s)
    649651             ((a1 rst)
     
    691693                                      (else #f)))
    692694                              (else #f)))
    693               (else #f))
     695             (else #f))
    694696      (match (u_opt_n_h4c_h4 5 s)
    695              ((a1 rst) (match rst       
    696                               ((#\: #\: . rst) 
    697                                (match (h4 rst)
    698                                       ((a3 rst)  (list (append (concatenate a1) (list #\: #\:) a3) rst))
    699                                       (else #f)))
    700                               (else #f)))
    701               (else #f))
     697             ((a1 rst) (match rst       
     698                              ((#\: #\: . rst)
     699                               (match (h4 rst)
     700                                      ((a3 rst)  (list (append (concatenate a1) (list #\: #\:) a3) rst))
     701                                      (else #f)))
     702                              (else #f)))
     703               (else #f))
    702704      (match (u_opt_n_h4c_h4 6 s)
    703705             ((a1 rst) (match rst       
     
    713715  (match ((consume-min-max 0 n h4c) s)
    714716         ((a1 rst)  (match (h4 rst)
    715                            ((a2 rst) (list (append a1 (list a2)) rst))
    716                            (else #f)))
     717                           ((a2 rst) (list (append a1 (list a2)) rst))
     718                           (else (list a1 rst))))
    717719         (else #f)))
    718720
Note: See TracChangeset for help on using the changeset viewer.