Skip to content

Commit eca9bf6

Browse files
committed
merge revision(s) 39384,39509,39511: [Backport ruby#7961]
* lib/rexml/document.rb (REXML::Document.entity_expansion_text_limit): new attribute to read/write entity expansion text limit. the default limit is 10Kb. * lib/rexml/text.rb (REXML::Text.unnormalize): check above attribute. * lib/rexml/document.rb: move entity_expansion_limit accessor to ... * lib/rexml/rexml.rb: ... here to make rexml/text independent from REXML::Document. It causes circular require. * lib/rexml/document.rb (REXML::Document.entity_expansion_limit): deprecated. * lib/rexml/document.rb (REXML::Document.entity_expansion_limit=): deprecated. * lib/rexml/text.rb: add missing require "rexml/rexml" for REXML.entity_expansion_limit. Reported by Robert Ulejczyk. Thanks!!! [ruby-core:52895] [Bug ruby#7961] * lib/rexml/document.rb: move entity_expansion_text_limit accessor to ... * lib/rexml/document.rb (REXML::Document.entity_expansion_text_limit): * lib/rexml/document.rb (REXML::Document.entity_expansion_text_limit=): REXML.entity_expansion_text_limit. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8_7@40812 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
1 parent 2ac236d commit eca9bf6

File tree

5 files changed

+79
-33
lines changed

5 files changed

+79
-33
lines changed

ChangeLog

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,24 @@
1+
Sat May 18 23:34:50 2013 Kouhei Sutou <kou@cozmixng.org>
2+
3+
* lib/rexml/document.rb: move entity_expansion_text_limit accessor to ...
4+
* lib/rexml/rexml.rb: ... here to make rexml/text independent from
5+
REXML::Document. It causes circular require.
6+
* lib/rexml/document.rb (REXML::Document.entity_expansion_text_limit):
7+
deprecated.
8+
* lib/rexml/document.rb (REXML::Document.entity_expansion_text_limit=):
9+
deprecated.
10+
* lib/rexml/text.rb: add missing require "rexml/rexml" for
11+
REXML.entity_expansion_text_limit.
12+
Reported by Robert Ulejczyk. Thanks!!! [ruby-core:52895] [Bug #7961]
13+
14+
Sat May 18 23:34:50 2013 Aaron Patterson <aaron@tenderlovemaking.com>
15+
16+
* lib/rexml/document.rb (REXML::Document.entity_expansion_text_limit):
17+
new attribute to read/write entity expansion text limit. the default
18+
limit is 10Kb.
19+
20+
* lib/rexml/text.rb (REXML::Text.unnormalize): check above attribute.
21+
122
Fri Oct 12 12:25:15 2012 URABE Shyouhei <shyouhei@ruby-lang.org>
223

324
* error.c (name_err_to_s): we need not infect msg.

lib/rexml/document.rb

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,20 @@ def Document::entity_expansion_limit
213213
return @@entity_expansion_limit
214214
end
215215

216+
# Set the entity expansion limit. By default the limit is set to 10240.
217+
#
218+
# Deprecated. Use REXML.entity_expansion_text_limit= instead.
219+
def Document::entity_expansion_text_limit=( val )
220+
REXML.entity_expansion_text_limit = val
221+
end
222+
223+
# Get the entity expansion limit. By default the limit is set to 10000.
224+
#
225+
# Deprecated. Use REXML.entity_expansion_text_limit instead.
226+
def Document::entity_expansion_text_limit
227+
return REXML.entity_expansion_text_limit
228+
end
229+
216230
attr_reader :entity_expansion_count
217231

218232
def record_entity_expansion

lib/rexml/rexml.rb

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,4 +29,16 @@ module REXML
2929

3030
Copyright = COPYRIGHT
3131
Version = VERSION
32+
33+
@@entity_expansion_text_limit = 10_240
34+
35+
# Set the entity expansion limit. By default the limit is set to 10240.
36+
def self.entity_expansion_text_limit=( val )
37+
@@entity_expansion_text_limit = val
38+
end
39+
40+
# Get the entity expansion limit. By default the limit is set to 10240.
41+
def self.entity_expansion_text_limit
42+
return @@entity_expansion_text_limit
43+
end
3244
end

lib/rexml/text.rb

Lines changed: 26 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
require 'rexml/rexml'
12
require 'rexml/entity'
23
require 'rexml/doctype'
34
require 'rexml/child'
@@ -308,37 +309,35 @@ def Text::normalize( input, doctype=nil, entity_filter=nil )
308309

309310
# Unescapes all possible entities
310311
def Text::unnormalize( string, doctype=nil, filter=nil, illegal=nil )
311-
rv = string.clone
312-
rv.gsub!( /\r\n?/, "\n" )
313-
matches = rv.scan( REFERENCE )
314-
return rv if matches.size == 0
315-
rv.gsub!( NUMERICENTITY ) {|m|
316-
m=$1
317-
m = "0#{m}" if m[0] == ?x
318-
[Integer(m)].pack('U*')
312+
sum = 0
313+
string.gsub( /\r\n?/, "\n" ).gsub( REFERENCE ) {
314+
s = Text.expand($&, doctype, filter)
315+
if sum + s.bytesize > REXML.entity_expansion_text_limit
316+
raise "entity expansion has grown too large"
317+
else
318+
sum += s.bytesize
319+
end
320+
s
319321
}
320-
matches.collect!{|x|x[0]}.compact!
321-
if matches.size > 0
322-
if doctype
323-
matches.each do |entity_reference|
324-
unless filter and filter.include?(entity_reference)
325-
entity_value = doctype.entity( entity_reference )
326-
re = /&#{entity_reference};/
327-
rv.gsub!( re, entity_value ) if entity_value
328-
end
329-
end
322+
end
323+
324+
def Text.expand(ref, doctype, filter)
325+
if ref[1] == ?#
326+
if ref[2] == ?x
327+
[ref[3...-1].to_i(16)].pack('U*')
330328
else
331-
matches.each do |entity_reference|
332-
unless filter and filter.include?(entity_reference)
333-
entity_value = DocType::DEFAULT_ENTITIES[ entity_reference ]
334-
re = /&#{entity_reference};/
335-
rv.gsub!( re, entity_value.value ) if entity_value
336-
end
337-
end
329+
[ref[2...-1].to_i].pack('U*')
338330
end
339-
rv.gsub!( /&amp;/, '&' )
331+
elsif ref == '&amp;'
332+
'&'
333+
elsif filter and filter.include?( ref[1...-1] )
334+
ref
335+
elsif doctype
336+
doctype.entity( ref[1...-1] ) or ref
337+
else
338+
entity_value = DocType::DEFAULT_ENTITIES[ ref[1...-1] ]
339+
entity_value ? entity_value.value : ref
340340
end
341-
rv
342341
end
343342
end
344343
end

version.h

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
#define RUBY_VERSION "1.8.7"
2-
#define RUBY_RELEASE_DATE "2012-10-12"
2+
#define RUBY_RELEASE_DATE "2013-05-18"
33
#define RUBY_VERSION_CODE 187
4-
#define RUBY_RELEASE_CODE 20121012
5-
#define RUBY_PATCHLEVEL 371
4+
#define RUBY_RELEASE_CODE 20130518
5+
#define RUBY_PATCHLEVEL 372
66

77
#define RUBY_VERSION_MAJOR 1
88
#define RUBY_VERSION_MINOR 8
99
#define RUBY_VERSION_TEENY 7
10-
#define RUBY_RELEASE_YEAR 2012
11-
#define RUBY_RELEASE_MONTH 10
12-
#define RUBY_RELEASE_DAY 12
10+
#define RUBY_RELEASE_YEAR 2013
11+
#define RUBY_RELEASE_MONTH 5
12+
#define RUBY_RELEASE_DAY 18
1313

1414
#ifdef RUBY_EXTERN
1515
RUBY_EXTERN const char ruby_version[];

0 commit comments

Comments
 (0)