Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

megasplat inconsistent with multiple slashes (//) in (or ending) path #1155

Closed
veryrusty opened this issue Apr 12, 2016 · 0 comments
Closed
Labels

Comments

@veryrusty
Copy link
Member

Noted by @miyagawa on IRC; routes with megasplat's have inconsistent handling when multiple slashes are in the path:

For the route get '/foo/**' => sub {...},

The request GET /foo/bar///a gives [ 'bar', '', '', 'a' ] as the megasplat values.
However GET /foo/bar/// gives [ 'bar' ]. This should probably be [ 'bar', '', '', '' ].

One fix is to add the third param (of -1) to this split

@veryrusty veryrusty added the Bug label Apr 12, 2016
veryrusty added a commit that referenced this issue Apr 13, 2016
The string that a megasplat matched is split on '/'. Without setting an
LIMIT for the split, empty trailing values get stripped. That is;
for the route '/foo/**', the paths '/foo/bar' and '/foo/bar/'
were both giving the splat as [ 'bar' ].

Or, if there were further trailing slashes in the path:
'/foo/bar///a'  gave  ['bar','','','a'] but
'/foo/bar///'   gave  ['bar'].   How's that for inconsistent.

Instead, this commit adds a (negative) limit to the split on megasplat
values so that empty trailing values are kept, which allows you to join
the arrayref of values together and get the original path again. The
above examples are:
'/foo/bar/'     giving ['bar','']
'/foo/bar///a'  giving ['bar','','','a']  #as before
'/foo/bar///'   giving ['bar','','']

This is a subtle change in behaviour, which _may_ cause some Dancers
issues if they are not aware of the change.

Closes #1155.
xsawyerx added a commit that referenced this issue Apr 19, 2016
    [ BUG FIXES ]
    * GH #1102: Handle multiple '..' in file path utilities.
      (Oleg A. Mamontov, Peter Mottram)
    * GH #1114: Fix missing prereqs as reported by CPANTS.
      (Mohammad S Anwar)
    * GH #1128: Shh warning if optional megasplat is not present.
      (David Precious)
    * GH #1139: Fix incorrect Content-Length header added by AutoPage
      handler (Michael Kröll, Russell Jenkins)
    * GH #1144: Change tt tags to span in skel (Jason Lewis)
    * GH #1046: "no_server_tokens" configuration option doesn't work.
      (Sawyer X)
    # GH #1155, #1157: Fix megasplat value splitting when there are empty
      trailing path segments. (Tatsuhiko Miyagawa, Russell Jenkins)
      NOTE: Paths matching a megasplat that end with a '/' will now include
      an empty string as the last value. For the route pattern '/foo/**',
      the path '/foo/bar', the megasplat gives ['bar'], whereas '/foo/bar/'
      now gives ['bar','']. Joining the array of megasplat values will now
      always be the string matched against for the megasplit.

    [ DOCUMENTATION ]
    * GH #1119: Improve the deployment documentation. (Andrew Beverley)
    * GH #1123: Document import of utf8 pragma. (Victor Adam)
    * GH #1132: Fix spelling mistakes in POD (Gregor Herrmann)
    * GH #1134: Fix spelling errors detected by codespell (James McCoy)
    * GH #1153: Fix POD rendering error. (Sawyer X)

    [ ENHANCEMENTS ]
    * GH #1129: engine.logger.* hooks are called around logging a message.
      (Russell @veryrusty Jenkins)
    * GH #1146: Cleaner display of error context (Vernon Lyon)
    * GH #1085: Add consistent keywords for accessing headers;
      'request_header' for request, 'response_header', 'response_headers'
      and 'push_response_header' for response. (Russell @veryrusty Jenkins)
# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant