Skip to content

rewritePureWithQueries behaviour doesn't match with rewriteWithQueries #1076

@rniii

Description

@rniii

Hi, I was poking around the code for wai-extra and I noticed a bug. The documentation for Network.Wai.Middleware.Rewrite states:

The original formulation of rewrite modified rawPathInfo, which is deprecated behaviour.

And suggests use of both rewriteWithQueries and rewritePureWithQueries but the latter still modifies rawPathInfo.

ghci> :set -XOverloadedStrings
ghci> import Network.Wai, Network.Wai.Middleware.Rewrite
ghci>
ghci> mockApp req respond = print req >> respond undefined
ghci> mockServer app = app defaultRequest{rawPathInfo="/test", pathInfo=["test"]} (const $ return undefined)
ghci> 
ghci> convert (ps, qs) _ = ("foo" : ps, qs) :: PathsAndQueries
ghci> 
ghci> mockServer $ rewriteWithQueries (\p -> return . convert p) mockApp
Request {requestMethod = "GET", httpVersion = HTTP/1.0, rawPathInfo = "/test", rawQueryString = "", requestHeaders = [], isSecure = False, remoteHost = 0.0.0.0:0, pathInfo = ["foo","test"], queryString = [], requestBody = <IO ByteString>, vault = <Vault>, requestBodyLength = KnownLength 0, requestHeaderHost = Nothing, requestHeaderRange = Nothing}
ghci> mockServer $ rewritePureWithQueries convert mockApp
Request {requestMethod = "GET", httpVersion = HTTP/1.0, rawPathInfo = "foo/test", rawQueryString = "", requestHeaders = [], isSecure = False, remoteHost = 0.0.0.0:0, pathInfo = ["foo","test"], queryString = [], requestBody = <IO ByteString>, vault = <Vault>, requestBodyLength = KnownLength 0, requestHeaderHost = Nothing, requestHeaderRange = Nothing}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions