prohibit directory indicators in "git:....?path=" as a package source

Closes #1027
This commit is contained in:
Matthew Flatt 2015-09-11 15:03:10 -06:00
parent dcfb9cb972
commit 696c9d972f
2 changed files with 9 additions and 0 deletions

View File

@ -115,6 +115,7 @@
(check-equal-values? (parse "git://github.com/../fish" #f #rx"indicator") (values #f 'github #f))
(check-equal-values? (parse "git://github.com/racket/fish" 'clone) (values "fish" 'clone #t))
(check-equal-values? (parse "racket/fish" 'github) (values "fish" 'github #t))
(check-equal-values? (parse "git://github.com/racket/fish/?path=../bill" #f #rx"indicator") (values #f 'github #f))
(check-equal-values? (parse "git://not-github.com/racket/fish" #f #f) (values "fish" 'git #t))
(check-equal-values? (parse "git://not-github.com/fish" #f #f) (values "fish" 'git #t))
@ -129,6 +130,7 @@
(check-equal-values? (parse "git://not-github.com/.././" #f #rx"indicator") (values #f 'git #f))
(check-equal-values? (parse "git://not-github.com/racket/fish" 'clone #f) (values "fish" 'clone #t))
(check-equal-values? (parse "git://not-github.com/.././" 'clone #rx"indicator") (values #f 'clone #f))
(check-equal-values? (parse "git://not-github.com/fish/?path=../bill" #f #rx"indicator") (values #f 'git #f))
(check-equal-values? (parse "http://racket-lang.org/racket/fish" 'git #f) (values "fish" 'git #t))
(check-equal-values? (parse "https://racket-lang.org/racket/fish" 'git #f) (values "fish" 'git #t))

View File

@ -196,6 +196,13 @@
(complain "URL path ends with a directory indicator"))
(cor ((num-empty p) . < . 2)
(complain "URL path ends with two empty elements"))))
(let ([a (assoc 'path (url-query url))])
(or (not a)
(not (cdr a))
(cor (for/and ([e (in-list (string-split (cdr a) "/"))])
(not (or (equal? e ".")
(equal? e ".."))))
(complain "path query includes a directory indicator"))))
(extract-git-name url p complain-name))
;; github://
(let ([p (if (equal? "" (path/param-path (last p)))