escape_utils 1.2.0 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/.github/workflows/ci.yml +43 -0
- data/.gitignore +0 -1
- data/CHANGELOG.md +23 -0
- data/Gemfile +15 -0
- data/README.md +48 -91
- data/Rakefile +4 -2
- data/benchmark/html_escape_once.rb +25 -0
- data/benchmark/javascript_escape.rb +1 -1
- data/benchmark/javascript_unescape.rb +1 -1
- data/benchmark/url_decode.rb +28 -0
- data/benchmark/url_encode.rb +37 -0
- data/benchmark/xml_escape.rb +7 -11
- data/bin/console +8 -0
- data/escape_utils.gemspec +1 -12
- data/ext/escape_utils/escape_utils.c +8 -115
- data/ext/escape_utils/houdini.h +3 -5
- data/ext/escape_utils/houdini_html_e.c +52 -24
- data/ext/escape_utils/houdini_js_e.c +15 -3
- data/ext/escape_utils/houdini_uri_e.c +7 -18
- data/ext/escape_utils/houdini_uri_u.c +5 -15
- data/ext/escape_utils/houdini_xml_e.c +15 -1
- data/lib/escape_utils/html/cgi.rb +10 -8
- data/lib/escape_utils/html/erb.rb +1 -10
- data/lib/escape_utils/html/haml.rb +1 -7
- data/lib/escape_utils/html/rack.rb +3 -3
- data/lib/escape_utils/html_safety.rb +13 -0
- data/lib/escape_utils/url/cgi.rb +0 -8
- data/lib/escape_utils/url/erb.rb +1 -1
- data/lib/escape_utils/url/rack.rb +0 -12
- data/lib/escape_utils/url/uri.rb +11 -7
- data/lib/escape_utils/version.rb +1 -1
- data/lib/escape_utils/xml/builder.rb +2 -2
- data/lib/escape_utils.rb +61 -9
- data/test/helper.rb +16 -3
- data/test/html/escape_test.rb +66 -42
- data/test/html/unescape_test.rb +3 -21
- data/test/html_safety_test.rb +1 -27
- data/test/javascript/escape_test.rb +53 -20
- data/test/javascript/unescape_test.rb +16 -18
- data/test/query/escape_test.rb +3 -21
- data/test/query/unescape_test.rb +5 -23
- data/test/uri/escape_test.rb +16 -18
- data/test/uri/unescape_test.rb +17 -19
- data/test/uri_component/escape_test.rb +15 -17
- data/test/uri_component/unescape_test.rb +17 -19
- data/test/url/escape_test.rb +3 -21
- data/test/url/unescape_test.rb +5 -23
- data/test/xml/escape_test.rb +15 -17
- metadata +14 -127
- data/.travis.yml +0 -7
- data/benchmark/html_escape.rb +0 -68
- data/benchmark/html_unescape.rb +0 -35
- data/benchmark/url_escape.rb +0 -56
- data/benchmark/url_unescape.rb +0 -50
- data/ext/escape_utils/houdini_html_u.c +0 -122
@@ -43,26 +43,24 @@ class UriComponentEscapeTest < Minitest::Test
|
|
43
43
|
assert_equal "a%2Fslash", EscapeUtils.escape_uri_component("a/slash")
|
44
44
|
end
|
45
45
|
|
46
|
-
|
47
|
-
|
48
|
-
str = "fo<o>bar"
|
46
|
+
def test_input_must_be_utf8_or_ascii
|
47
|
+
str = "fo<o>bar"
|
49
48
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
end
|
54
|
-
|
55
|
-
str.force_encoding 'UTF-8'
|
56
|
-
begin
|
57
|
-
EscapeUtils.escape_uri_component(str)
|
58
|
-
rescue Encoding::CompatibilityError => e
|
59
|
-
assert_nil e, "#{e.class.name} raised, expected not to"
|
60
|
-
end
|
49
|
+
str.force_encoding 'ISO-8859-1'
|
50
|
+
assert_raises Encoding::CompatibilityError do
|
51
|
+
EscapeUtils.escape_uri_component(str)
|
61
52
|
end
|
62
53
|
|
63
|
-
|
64
|
-
|
65
|
-
|
54
|
+
str.force_encoding 'UTF-8'
|
55
|
+
begin
|
56
|
+
EscapeUtils.escape_uri_component(str)
|
57
|
+
rescue Encoding::CompatibilityError => e
|
58
|
+
assert_nil e, "#{e.class.name} raised, expected not to"
|
66
59
|
end
|
67
60
|
end
|
61
|
+
|
62
|
+
def test_return_value_is_tagged_as_utf8
|
63
|
+
str = "fo<o>bar"
|
64
|
+
assert_equal Encoding.find('UTF-8'), EscapeUtils.escape_uri_component(str).encoding
|
65
|
+
end
|
68
66
|
end
|
@@ -39,33 +39,31 @@ class UriComponentUnescapeTest < Minitest::Test
|
|
39
39
|
|
40
40
|
def test_multibyte_characters
|
41
41
|
matz_name = "\xE3\x81\xBE\xE3\x81\xA4\xE3\x82\x82\xE3\x81\xA8" # Matsumoto
|
42
|
-
matz_name.force_encoding('UTF-8')
|
42
|
+
matz_name.force_encoding('UTF-8')
|
43
43
|
assert_equal matz_name, EscapeUtils.unescape_uri_component('%E3%81%BE%E3%81%A4%E3%82%82%E3%81%A8')
|
44
44
|
matz_name_sep = "\xE3\x81\xBE\xE3\x81\xA4 \xE3\x82\x82\xE3\x81\xA8" # Matsu moto
|
45
|
-
matz_name_sep.force_encoding('UTF-8')
|
45
|
+
matz_name_sep.force_encoding('UTF-8')
|
46
46
|
assert_equal matz_name_sep, EscapeUtils.unescape_uri_component('%E3%81%BE%E3%81%A4%20%E3%82%82%E3%81%A8')
|
47
47
|
end
|
48
48
|
|
49
|
-
|
50
|
-
|
51
|
-
escaped = EscapeUtils.escape_uri_component("fo<o>bar")
|
49
|
+
def test_input_must_be_valid_utf8_or_ascii
|
50
|
+
escaped = EscapeUtils.escape_uri_component("fo<o>bar")
|
52
51
|
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
end
|
57
|
-
|
58
|
-
escaped.force_encoding 'UTF-8'
|
59
|
-
begin
|
60
|
-
EscapeUtils.unescape_uri_component(escaped)
|
61
|
-
rescue Encoding::CompatibilityError => e
|
62
|
-
assert_nil e, "#{e.class.name} raised, expected not to"
|
63
|
-
end
|
52
|
+
escaped.force_encoding 'ISO-8859-1'
|
53
|
+
assert_raises Encoding::CompatibilityError do
|
54
|
+
EscapeUtils.unescape_uri_component(escaped)
|
64
55
|
end
|
65
56
|
|
66
|
-
|
67
|
-
|
68
|
-
|
57
|
+
escaped.force_encoding 'UTF-8'
|
58
|
+
begin
|
59
|
+
EscapeUtils.unescape_uri_component(escaped)
|
60
|
+
rescue Encoding::CompatibilityError => e
|
61
|
+
assert_nil e, "#{e.class.name} raised, expected not to"
|
69
62
|
end
|
70
63
|
end
|
64
|
+
|
65
|
+
def test_return_value_is_tagged_as_utf8
|
66
|
+
escaped = EscapeUtils.escape_uri_component("fo<o>bar")
|
67
|
+
assert_equal Encoding.find('UTF-8'), EscapeUtils.unescape_uri_component(escaped).encoding
|
68
|
+
end
|
71
69
|
end
|
data/test/url/escape_test.rb
CHANGED
@@ -41,26 +41,8 @@ class UrlEscapeTest < Minitest::Test
|
|
41
41
|
assert_equal "a%2Fslash", EscapeUtils.escape_url("a/slash")
|
42
42
|
end
|
43
43
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
str.force_encoding 'ISO-8859-1'
|
49
|
-
assert_raises Encoding::CompatibilityError do
|
50
|
-
EscapeUtils.escape_url(str)
|
51
|
-
end
|
52
|
-
|
53
|
-
str.force_encoding 'UTF-8'
|
54
|
-
begin
|
55
|
-
EscapeUtils.escape_url(str)
|
56
|
-
rescue Encoding::CompatibilityError => e
|
57
|
-
assert_nil e, "#{e.class.name} raised, expected not to"
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
def test_return_value_is_tagged_as_utf8
|
62
|
-
str = "fo<o>bar"
|
63
|
-
assert_equal Encoding.find('UTF-8'), EscapeUtils.escape_url(str).encoding
|
64
|
-
end
|
44
|
+
def test_return_value_is_tagged_as_utf8
|
45
|
+
str = "fo<o>bar"
|
46
|
+
assert_equal Encoding.find('UTF-8'), EscapeUtils.escape_url(str).encoding
|
65
47
|
end
|
66
48
|
end
|
data/test/url/unescape_test.rb
CHANGED
@@ -28,10 +28,10 @@ class UrlUnescapeTest < Minitest::Test
|
|
28
28
|
|
29
29
|
def test_multibyte_characters
|
30
30
|
matz_name = "\xE3\x81\xBE\xE3\x81\xA4\xE3\x82\x82\xE3\x81\xA8" # Matsumoto
|
31
|
-
matz_name.force_encoding('UTF-8')
|
31
|
+
matz_name.force_encoding('UTF-8')
|
32
32
|
assert_equal matz_name, EscapeUtils.unescape_url('%E3%81%BE%E3%81%A4%E3%82%82%E3%81%A8')
|
33
33
|
matz_name_sep = "\xE3\x81\xBE\xE3\x81\xA4 \xE3\x82\x82\xE3\x81\xA8" # Matsu moto
|
34
|
-
matz_name_sep.force_encoding('UTF-8')
|
34
|
+
matz_name_sep.force_encoding('UTF-8')
|
35
35
|
assert_equal matz_name_sep, EscapeUtils.unescape_url('%E3%81%BE%E3%81%A4%20%E3%82%82%E3%81%A8')
|
36
36
|
end
|
37
37
|
|
@@ -46,26 +46,8 @@ class UrlUnescapeTest < Minitest::Test
|
|
46
46
|
end
|
47
47
|
end
|
48
48
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
escaped.force_encoding 'ISO-8859-1'
|
54
|
-
assert_raises Encoding::CompatibilityError do
|
55
|
-
EscapeUtils.unescape_url(escaped)
|
56
|
-
end
|
57
|
-
|
58
|
-
escaped.force_encoding 'UTF-8'
|
59
|
-
begin
|
60
|
-
EscapeUtils.unescape_url(escaped)
|
61
|
-
rescue Encoding::CompatibilityError => e
|
62
|
-
assert_nil e, "#{e.class.name} raised, expected not to"
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
def test_return_value_is_tagged_as_utf8
|
67
|
-
escaped = EscapeUtils.escape_url("fo<o>bar")
|
68
|
-
assert_equal Encoding.find('UTF-8'), EscapeUtils.unescape_url(escaped).encoding
|
69
|
-
end
|
49
|
+
def test_return_value_is_tagged_as_utf8
|
50
|
+
escaped = EscapeUtils.escape_url("fo<o>bar")
|
51
|
+
assert_equal Encoding.find('UTF-8'), EscapeUtils.unescape_url(escaped).encoding
|
70
52
|
end
|
71
53
|
end
|
data/test/xml/escape_test.rb
CHANGED
@@ -42,26 +42,24 @@ class XmlEscapeTest < Minitest::Test
|
|
42
42
|
end
|
43
43
|
end
|
44
44
|
|
45
|
-
|
46
|
-
|
47
|
-
str = "<some_tag/>"
|
45
|
+
def test_input_must_be_utf8_or_ascii
|
46
|
+
str = "<some_tag/>"
|
48
47
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
end
|
53
|
-
|
54
|
-
str.force_encoding 'UTF-8'
|
55
|
-
begin
|
56
|
-
EscapeUtils.escape_xml(str)
|
57
|
-
rescue Encoding::CompatibilityError => e
|
58
|
-
assert_nil e, "#{e.class.name} raised, expected not to"
|
59
|
-
end
|
48
|
+
str.force_encoding 'ISO-8859-1'
|
49
|
+
assert_raises Encoding::CompatibilityError do
|
50
|
+
EscapeUtils.escape_xml(str)
|
60
51
|
end
|
61
52
|
|
62
|
-
|
63
|
-
|
64
|
-
|
53
|
+
str.force_encoding 'UTF-8'
|
54
|
+
begin
|
55
|
+
EscapeUtils.escape_xml(str)
|
56
|
+
rescue Encoding::CompatibilityError => e
|
57
|
+
assert_nil e, "#{e.class.name} raised, expected not to"
|
65
58
|
end
|
66
59
|
end
|
60
|
+
|
61
|
+
def test_return_value_is_tagged_as_utf8
|
62
|
+
str = "<some_tag/>"
|
63
|
+
assert_equal Encoding.find('UTF-8'), EscapeUtils.escape_url(str).encoding
|
64
|
+
end
|
67
65
|
end
|
metadata
CHANGED
@@ -1,127 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: escape_utils
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brian Lopez
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
12
|
-
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: rake-compiler
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - ">="
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: 0.7.5
|
20
|
-
type: :development
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - ">="
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: 0.7.5
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: minitest
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - ">="
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: 5.0.0
|
34
|
-
type: :development
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - ">="
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: 5.0.0
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: benchmark-ips
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - ">="
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '0'
|
48
|
-
type: :development
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - ">="
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '0'
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: rack
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - ">="
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '0'
|
62
|
-
type: :development
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - ">="
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: '0'
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: haml
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
72
|
-
requirements:
|
73
|
-
- - ">="
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
version: '0'
|
76
|
-
type: :development
|
77
|
-
prerelease: false
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
79
|
-
requirements:
|
80
|
-
- - ">="
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: '0'
|
83
|
-
- !ruby/object:Gem::Dependency
|
84
|
-
name: fast_xs
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
86
|
-
requirements:
|
87
|
-
- - ">="
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version: '0'
|
90
|
-
type: :development
|
91
|
-
prerelease: false
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
93
|
-
requirements:
|
94
|
-
- - ">="
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
version: '0'
|
97
|
-
- !ruby/object:Gem::Dependency
|
98
|
-
name: actionpack
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
100
|
-
requirements:
|
101
|
-
- - ">="
|
102
|
-
- !ruby/object:Gem::Version
|
103
|
-
version: '0'
|
104
|
-
type: :development
|
105
|
-
prerelease: false
|
106
|
-
version_requirements: !ruby/object:Gem::Requirement
|
107
|
-
requirements:
|
108
|
-
- - ">="
|
109
|
-
- !ruby/object:Gem::Version
|
110
|
-
version: '0'
|
111
|
-
- !ruby/object:Gem::Dependency
|
112
|
-
name: url_escape
|
113
|
-
requirement: !ruby/object:Gem::Requirement
|
114
|
-
requirements:
|
115
|
-
- - ">="
|
116
|
-
- !ruby/object:Gem::Version
|
117
|
-
version: '0'
|
118
|
-
type: :development
|
119
|
-
prerelease: false
|
120
|
-
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
requirements:
|
122
|
-
- - ">="
|
123
|
-
- !ruby/object:Gem::Version
|
124
|
-
version: '0'
|
11
|
+
date: 2022-06-16 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
125
13
|
description: Quickly perform HTML, URL, URI and Javascript escaping/unescaping
|
126
14
|
email: seniorlopez@gmail.com
|
127
15
|
executables: []
|
@@ -129,19 +17,20 @@ extensions:
|
|
129
17
|
- ext/escape_utils/extconf.rb
|
130
18
|
extra_rdoc_files: []
|
131
19
|
files:
|
20
|
+
- ".github/workflows/ci.yml"
|
132
21
|
- ".gitignore"
|
133
|
-
-
|
22
|
+
- CHANGELOG.md
|
134
23
|
- Gemfile
|
135
24
|
- LICENSE
|
136
25
|
- README.md
|
137
26
|
- Rakefile
|
138
|
-
- benchmark/
|
139
|
-
- benchmark/html_unescape.rb
|
27
|
+
- benchmark/html_escape_once.rb
|
140
28
|
- benchmark/javascript_escape.rb
|
141
29
|
- benchmark/javascript_unescape.rb
|
142
|
-
- benchmark/
|
143
|
-
- benchmark/
|
30
|
+
- benchmark/url_decode.rb
|
31
|
+
- benchmark/url_encode.rb
|
144
32
|
- benchmark/xml_escape.rb
|
33
|
+
- bin/console
|
145
34
|
- escape_utils.gemspec
|
146
35
|
- ext/escape_utils/buffer.c
|
147
36
|
- ext/escape_utils/buffer.h
|
@@ -150,7 +39,6 @@ files:
|
|
150
39
|
- ext/escape_utils/houdini.h
|
151
40
|
- ext/escape_utils/houdini_href_e.c
|
152
41
|
- ext/escape_utils/houdini_html_e.c
|
153
|
-
- ext/escape_utils/houdini_html_u.c
|
154
42
|
- ext/escape_utils/houdini_js_e.c
|
155
43
|
- ext/escape_utils/houdini_js_u.c
|
156
44
|
- ext/escape_utils/houdini_uri_e.c
|
@@ -191,7 +79,7 @@ homepage: https://github.com/brianmario/escape_utils
|
|
191
79
|
licenses:
|
192
80
|
- MIT
|
193
81
|
metadata: {}
|
194
|
-
post_install_message:
|
82
|
+
post_install_message:
|
195
83
|
rdoc_options:
|
196
84
|
- "--charset=UTF-8"
|
197
85
|
require_paths:
|
@@ -200,16 +88,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
200
88
|
requirements:
|
201
89
|
- - ">="
|
202
90
|
- !ruby/object:Gem::Version
|
203
|
-
version:
|
91
|
+
version: '2.5'
|
204
92
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
205
93
|
requirements:
|
206
94
|
- - ">="
|
207
95
|
- !ruby/object:Gem::Version
|
208
96
|
version: '0'
|
209
97
|
requirements: []
|
210
|
-
|
211
|
-
|
212
|
-
signing_key:
|
98
|
+
rubygems_version: 3.1.2
|
99
|
+
signing_key:
|
213
100
|
specification_version: 4
|
214
101
|
summary: Faster string escaping routines for your web apps
|
215
102
|
test_files:
|
data/.travis.yml
DELETED
data/benchmark/html_escape.rb
DELETED
@@ -1,68 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
require 'rubygems'
|
4
|
-
require 'bundler/setup'
|
5
|
-
require 'benchmark/ips'
|
6
|
-
|
7
|
-
require 'rack'
|
8
|
-
require 'erb'
|
9
|
-
require 'cgi'
|
10
|
-
require 'haml'
|
11
|
-
require 'fast_xs_extra'
|
12
|
-
require 'escape_utils'
|
13
|
-
|
14
|
-
module HamlBench
|
15
|
-
extend Haml::Helpers
|
16
|
-
end
|
17
|
-
|
18
|
-
url = "https://en.wikipedia.org/wiki/Succession_to_the_British_throne"
|
19
|
-
html = `curl -s #{url}`
|
20
|
-
html = html.force_encoding('utf-8') if html.respond_to?(:force_encoding)
|
21
|
-
puts "Escaping #{html.bytesize} bytes of html from #{url}"
|
22
|
-
|
23
|
-
Benchmark.ips do |x|
|
24
|
-
x.report "Rack::Utils.escape_html" do |times|
|
25
|
-
times.times do
|
26
|
-
Rack::Utils.escape_html(html)
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
x.report "Haml::Helpers.html_escape" do |times|
|
31
|
-
times.times do
|
32
|
-
HamlBench.html_escape(html)
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
x.report "ERB::Util.html_escape" do |times|
|
37
|
-
times.times do
|
38
|
-
ERB::Util.html_escape(html)
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
x.report "CGI.escapeHTML" do |times|
|
43
|
-
times.times do
|
44
|
-
CGI.escapeHTML(html)
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
x.report "String#gsub" do |times|
|
49
|
-
html_escape = { '&' => '&', '>' => '>', '<' => '<', '"' => '"', "'" => ''' }
|
50
|
-
times.times do
|
51
|
-
html.gsub(/[&"'><]/, html_escape)
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
x.report "fast_xs_extra#fast_xs_html" do |times|
|
56
|
-
times.times do
|
57
|
-
html.fast_xs_html
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
x.report "EscapeUtils.escape_html" do |times|
|
62
|
-
times.times do
|
63
|
-
EscapeUtils.escape_html(html)
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
x.compare!
|
68
|
-
end
|
data/benchmark/html_unescape.rb
DELETED
@@ -1,35 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
require 'rubygems'
|
4
|
-
require 'bundler/setup'
|
5
|
-
require 'benchmark/ips'
|
6
|
-
|
7
|
-
require 'cgi'
|
8
|
-
require 'haml'
|
9
|
-
require 'escape_utils'
|
10
|
-
|
11
|
-
module HamlBench
|
12
|
-
extend Haml::Helpers
|
13
|
-
end
|
14
|
-
|
15
|
-
url = "https://en.wikipedia.org/wiki/Succession_to_the_British_throne"
|
16
|
-
html = `curl -s #{url}`
|
17
|
-
html = html.force_encoding('binary') if html.respond_to?(:force_encoding)
|
18
|
-
escaped_html = EscapeUtils.escape_html(html)
|
19
|
-
puts "Unescaping #{escaped_html.bytesize} bytes of escaped html, from #{url}"
|
20
|
-
|
21
|
-
Benchmark.ips do |x|
|
22
|
-
x.report "CGI.unescapeHTML" do |times|
|
23
|
-
times.times do
|
24
|
-
CGI.unescapeHTML(escaped_html)
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
x.report "EscapeUtils.unescape_html" do |times|
|
29
|
-
times.times do
|
30
|
-
EscapeUtils.unescape_html(escaped_html)
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
x.compare!
|
35
|
-
end
|
data/benchmark/url_escape.rb
DELETED
@@ -1,56 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
require 'rubygems'
|
4
|
-
require 'bundler/setup'
|
5
|
-
require 'benchmark/ips'
|
6
|
-
|
7
|
-
require 'rack'
|
8
|
-
require 'erb'
|
9
|
-
require 'cgi'
|
10
|
-
require 'url_escape'
|
11
|
-
require 'fast_xs_extra'
|
12
|
-
require 'escape_utils'
|
13
|
-
|
14
|
-
url = "https://www.yourmom.com/cgi-bin/session.cgi?sess_args=mYHcEA dh435dqUs0moGHeeAJTSLLbdbcbd9ef----,574b95600e9ab7d27eb0bf524ac68c27----"
|
15
|
-
url = url.force_encoding('us-ascii') if url.respond_to?(:force_encoding)
|
16
|
-
puts "Escaping a #{url.bytesize} byte URL times"
|
17
|
-
|
18
|
-
Benchmark.ips do |x|
|
19
|
-
x.report "ERB::Util.url_encode" do |times|
|
20
|
-
times.times do
|
21
|
-
ERB::Util.url_encode(url)
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
x.report "Rack::Utils.escape" do |times|
|
26
|
-
times.times do
|
27
|
-
Rack::Utils.escape(url)
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
x.report "CGI.escape" do |times|
|
32
|
-
times.times do
|
33
|
-
CGI.escape(url)
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
x.report "URLEscape#escape" do |times|
|
38
|
-
times.times do
|
39
|
-
URLEscape.escape(url)
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
x.report "fast_xs_extra#fast_xs_url" do |times|
|
44
|
-
times.times do
|
45
|
-
url.fast_xs_url
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
x.report "EscapeUtils.escape_url" do |times|
|
50
|
-
times.times do
|
51
|
-
EscapeUtils.escape_url(url)
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
x.compare!
|
56
|
-
end
|
data/benchmark/url_unescape.rb
DELETED
@@ -1,50 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
require 'rubygems'
|
4
|
-
require 'bundler/setup'
|
5
|
-
require 'benchmark/ips'
|
6
|
-
|
7
|
-
require 'rack'
|
8
|
-
require 'cgi'
|
9
|
-
require 'url_escape'
|
10
|
-
require 'fast_xs_extra'
|
11
|
-
require 'escape_utils'
|
12
|
-
|
13
|
-
url = "https://www.yourmom.com/cgi-bin/session.cgi?sess_args=mYHcEA dh435dqUs0moGHeeAJTSLLbdbcbd9ef----,574b95600e9ab7d27eb0bf524ac68c27----"
|
14
|
-
url = url.force_encoding('us-ascii') if url.respond_to?(:force_encoding)
|
15
|
-
escaped_url = EscapeUtils.escape_url(url)
|
16
|
-
puts "Escaping a #{url.bytesize} byte URL"
|
17
|
-
|
18
|
-
Benchmark.ips do |x|
|
19
|
-
x.report "Rack::Utils.unescape" do |times|
|
20
|
-
times.times do
|
21
|
-
Rack::Utils.unescape(escaped_url)
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
x.report "CGI.unescape" do |times|
|
26
|
-
times.times do
|
27
|
-
CGI.unescape(escaped_url)
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
x.report "URLEscape#unescape" do |times|
|
32
|
-
times.times do
|
33
|
-
URLEscape.unescape(escaped_url)
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
x.report "fast_xs_extra#fast_uxs_cgi" do |times|
|
38
|
-
times.times do
|
39
|
-
url.fast_uxs_cgi
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
x.report "EscapeUtils.unescape_url" do |times|
|
44
|
-
times.times do
|
45
|
-
EscapeUtils.unescape_url(escaped_url)
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
x.compare!
|
50
|
-
end
|