@@ -368,6 +368,72 @@ def getAttributeNames
368
368
expect ( env [ 'org.apache.internal' ] ) . to be true
369
369
end
370
370
371
+ it "parses strange request parameters (Rack-compat)" do
372
+ servlet_request = @servlet_request
373
+ servlet_request . setMethod 'GET'
374
+ servlet_request . setContextPath '/'
375
+ servlet_request . setPathInfo '/path'
376
+ servlet_request . setRequestURI '/home/path'
377
+
378
+ servlet_request . setQueryString 'foo]=0&bar[=1&baz_=2&[meh=3'
379
+ servlet_request . addParameter ( 'foo]' , '0' )
380
+ servlet_request . addParameter ( 'bar[' , '1' )
381
+ servlet_request . addParameter ( 'baz_' , '2' )
382
+ servlet_request . addParameter ( '[meh' , '3' )
383
+
384
+ env = servlet . create_env ( @servlet_env )
385
+ rack_request = Rack ::Request . new ( env )
386
+
387
+ # Rack (1.5.2) does it as :
388
+ # { "foo" => "0", "bar" => nil, "baz_" => "2", "meh" => "3" }
389
+ # 1.6.0 :
390
+ # { "foo" => "0", "bar[" => "1", "baz_" => "2", "meh" => "3" }
391
+
392
+ expect ( rack_request . GET [ 'foo' ] ) . to eql ( '0' )
393
+ expect ( rack_request . GET [ 'baz_' ] ) . to eql ( '2' )
394
+
395
+ if rack_release ( '1.6' )
396
+ # expect( rack_request.GET['bar['] ).to eql('1')
397
+ else
398
+ expect ( rack_request . GET . key? ( 'bar' ) ) . to be true
399
+ end
400
+ expect ( rack_request . GET [ 'meh' ] ) . to eql ( '3' )
401
+
402
+ expect ( rack_request . query_string ) . to eql 'foo]=0&bar[=1&baz_=2&[meh=3'
403
+ end
404
+
405
+ it "parses nestedx request parameters (Rack-compat)" do
406
+ servlet_request = @servlet_request
407
+ servlet_request . setMethod 'GET'
408
+ servlet_request . setContextPath '/'
409
+ servlet_request . setPathInfo '/path'
410
+ servlet_request . setRequestURI '/home/path'
411
+
412
+ servlet_request . setQueryString 'foo[bar]=0&foo[baz]=1&foo[bar]=2&foo[meh[]]=x&foo[meh[]]=42&huh[1]=b&huh[0]=a'
413
+ servlet_request . addParameter ( 'foo[bar]' , '0' )
414
+ servlet_request . addParameter ( 'foo[baz]' , '1' )
415
+ servlet_request . addParameter ( 'foo[bar]' , '2' )
416
+ servlet_request . addParameter ( 'foo[meh[]]' , 'x' )
417
+ servlet_request . addParameter ( 'foo[meh[]]' , '42' )
418
+ servlet_request . addParameter ( 'huh[1]' , 'b' )
419
+ servlet_request . addParameter ( 'huh[0]' , 'a' )
420
+
421
+ env = servlet . create_env ( @servlet_env )
422
+ rack_request = Rack ::Request . new ( env )
423
+
424
+ #params = { "foo" => { "bar" => "2", "baz" => "1", "meh" => [ nil, nil ] }, "huh" => { "1" => "b", "0" => "a" } }
425
+ #expect( rack_request.GET ).to eql(params)
426
+
427
+ expect ( rack_request . GET [ 'foo' ] [ 'bar' ] ) . to eql ( '2' )
428
+ expect ( rack_request . GET [ 'foo' ] [ 'baz' ] ) . to eql ( '1' )
429
+ expect ( rack_request . params [ 'foo' ] [ 'meh' ] ) . to be_a Array
430
+ expect ( rack_request . params [ 'huh' ] ) . to eql ( { "1" => "b" , "0" => "a" } )
431
+
432
+ expect ( rack_request . POST ) . to eql Hash . new
433
+
434
+ expect ( rack_request . query_string ) . to eql 'foo[bar]=0&foo[baz]=1&foo[bar]=2&foo[meh[]]=x&foo[meh[]]=42&huh[1]=b&huh[0]=a'
435
+ end
436
+
371
437
it "raises if nested request parameters are broken (Rack-compat)" do
372
438
servlet_request = @servlet_request
373
439
servlet_request . setMethod 'GET'
0 commit comments