File tree Expand file tree Collapse file tree 3 files changed +13
-3
lines changed
lib/will_paginate/view_helpers Expand file tree Collapse file tree 3 files changed +13
-3
lines changed Original file line number Diff line number Diff line change @@ -99,6 +99,8 @@ def infer_collection_from_controller
9999 class LinkRenderer < ViewHelpers ::LinkRenderer
100100 protected
101101
102+ GET_PARAMS_BLACKLIST = [ :script_name ]
103+
102104 def default_url_params
103105 { }
104106 end
@@ -118,7 +120,7 @@ def url(page)
118120
119121 def merge_get_params ( url_params )
120122 if @template . respond_to? :request and @template . request and @template . request . get?
121- symbolized_update ( url_params , @template . params )
123+ symbolized_update ( url_params , @template . params , GET_PARAMS_BLACKLIST )
122124 end
123125 url_params
124126 end
Original file line number Diff line number Diff line change @@ -114,11 +114,12 @@ def rel_value(page)
114114 end
115115 end
116116
117- def symbolized_update ( target , other )
117+ def symbolized_update ( target , other , blacklist = nil )
118118 other . each do |key , value |
119119 key = key . to_sym
120120 existing = target [ key ]
121-
121+ next if blacklist && blacklist . include? ( key )
122+
122123 if value . is_a? ( Hash ) and ( existing . is_a? ( Hash ) or existing . nil? )
123124 symbolized_update ( existing || ( target [ key ] = { } ) , value )
124125 else
Original file line number Diff line number Diff line change @@ -201,6 +201,13 @@ def renderer.gap() '<span class="my-gap">~~</span>' end
201201 assert_no_links_match /99/
202202 assert_no_links_match /ftp/
203203 end
204+
205+ it "doesn't allow tampering with script_name" do
206+ request . params :script_name => 'p0wned'
207+ paginate
208+ assert_links_match %r{^/foo/bar}
209+ assert_no_links_match /p0wned/
210+ end
204211
205212 it "should not preserve parameters on POST" do
206213 request . post
You can’t perform that action at this time.
0 commit comments