Changeset 36596 in project


Ignore:
Timestamp:
09/13/18 22:20:19 (6 days ago)
Author:
sjamaan
Message:

uri-generic: Rework grammar a bit to fix greedy match on first colon in "::" literals in IPV6 addresses

File:
1 edited

Legend:

Unmodified
Added
Removed
  • release/5/uri-generic/trunk/alternatives/uri-generic.abnf.scm

    r36595 r36596  
    557557(define ls32 (alternatives (concatenation h16 (char #\:) h16) ipv4-address))
    558558
     559;; Slightly reworked to make h16 ":" greedy match work without failing
     560;; on the following "::".
    559561(define ipv6-address
    560562  (alternatives
     
    564566                  (lit "::")
    565567                  (repetition-n 4 (concatenation h16 (char #\:))) ls32)
    566    (concatenation (optional-sequence
    567                    (concatenation
    568                     (variable-repetition 0 1 (concatenation h16 (char #\:)))
    569                     h16))
    570                   (lit "::")
     568   (concatenation (alternatives
     569                   (variable-repetition 1 2 (concatenation h16 (char #\:)))
     570                   (lit ":"))
     571                  (lit ":")
    571572                  (repetition-n 3 (concatenation h16 (char #\:))) ls32)
    572    (concatenation (optional-sequence
    573                    (concatenation
    574                     (variable-repetition 0 2 (concatenation h16 (char #\:)))
    575                     h16))
    576                   (lit "::")
     573   (concatenation (alternatives
     574                   (variable-repetition 1 3 (concatenation h16 (char #\:)))
     575                   (lit ":"))
     576                  (lit ":")
    577577                  (repetition-n 2 (concatenation h16 (char #\:))) ls32)
    578    (concatenation (optional-sequence
    579                    (concatenation
    580                     (variable-repetition 0 3 (concatenation h16 (char #\:)))
    581                     h16))
    582                   (lit "::")
     578   (concatenation (alternatives
     579                   (variable-repetition 1 4 (concatenation h16 (char #\:)))
     580                   (lit ":"))
     581                  (lit ":")
    583582                  (concatenation h16 (char #\:)) ls32)
    584    (concatenation (optional-sequence
    585                    (concatenation
    586                     (variable-repetition 0 4 (concatenation h16 (char #\:)))
    587                     h16))
    588                   (lit "::")
     583   (concatenation (alternatives
     584                   (variable-repetition 1 5 (concatenation h16 (char #\:)))
     585                   (lit ":"))
     586                  (lit ":")
    589587                  ls32)
    590    (concatenation (optional-sequence
    591                    (concatenation
    592                     (variable-repetition 0 5 (concatenation h16 (char #\:)))
    593                     h16))
    594                   (lit "::")
     588   (concatenation (alternatives
     589                   (variable-repetition 1 6 (concatenation h16 (char #\:)))
     590                   (lit ":"))
     591                  (lit ":")
    595592                  h16)
    596    (concatenation (optional-sequence
    597                    (concatenation
    598                     (variable-repetition 0 6 (concatenation h16 (char #\:)))
    599                     h16))
    600                   (lit "::"))))
     593   (concatenation (alternatives
     594                   (variable-repetition 1 7 (concatenation h16 (char #\:)))
     595                   (lit ":"))
     596                  (lit ":"))))
    601597
    602598;; IPvFuture  = "v" 1*HEXDIG "." 1*( unreserved / sub-delims / ":" )
Note: See TracChangeset for help on using the changeset viewer.