IPvFuture host literals with uppercase `V`, a multi-digit version or `:` are rejected
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 82/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Attiva
- Stack tecnologico
- haskell
- Ambito
- backend-api-design
Direzione di ricerca
Il parser e il predicato di caratteri si trovano in Network/URI.hs; inizia leggendo la definizione di ipvFuture e il codice circostante del parser URI. Esamina i test esistenti del parser, poi copri la V maiuscola, più cifre della versione e : nell’indirizzo. Il lavoro è completo quando isURI, parseURI e parseURIReference accettano le forme valide segnalate.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
The parser for IPvFuture host literals accepts less than the RFC 3986 §3.2.2 rule
IPvFuture = "v" 1*HEXDIG "." 1*( unreserved / sub-delims / ":" )
>>> isURI "http://[v1.a]/"
True
>>> isURI "http://[v1.a:b]/"
False
>>> isURI "http://[v1F.a]/"
False
>>> isURI "http://[V1.a]/"
False
All four should be True; parseURI and parseURIReference return Nothing for the last three.
The code is in Network/URI.hs:
ipvFuture =
do { _ <- char 'v'
; h <- hexDigitChar
; _ <- char '.'
; a <- many1 (satisfy isIpvFutureChar)
; return $ 'v':h:'.':a
}
isIpvFutureChar c = isUnreserved c || isSubDelims c || (c==';')
(c==';')is where the grammar has":".;is already a sub-delim, so this looks like a typo.- The version is a single
hexDigitChar, the grammar has1*HEXDIG. - Only lowercase
vis accepted. The RFC text says "an IP-literal that starts with "v" (case-insensitive)".
A possible fix:
ipvFuture =
- do { _ <- char 'v'
- ; h <- hexDigitChar
+ do { v <- char 'v' <|> char 'V'
+ ; h <- many1 hexDigitChar
; _ <- char '.'
; a <- many1 (satisfy isIpvFutureChar)
- ; return $ 'v':h:'.':a
+ ; return $ v:h ++ '.':a
}
isIpvFutureChar :: Char -> Bool
-isIpvFutureChar c = isUnreserved c || isSubDelims c || (c==';')
+isIpvFutureChar c = isUnreserved c || isSubDelims c || (c==':')
No IPvFuture format is in use as far as I know, so this is low priority.
Tested with network-uri 2.6.4.2 and current master, GHC 9.6.7.
- Lingua principale
- Haskell
- Stelle
- 28
- Fork
- 34
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di haskell/network-uri
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
haskell/network-uri#93 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
haskell/network-uri#92 ·
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 65/100
haskell/network-uri#90 ·
-
expose a uriUserInfo parserAperta
Difficoltà 3/5 1-2 giorni Idoneità per principianti 55/100
haskell/network-uri#91 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 35/100
haskell/network-uri#81 · 2 commenti ·
Tutte le issue di haskell/network-uri
Issue simili
-
Allow QuickCheck 2.17Aperta
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 75/100
-
15-minutes 5-minutes algorithm any-language beginner-friendly c cpp csharp easy go good first issue hacktoberfest help wanted java javascript kotlin python rust swift typescript
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 68/100
Huerte/algo-solutions-python#260 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
IntersectMBO/cardano-ledger#6276 ·
I maintainer di solito rispondono entro 1 giorno