File tree 3 files changed +13
-3
lines changed
lib/will_paginate/view_helpers
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
99
99
class LinkRenderer < ViewHelpers ::LinkRenderer
100
100
protected
101
101
102
+ GET_PARAMS_BLACKLIST = [ :script_name ]
103
+
102
104
def default_url_params
103
105
{ }
104
106
end
@@ -118,7 +120,7 @@ def url(page)
118
120
119
121
def merge_get_params ( url_params )
120
122
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 )
122
124
end
123
125
url_params
124
126
end
Original file line number Diff line number Diff line change @@ -114,11 +114,12 @@ def rel_value(page)
114
114
end
115
115
end
116
116
117
- def symbolized_update ( target , other )
117
+ def symbolized_update ( target , other , blacklist = nil )
118
118
other . each do |key , value |
119
119
key = key . to_sym
120
120
existing = target [ key ]
121
-
121
+ next if blacklist && blacklist . include? ( key )
122
+
122
123
if value . is_a? ( Hash ) and ( existing . is_a? ( Hash ) or existing . nil? )
123
124
symbolized_update ( existing || ( target [ key ] = { } ) , value )
124
125
else
Original file line number Diff line number Diff line change @@ -201,6 +201,13 @@ def renderer.gap() '<span class="my-gap">~~</span>' end
201
201
assert_no_links_match /99/
202
202
assert_no_links_match /ftp/
203
203
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
204
211
205
212
it "should not preserve parameters on POST" do
206
213
request . post
You can’t perform that action at this time.
0 commit comments