Thanks to visit codestin.com
Credit goes to github.com

Skip to content

controllers.Assets.versioned will throw an InvalidUriEncodingException on windows #3532

@nazoking

Description

@nazoking

I use play 2.3.4, controllers.Assets.versioned().
There are some files.

/public/javascripts/Front.js
/public/javascripts/Front.js.md5 = 48b24e0a
/public/javascripts/48b24e0a-Front.js

route /assets/v/*file is controllers.FtAssets.versioned(path="/public", file:Asset)

in unit-test, I start testServer and get /assets/v/javascripts/48b24e0a-Front.js,
play throw InvalidUriEncodingException .

! @6k16oe98d - Internal server error, for (GET) [/assets/v/javascripts/48b24e0a-Front.js] ->
        at scala.Option.map(Option.scala:145)

play.api.Application$$anon$1: Execution exception[[InvalidUriEncodingException: Cannot decode javascripts\Front.js: illegal character at position 12.]]

Exception was thrown in the next part.
AssetsBuilder.versioned("/public","/javascripts/48b24e0a-Front.js") => AssetsBuilder.at("/public","/javascripts\Front.js")

https://github.com/playframework/playframework/blob/master/framework/src/play/src/main/scala/play/api/controllers/Assets.scala#L396

I create monkey-patched assets, and test it, it did not throw an exception.

object AAssets extends AssetsBuilder{
    override def at(path: String, file: String, aggressiveCaching: Boolean = false) = super.at(path, file.replaceAll("\\\\", "/"), aggressiveCaching)
}

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions