emoji 1.0.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c3d7df5281fcc91b481f756f9b00ec60ce7913f8
4
- data.tar.gz: 0b57115afa01104c4feae9487c70ef0fa4eb3285
3
+ metadata.gz: 5a5314dfa9bd2b9fefb8db7cd2c5b52643a11615
4
+ data.tar.gz: ce8ef4dfdbf6044d5864f2ab5a4846d19bc3b36e
5
5
  SHA512:
6
- metadata.gz: aa9dd31820e607c47e33b257078c64965acc25d18c7fc1542c217b9a02eac166dc0c79e487099fe66d95ebca7cbe7d02708cd42712cde9942e4b42e12ca732a3
7
- data.tar.gz: 76ef2ae9bd9f69895c3bf5ad00a65e061416fa08eb5ac443cefc7975412cc9c515326fae53d4b4fa7bb882b318f9bf7844ae4500d2ca07f286c525319ad08795
6
+ metadata.gz: 9dea51512846eb336698457bd4a12f6898c8b9906261b913cc720303a24f03c5c67e7666053ad00f26be58626479f71ba93642911c1a2fb33d37a45a2344630f
7
+ data.tar.gz: 847d2edef664e9949e59c71112b369d0af4ab5cdd91277d9de02fd05a35908466f1e465372e0413d4aedd188ffdc4231e1122d5f7fdfe7fce06d9f8d9e8255a3
@@ -1,5 +1,9 @@
1
1
  # Releases / Changes
2
2
 
3
+ ## 1.0.1
4
+
5
+ * Important html_safe security fix.
6
+
3
7
  ## 1.0.0
4
8
 
5
9
  * Initial gem release
data/README.md CHANGED
@@ -41,7 +41,7 @@ Image Replacement APIs:
41
41
 
42
42
  ```ruby
43
43
  > Emoji.replace_unicode_moji_with_images('I ❤ Emoji')
44
- => "I <img class=\"emoji\" src=\"http://localhost:3000/assets/emoji/heart.png\"> Emoji"
44
+ => "I <img alt=\"❤\" class=\"emoji\" src=\"http://localhost:3000/assets/emoji/heart.png\"> Emoji"
45
45
 
46
46
  > Emoji.image_url_for_unicode_moji('❤')
47
47
  => "http://localhost:3000/assets/emoji/heart.png"
@@ -81,7 +81,7 @@ and call methods directly on your string to return the same results:
81
81
 
82
82
  ```ruby
83
83
  > 'I ❤ Emoji'.with_emoji_images
84
- => "I <img class=\"emoji\" src=\"http://localhost:3000/assets/emoji/heart.png\"> Emoji"
84
+ => "I <img alt=\"❤\" class=\"emoji\" src=\"http://localhost:3000/assets/emoji/heart.png\"> Emoji"
85
85
 
86
86
  > 'heart'.image_url
87
87
  > '❤'.image_url
@@ -43,24 +43,28 @@ module Emoji
43
43
  end
44
44
 
45
45
  def self.replace_unicode_moji_with_images(string)
46
- unless string && string.match(index.unicode_moji_regex)
47
- return string
48
- end
49
-
50
- if string.respond_to?(:html_safe?) && string.html_safe?
51
- safe_string = string.dup
52
- else
53
- safe_string = escape_html(string.dup)
46
+ return string unless string
47
+ unless string.match(index.unicode_moji_regex)
48
+ return safe_string(string)
54
49
  end
55
50
 
51
+ safe_string = safe_string(string.dup)
56
52
  safe_string.gsub!(index.unicode_moji_regex) do |moji|
57
- %Q{<img class="emoji" src="#{ image_url_for_unicode_moji(moji) }">}
53
+ %Q{<img alt="#{moji}" class="emoji" src="#{ image_url_for_unicode_moji(moji) }">}
58
54
  end
59
55
  safe_string = safe_string.html_safe if safe_string.respond_to?(:html_safe)
60
56
 
61
57
  safe_string
62
58
  end
63
59
 
60
+ def self.safe_string(string)
61
+ if string.respond_to?(:html_safe?) && string.html_safe?
62
+ string
63
+ else
64
+ escape_html(string)
65
+ end
66
+ end
67
+
64
68
  def self.escape_html(string)
65
69
  @escaper.escape_html(string)
66
70
  end
@@ -1,3 +1,3 @@
1
1
  module Emoji
2
- VERSION = "1.0.0"
2
+ VERSION = "1.0.1"
3
3
  end
@@ -46,13 +46,13 @@ describe Emoji do
46
46
 
47
47
  it 'should escape html in non html_safe aware strings' do
48
48
  replaced_string = Emoji.replace_unicode_moji_with_images('❤<script>')
49
- assert_equal "<img class=\"emoji\" src=\"http://localhost:3000/heart.png\">&lt;script&gt;", replaced_string
49
+ assert_equal "<img alt=\"❤\" class=\"emoji\" src=\"http://localhost:3000/heart.png\">&lt;script&gt;", replaced_string
50
50
  end
51
51
 
52
52
  it 'should replace unicode moji with img tag' do
53
53
  base_string = "I ❤ Emoji"
54
54
  replaced_string = Emoji.replace_unicode_moji_with_images(base_string)
55
- assert_equal "I <img class=\"emoji\" src=\"http://localhost:3000/heart.png\"> Emoji", replaced_string
55
+ assert_equal "I <img alt=\"❤\" class=\"emoji\" src=\"http://localhost:3000/heart.png\"> Emoji", replaced_string
56
56
  end
57
57
 
58
58
  it 'should handle nil string' do
@@ -60,14 +60,24 @@ describe Emoji do
60
60
  end
61
61
 
62
62
  describe 'with html_safe buffer' do
63
- it 'should escape non html_safe? strings' do
63
+ it 'should escape non html_safe? strings in emoji' do
64
64
  string = HtmlSafeString.new('❤<script>')
65
65
 
66
66
  replaced_string = string.stub(:html_safe?, false) do
67
67
  Emoji.replace_unicode_moji_with_images(string)
68
68
  end
69
69
 
70
- assert_equal "<img class=\"emoji\" src=\"http://localhost:3000/heart.png\">&lt;script&gt;", replaced_string
70
+ assert_equal "<img alt=\"❤\" class=\"emoji\" src=\"http://localhost:3000/heart.png\">&lt;script&gt;", replaced_string
71
+ end
72
+
73
+ it 'should escape non html_safe? strings in all strings' do
74
+ string = HtmlSafeString.new('XSS<script>')
75
+
76
+ replaced_string = string.stub(:html_safe?, false) do
77
+ Emoji.replace_unicode_moji_with_images(string)
78
+ end
79
+
80
+ assert_equal "XSS&lt;script&gt;", replaced_string
71
81
  end
72
82
 
73
83
  it 'should not escape html_safe strings' do
@@ -77,10 +87,10 @@ describe Emoji do
77
87
  Emoji.replace_unicode_moji_with_images(string)
78
88
  end
79
89
 
80
- assert_equal "<img class=\"emoji\" src=\"http://localhost:3000/heart.png\"><a href=\"harmless\">", replaced_string
90
+ assert_equal "<img alt=\"❤\" class=\"emoji\" src=\"http://localhost:3000/heart.png\"><a href=\"harmless\">", replaced_string
81
91
  end
82
92
 
83
- it 'should always return an html_safe string' do
93
+ it 'should always return an html_safe string for emoji' do
84
94
  string = HtmlSafeString.new('❤')
85
95
  replaced_string = string.stub(:html_safe, 'safe_buffer') do
86
96
  Emoji.replace_unicode_moji_with_images(string)
@@ -88,6 +98,15 @@ describe Emoji do
88
98
 
89
99
  assert_equal "safe_buffer", replaced_string
90
100
  end
101
+
102
+ it 'should always return an html_safe string for any string' do
103
+ string = HtmlSafeString.new('Content')
104
+ replaced_string = string.stub(:html_safe, 'safe_buffer') do
105
+ Emoji.replace_unicode_moji_with_images(string)
106
+ end
107
+
108
+ assert_equal "Content", replaced_string
109
+ end
91
110
  end
92
111
  end
93
112
 
@@ -108,4 +127,4 @@ describe Emoji do
108
127
  end
109
128
  end
110
129
 
111
- end
130
+ end
@@ -7,7 +7,7 @@ describe String, 'with Emoji extensions' do
7
7
  it 'should replace unicode moji with an img tag' do
8
8
  base_string = "I ❤ Emoji"
9
9
  replaced_string = base_string.with_emoji_images
10
- assert_equal "I <img class=\"emoji\" src=\"http://localhost:3000/heart.png\"> Emoji", replaced_string
10
+ assert_equal "I <img alt=\"❤\" class=\"emoji\" src=\"http://localhost:3000/heart.png\"> Emoji", replaced_string
11
11
  end
12
12
  end
13
13
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: emoji
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Steve Klabnik
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-02-10 00:00:00.000000000 Z
12
+ date: 2014-03-13 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: json
@@ -618,7 +618,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
618
618
  version: '0'
619
619
  requirements: []
620
620
  rubyforge_project:
621
- rubygems_version: 2.0.14
621
+ rubygems_version: 2.0.3
622
622
  signing_key:
623
623
  specification_version: 4
624
624
  summary: 'A Ruby gem. For emoji. For everyone. :heart:'
@@ -627,4 +627,3 @@ test_files:
627
627
  - test/index_test.rb
628
628
  - test/string_ext_test.rb
629
629
  - test/test_helper.rb
630
- has_rdoc: