From a39ceda4bafa867ce09468d0933517529ed45c3c Mon Sep 17 00:00:00 2001 From: Erik Michaels-Ober Date: Mon, 15 Nov 2010 08:31:03 -0800 Subject: [PATCH] Fix the reserved characters regex to be non-variant by KCODE --- lib/simple_oauth.rb | 2 +- test/simple_oauth_test.rb | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/lib/simple_oauth.rb b/lib/simple_oauth.rb index 1ad294e..5ef9768 100644 --- a/lib/simple_oauth.rb +++ b/lib/simple_oauth.rb @@ -24,7 +24,7 @@ module SimpleOAuth end def self.encode(value) - URI.encode(value.to_s, /[^\w\-\.\~]/) + URI.encode(value.to_s, /[^a-z0-9\-\.\_\~]/i) end def self.decode(value) diff --git a/test/simple_oauth_test.rb b/test/simple_oauth_test.rb index 9727cf8..a930743 100644 --- a/test/simple_oauth_test.rb +++ b/test/simple_oauth_test.rb @@ -30,6 +30,19 @@ class SimpleOAuthTest < Test::Unit::TestCase ['-', '.', '~'].each do |character| assert_equal character, SimpleOAuth::Header.encode(character) end + + major, minor, patch = RUBY_VERSION.split('.') + new_ruby = major.to_i >= 2 || major.to_i == 1 && minor.to_i >= 9 + old_kcode = $KCODE if !new_ruby + begin + %w(n N e E s S u U).each do |kcode| + $KCODE = kcode if !new_ruby + assert_equal '%E3%81%82', SimpleOAuth::Header.encode('あ'), "Failed to correctly escape Japanese under $KCODE = #{kcode}" + assert_equal '%C3%A9', SimpleOAuth::Header.encode('é'), "Failed to correctly escape e+acute under $KCODE = #{kcode}" + end + ensure + $KCODE = old_kcode if !new_ruby + end end def test_decode