8000 Comparing v3.3.4...v3.3.5 · ruby/rexml · GitHub
[go: up one dir, main page]

Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: 8000 ruby/rexml
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: v3.3.4
Choose a base ref
...
head repository: ruby/rexml
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: v3.3.5
Choose a head ref
  • 3 commits
  • 6 files changed
  • 2 contributors

Commits on Aug 1, 2024

  1. Bump version

    kou committed Aug 1, 2024
    Configuration menu
    Copy the full SHA
    e3f747f View commit details
    Browse the repository at this point in the history

Commits on Aug 12, 2024

  1. Fix calculation of Security.entity_expansion_text_limit in SAX/pull p…

    …arsers (#195)
    
    GitHub: fix #193
    
    ## [Why?]
    In SAX and pull parsers, the total value of rv.bytesize was checked, but
    the summing process was unnecessary.
    
    - Add Log
    ```patch
    diff --git a/lib/rexml/parsers/baseparser.rb b/lib/rexml/parsers/baseparser.rb
    index 28810bf..5cfc089 100644
    --- a/lib/rexml/parsers/baseparser.rb
    +++ b/lib/rexml/parsers/baseparser.rb
    @@ -556,6 +556,7 @@ module REXML
                     re = Private::DEFAULT_ENTITIES_PATTERNS[entity_reference] || /&#{entity_reference};/
                     rv.gsub!( re, entity_value )
                     sum += rv.bytesize
    +puts " rv.bytesize: #{rv.bytesize} sum: #{sum} > Security.entity_expansion_text_limit: #{Security.entity_expansion_text_limit} : #{rv}"
                     if sum > Security.entity_expansion_text_limit
                       raise "entity expansion has grown too large"
                     end
    diff --git a/lib/rexml/text.rb b/lib/rexml/text.rb
    index 7e0befe..cc68dbf 100644
    --- a/lib/rexml/text.rb
    +++ b/lib/rexml/text.rb
    @@ -415,6 +415,7 @@ module REXML
           sum = 0
           string.gsub( /\r\n?/, "\n" ).gsub( REFERENCE ) {
             s = Text.expand($&, doctype, filter)
    +puts " s.bytesize: #{s.bytesize} sum + s.bytesize : #{sum + s.bytesize } > Security.entity_expansion_text_limit: #{Security.entity_expansion_text_limit} : #{s}"
             if sum + s.bytesize > Security.entity_expansion_text_limit
               raise "entity expansion has grown too large"
             else
    ```
    
    - entity_expansion_text_limit.rb
    ```ruby
    $LOAD_PATH.unshift(File.expand_path("lib"))
    
    require 'rexml'
    require 'rexml/parsers/sax2parser'
    require 'rexml/parsers/pullparser'
    
    def dom_entity_expansion_count_check(xml)
      doc = REXML::Document.new(xml)
      doc.root.children.first.value
      puts "DOM: entity_expansion_count: #{doc.entity_expansion_count}"
    end
    
    def sax_entity_expansion_count_check(xml)
      sax = REXML::Parsers::SAX2Parser.new(xml)
      sax.parse
      puts "SAX: entity_expansion_count: #{sax.entity_expansion_count}"
    end
    
    def pull_entity_expansion_count_check(xml)
      parser = REXML::Parsers::PullParser.new(xml)
      while parser.has_next?
        parser.pull
      end
      puts "Pull: entity_expansion_count: #{parser.entity_expansion_count}"
    end
    
    xml = <<XML
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE member [
      <!ENTITY a "&b;&b;&b;">
      <!ENTITY b "&c;&d;&e;">
      <!ENTITY c "xxxxxxxxxx">
      <!ENTITY d "yyyyyyyyyy">
      <!ENTITY e "zzzzzzzzzz">
    ]>
    <member>&a;</member>
    XML
    
    dom_entity_expansion_count_check(xml)
    sax_entity_expansion_count_check(xml)
    pull_entity_expansion_count_check(xml)
    ```
    
    ```
    $ ruby entity_expansion_text_limit.rb
     s.bytesize: 10 sum + s.bytesize : 10 > Security.entity_expansion_text_limit: 10240 : xxxxxxxxxx
     s.bytesize: 10 sum + s.bytesize : 20 > Security.entity_expansion_text_limit: 10240 : yyyyyyyyyy
     s.bytesize: 10 sum + s.bytesize : 30 > Security.entity_expansion_text_limit: 10240 : zzzzzzzzzz
     s.bytesize: 30 sum + s.bytesize : 30 > Security.entity_expansion_text_limit: 10240 : xxxxxxxxxxyyyyyyyyyyzzzzzzzzzz
     s.bytesize: 10 sum + s.bytesize : 10 > Security.entity_expansion_text_limit: 10240 : xxxxxxxxxx
     s.bytesize: 10 sum + s.bytesize : 20 > Security.entity_expansion_text_limit: 10240 : yyyyyyyyyy
     s.bytesize: 10 sum + s.bytesize : 30 > Security.entity_expansion_text_limit: 10240 : zzzzzzzzzz
     s.bytesize: 30 sum + s.bytesize : 60 > Security.entity_expansion_text_limit: 10240 : xxxxxxxxxxyyyyyyyyyyzzzzzzzzzz
     s.bytesize: 10 sum + s.bytesize : 10 > Security.entity_expansion_text_limit: 10240 : xxxxxxxxxx
     s.bytesize: 10 sum + s.bytesize : 20 > Security.entity_expansion_text_limit: 10240 : yyyyyyyyyy
     s.bytesize: 10 sum + s.bytesize : 30 > Security.entity_expansion_text_limit: 10240 : zzzzzzzzzz
     s.bytesize: 30 sum + s.bytesize : 90 > Security.entity_expansion_text_limit: 10240 : xxxxxxxxxxyyyyyyyyyyzzzzzzzzzz
     s.bytesize: 90 sum + s.bytesize : 90 > Security.entity_expansion_text_limit: 10240 : xxxxxxxxxxyyyyyyyyyyzzzzzzzzzzxxxxxxxxxxyyyyyyyyyyzzzzzzzzzzxxxxxxxxxxyyyyyyyyyyzzzzzzzzzz
    DOM: entity_expansion_count: 13
     rv.bytesize: 16 sum: 16 > Security.entity_expansion_text_limit: 10240 : xxxxxxxxxx&d;&e;
     rv.bytesize: 23 sum: 39 > Security.entity_expansion_text_limit: 10240 : xxxxxxxxxxyyyyyyyyyy&e;
     rv.bytesize: 30 sum: 69 > Security.entity_expansion_text_limit: 10240 : xxxxxxxxxxyyyyyyyyyyzzzzzzzzzz
     rv.bytesize: 90 sum: 90 > Security.entity_expansion_text_limit: 10240 : xxxxxxxxxxyyyyyyyyyyzzzzzzzzzzxxxxxxxxxxyyyyyyyyyyzzzzzzzzzzxxxxxxxxxxyyyyyyyyyyzzzzzzzzzz
     rv.bytesize: 16 sum: 16 > Security.entity_expansion_text_limit: 10240 : xxxxxxxxxx&d;&e;
     rv.bytesize: 23 sum: 39 > Security.entity_expansion_text_limit: 10240 : xxxxxxxxxxyyyyyyyyyy&e;
     rv.bytesize: 30 sum: 69 > Security.entity_expansion_text_limit: 10240 : xxxxxxxxxxyyyyyyyyyyzzzzzzzzzz
     rv.bytesize: 90 sum: 180 > Security.entity_expansion_text_limit: 10240 : xxxxxxxxxxyyyyyyyyyyzzzzzzzzzzxxxxxxxxxxyyyyyyyyyyzzzzzzzzzzxxxxxxxxxxyyyyyyyyyyzzzzzzzzzz
     rv.bytesize: 16 sum: 16 > Security.entity_expansion_text_limit: 10240 : xxxxxxxxxx&d;&e;
     rv.bytesize: 23 sum: 39 > Security.entity_expansion_text_limit: 10240 : xxxxxxxxxxyyyyyyyyyy&e;
     rv.bytesize: 30 sum: 69 > Security.entity_expansion_text_limit: 10240 : xxxxxxxxxxyyyyyyyyyyzzzzzzzzzz
     rv.bytesize: 90 sum: 270 > Security.entity_expansion_text_limit: 10240 : xxxxxxxxxxyyyyyyyyyyzzzzzzzzzzxxxxxxxxxxyyyyyyyyyyzzzzzzzzzzxxxxxxxxxxyyyyyyyyyyzzzzzzzzzz
     rv.bytesize: 90 sum: 90 > Security.entity_expansion_text_limit: 10240 : xxxxxxxxxxyyyyyyyyyyzzzzzzzzzzxxxxxxxxxxyyyyyyyyyyzzzzzzzzzzxxxxxxxxxxyyyyyyyyyyzzzzzzzzzz
    SAX: entity_expansion_count: 13
     rv.bytesize: 16 sum: 16 > Security.entity_expansion_text_limit: 10240 : xxxxxxxxxx&d;&e;
     rv.bytesize: 23 sum: 39 > Security.entity_expansion_text_limit: 10240 : xxxxxxxxxxyyyyyyyyyy&e;
     rv.bytesize: 30 sum: 69 > Security.entity_expansion_text_limit: 10240 : xxxxxxxxxxyyyyyyyyyyzzzzzzzzzz
     rv.bytesize: 90 sum: 90 > Security.entity_expansion_text_limit: 10240 : xxxxxxxxxxyyyyyyyyyyzzzzzzzzzzxxxxxxxxxxyyyyyyyyyyzzzzzzzzzzxxxxxxxxxxyyyyyyyyyyzzzzzzzzzz
     rv.bytesize: 16 sum: 16 > Security.entity_expansion_text_limit: 10240 : xxxxxxxxxx&d;&e;
     rv.bytesize: 23 sum: 39 > Security.entity_expansion_text_limit: 10240 : xxxxxxxxxxyyyyyyyyyy&e;
     rv.bytesize: 30 sum: 69 > Security.entity_expansion_text_limit: 10240 : xxxxxxxxxxyyyyyyyyyyzzzzzzzzzz
     rv.bytesize: 90 sum: 180 > Security.entity_expansion_text_limit: 10240 : xxxxxxxxxxyyyyyyyyyyzzzzzzzzzzxxxxxxxxxxyyyyyyyyyyzzzzzzzzzzxxxxxxxxxxyyyyyyyyyyzzzzzzzzzz
     rv.bytesize: 16 sum: 16 > Security.entity_expansion_text_limit: 10240 : xxxxxxxxxx&d;&e;
     rv.bytesize: 23 sum: 39 > Security.entity_expansion_text_limit: 10240 : xxxxxxxxxxyyyyyyyyyy&e;
     rv.bytesize: 30 sum: 69 > Security.entity_expansion_text_limit: 10240 : xxxxxxxxxxyyyyyyyyyyzzzzzzzzzz
     rv.bytesize: 90 sum: 270 > Security.entity_expansion_text_limit: 10240 : xxxxxxxxxxyyyyyyyyyyzzzzzzzzzzxxxxxxxxxxyyyyyyyyyyzzzzzzzzzzxxxxxxxxxxyyyyyyyyyyzzzzzzzzzz
     rv.bytesize: 90 sum: 90 > Security.entity_expansion_text_limit: 10240 : xxxxxxxxxxyyyyyyyyyyzzzzzzzzzzxxxxxxxxxxyyyyyyyyyyzzzzzzzzzzxxxxxxxxxxyyyyyyyyyyzzzzzzzzzz
    Pull: entity_expansion_count: 13
    ```
    
    90 bytes is the expected value, but SAX and Pull exceed 90 bytes due to
    unnecessary total processing.
    naitoh authored Aug 12, 2024
    Configuration menu
    Copy the full SHA
    1892770 View commit details
    Browse the repository at this point in the history
  2. Add 3.3.5 entry

    kou committed Aug 12, 2024
    Configuration menu
    Copy the full SHA
    21d90cb View commit details
    Browse the repository at this point in the history
Loading
0