nokogiri 1.6.8.rc3-x86-mingw32 → 1.6.8-x86-mingw32
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.
Potentially problematic release.
This version of nokogiri might be problematic. Click here for more details.
- checksums.yaml +4 -4
 - data/.travis.yml +5 -3
 - data/CHANGELOG.rdoc +27 -4
 - data/CONTRIBUTING.md +1 -1
 - data/Gemfile +7 -7
 - data/Manifest.txt +1 -1
 - data/README.md +0 -3
 - data/Rakefile +10 -11
 - data/dependencies.yml +29 -4
 - data/ext/nokogiri/extconf.rb +74 -19
 - data/ext/nokogiri/xml_node.c +22 -9
 - data/ext/nokogiri/xml_reader.c +0 -13
 - data/ext/nokogiri/xml_sax_parser.c +7 -7
 - data/lib/nokogiri.rb +11 -7
 - data/lib/nokogiri/1.9/nokogiri.so +0 -0
 - data/lib/nokogiri/2.0/nokogiri.so +0 -0
 - data/lib/nokogiri/2.1/nokogiri.so +0 -0
 - data/lib/nokogiri/2.2/nokogiri.so +0 -0
 - data/lib/nokogiri/2.3/nokogiri.so +0 -0
 - data/lib/nokogiri/html/document.rb +4 -2
 - data/lib/nokogiri/version.rb +1 -1
 - data/lib/nokogiri/xml/document.rb +1 -1
 - data/lib/nokogiri/xml/parse_options.rb +22 -0
 - data/tasks/test.rb +5 -0
 - data/test/html/test_document.rb +26 -0
 - data/test/html/test_document_encoding.rb +5 -0
 - data/test/html/test_document_fragment.rb +5 -0
 - data/test/test_encoding_handler.rb +2 -0
 - data/test/test_xslt_transforms.rb +33 -0
 - data/test/xml/sax/test_parser.rb +15 -7
 - data/test/xml/test_document_encoding.rb +5 -0
 - data/test/xml/test_document_fragment.rb +12 -0
 - data/test/xml/test_node_attributes.rb +6 -0
 - data/test/xml/test_node_reparenting.rb +193 -18
 - data/test/xml/test_reader.rb +589 -0
 - data/test/xml/test_unparented_node.rb +13 -0
 - data/test_all +33 -42
 - metadata +33 -36
 - data/test/test_reader.rb +0 -577
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: e99debe6aeb9a5efe23829ceb2c509b78bccf7fe
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 0a87cbb2324b73854dedde53e063097482f1e56c
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: d9ca761b92ec08e70d04df86803f4df5a44cdcfcf858564e8513c989dfe7431a9dc2af8d591d8733bb0854799c607cc1768a2d385fe2980e29d7b8ae6b648352
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: f50a0d73cc8f249412b337d8ac0ee3353990554d1a216fc4a5401231e7faaf74adc27143425875e9e104a1527d124597aa0981e22d7461234081ee8814be1cac
         
     | 
    
        data/.travis.yml
    CHANGED
    
    | 
         @@ -10,8 +10,9 @@ rvm: 
     | 
|
| 
       10 
10 
     | 
    
         
             
            - 2.2.3
         
     | 
| 
       11 
11 
     | 
    
         
             
            - 2.3.0
         
     | 
| 
       12 
12 
     | 
    
         
             
            - jruby-19mode
         
     | 
| 
       13 
     | 
    
         
            -
            - jruby 
     | 
| 
      
 13 
     | 
    
         
            +
            - jruby
         
     | 
| 
       14 
14 
     | 
    
         
             
            - jruby-9.0.4.0
         
     | 
| 
      
 15 
     | 
    
         
            +
            - jruby-head
         
     | 
| 
       15 
16 
     | 
    
         
             
            - rbx-19mode
         
     | 
| 
       16 
17 
     | 
    
         
             
            - rbx-2
         
     | 
| 
       17 
18 
     | 
    
         | 
| 
         @@ -24,13 +25,14 @@ matrix: 
     | 
|
| 
       24 
25 
     | 
    
         
             
              # https://github.com/travis-ci/travis-ci/issues/5361
         
     | 
| 
       25 
26 
     | 
    
         
             
              - os: osx
         
     | 
| 
       26 
27 
     | 
    
         
             
                rvm: 2.3.0
         
     | 
| 
      
 28 
     | 
    
         
            +
              - rvm: jruby-head
         
     | 
| 
       27 
29 
     | 
    
         
             
              exclude:
         
     | 
| 
       28 
30 
     | 
    
         
             
              - os: osx
         
     | 
| 
       29 
31 
     | 
    
         
             
                rvm: ruby-1.9.2
         
     | 
| 
       30 
32 
     | 
    
         
             
              - os: osx
         
     | 
| 
       31 
33 
     | 
    
         
             
                rvm: jruby-19mode
         
     | 
| 
       32 
34 
     | 
    
         
             
              - os: osx
         
     | 
| 
       33 
     | 
    
         
            -
                rvm: jruby 
     | 
| 
      
 35 
     | 
    
         
            +
                rvm: jruby
         
     | 
| 
       34 
36 
     | 
    
         
             
              - os: osx
         
     | 
| 
       35 
37 
     | 
    
         
             
                rvm: jruby-9.0.4.0
         
     | 
| 
       36 
38 
     | 
    
         
             
              - os: osx
         
     | 
| 
         @@ -42,7 +44,7 @@ notifications: 
     | 
|
| 
       42 
44 
     | 
    
         
             
              irc:
         
     | 
| 
       43 
45 
     | 
    
         
             
                channels:
         
     | 
| 
       44 
46 
     | 
    
         
             
                  - "chat.freenode.net#nokogiri"
         
     | 
| 
       45 
     | 
    
         
            -
                on_success:  
     | 
| 
      
 47 
     | 
    
         
            +
                on_success: always
         
     | 
| 
       46 
48 
     | 
    
         
             
                on_failure: always
         
     | 
| 
       47 
49 
     | 
    
         
             
                template:
         
     | 
| 
       48 
50 
     | 
    
         
             
                  - "%{repository} (%{branch}:%{commit} by %{author}): %{message} (%{build_url})"
         
     | 
    
        data/CHANGELOG.rdoc
    CHANGED
    
    | 
         @@ -1,10 +1,24 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            === 1.6.8 / unreleased
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
     | 
    
         
            -
            ==== Security  
     | 
| 
      
 3 
     | 
    
         
            +
            ==== Security Notes
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            [MRI] Bundled libxml2 is upgraded to 2.9.4, which fixes many security issues. Many of these had previously been patched in the vendored libxml 2.9.2 in the 1.6.7.x branch, but some are newer.
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            See these libxml2 email posts for more:
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
            * https://mail.gnome.org/archives/xml/2015-November/msg00012.html
         
     | 
| 
      
 10 
     | 
    
         
            +
            * https://mail.gnome.org/archives/xml/2016-May/msg00023.html
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
            For a more detailed analysis, you may care to read Canonical's take on these security issues:
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
            * http://www.ubuntu.com/usn/usn-2994-1
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
            [MRI] Bundled libxslt is upgraded to 1.1.29, which fixes a security issue as well as many long-known outstanding bugs, some features, some portability improvements, and general cleanup.
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
            See this libxslt email post for more:
         
     | 
| 
       4 
20 
     | 
    
         | 
| 
       5 
     | 
    
         
            -
            *  
     | 
| 
       6 
     | 
    
         
            -
              These security issues had been patched in the vendored libxml 2.9.2 in the 1.6.7.x branch.
         
     | 
| 
       7 
     | 
    
         
            -
              See https://mail.gnome.org/archives/xml/2015-November/msg00012.html for more.
         
     | 
| 
      
 21 
     | 
    
         
            +
            * https://mail.gnome.org/archives/xslt/2016-May/msg00004.html
         
     | 
| 
       8 
22 
     | 
    
         | 
| 
       9 
23 
     | 
    
         | 
| 
       10 
24 
     | 
    
         
             
            ==== Features
         
     | 
| 
         @@ -16,19 +30,28 @@ Several changes were made to improve performance: 
     | 
|
| 
       16 
30 
     | 
    
         
             
            * Use Symbol#to_proc where we weren't previously. (#1296) (Thanks, Bruno Sutic!)
         
     | 
| 
       17 
31 
     | 
    
         
             
            * XML::DTD#each uses implicit block calls. (Thanks, @glaucocustodio!)
         
     | 
| 
       18 
32 
     | 
    
         
             
            * Fall back to the `pkg-config` gem if we're having trouble finding the system libxml2. This should help many FreeBSD users. (#1417)
         
     | 
| 
      
 33 
     | 
    
         
            +
            * Set document encoding appropriately even on blank document. (#1043) (Thanks, @batter!)
         
     | 
| 
       19 
34 
     | 
    
         | 
| 
       20 
35 
     | 
    
         | 
| 
       21 
36 
     | 
    
         
             
            ==== Bug Fixes
         
     | 
| 
       22 
37 
     | 
    
         | 
| 
      
 38 
     | 
    
         
            +
            * [JRuby] fix slow add_child (#692)
         
     | 
| 
       23 
39 
     | 
    
         
             
            * [JRuby] fix load errors when deploying to JRuby/Torquebox (#1114) (Thanks, @atambo and @jvshahid!)
         
     | 
| 
       24 
40 
     | 
    
         
             
            * [JRuby] fix NPE when inspecting nodes returned by NodeSet#drop (#1042) (Thanks, @mkristian!)
         
     | 
| 
       25 
41 
     | 
    
         
             
            * [JRuby] fix nil attriubte node's namespace in reader (#1327) (Thanks, @codekitchen!)
         
     | 
| 
       26 
42 
     | 
    
         
             
            * [JRuby] fix Nokogiri munging unicode characters that require more than 2 bytes (#1113) (Thanks, @mkristian!)
         
     | 
| 
      
 43 
     | 
    
         
            +
            * [JRuby] allow unlinking an unparented node (#1112, #1152) (Thanks, @esse!)
         
     | 
| 
      
 44 
     | 
    
         
            +
            * [JRuby] allow Fragment parsing on a frozen string (#444, #1077)
         
     | 
| 
      
 45 
     | 
    
         
            +
            * [JRuby] HTML `style` tags are no longer encoded (#1316) (Thanks, @tbeauvais!)
         
     | 
| 
       27 
46 
     | 
    
         
             
            * [MRI] fix assertion failure while accessing attribute node's namespace in reader (#843) (Thanks, @2potatocakes!)
         
     | 
| 
       28 
47 
     | 
    
         
             
            * [MRI] fix issue with GCing namespace nodes returned in an xpath query. (#1155)
         
     | 
| 
       29 
48 
     | 
    
         
             
            * [MRI] Ensure C strings are null-terminated. (#1381)
         
     | 
| 
       30 
49 
     | 
    
         
             
            * [MRI] Ensure Rubygems is loaded before using mini_portile2 at installation. (#1393, #1411) (Thanks, @JonRowe!)
         
     | 
| 
       31 
50 
     | 
    
         
             
            * [MRI] Handling another edge case where the `libxml-ruby` gem's global callbacks were smashing the heap. (#1426). (Thanks to @bbergstrom for providing an isolated test case!)
         
     | 
| 
      
 51 
     | 
    
         
            +
            * [MRI] Ensure encodings are passed to Sax::Parser xmldecl callback. (#844)
         
     | 
| 
      
 52 
     | 
    
         
            +
            * [MRI] Ensure default ns prefix is applied correctly when reparenting nodes to another document. (#391) (Thanks, @ylecuyer!)
         
     | 
| 
      
 53 
     | 
    
         
            +
            * [MRI] Ensure Reader handles non-existent attributes as expected. (#1254) (Thanks, @ccutrer!)
         
     | 
| 
      
 54 
     | 
    
         
            +
            * [MRI] Cleanup around namespace handling when reparenting nodes. (#1332, #1333, #1444) (Thanks, @cuttrer and @bradleybeddoes!)
         
     | 
| 
       32 
55 
     | 
    
         
             
            * unescape special characters in CSS queries (#1303) (Thanks, @twalpole!)
         
     | 
| 
       33 
56 
     | 
    
         
             
            * consistently handle empty documents (#1349)
         
     | 
| 
       34 
57 
     | 
    
         
             
            * Update to mini_portile2 2.1.0 to address whitespace-handling during patching. (#1402)
         
     | 
    
        data/CONTRIBUTING.md
    CHANGED
    
    
    
        data/Gemfile
    CHANGED
    
    | 
         @@ -8,16 +8,16 @@ gem "mini_portile2", "~>2.1.0" 
     | 
|
| 
       8 
8 
     | 
    
         
             
            gem "pkg-config", "~>1.1.7"
         
     | 
| 
       9 
9 
     | 
    
         | 
| 
       10 
10 
     | 
    
         
             
            gem "rdoc", "~>4.0", :group => [:development, :test]
         
     | 
| 
       11 
     | 
    
         
            -
            gem "hoe-bundler", " 
     | 
| 
      
 11 
     | 
    
         
            +
            gem "hoe-bundler", "~>1.2.0", :group => [:development, :test]
         
     | 
| 
       12 
12 
     | 
    
         
             
            gem "hoe-debugging", "~>1.2.1", :group => [:development, :test]
         
     | 
| 
       13 
     | 
    
         
            -
            gem "hoe-gemspec", " 
     | 
| 
       14 
     | 
    
         
            -
            gem "hoe-git", " 
     | 
| 
       15 
     | 
    
         
            -
            gem "minitest", "~> 
     | 
| 
       16 
     | 
    
         
            -
            gem "rake", " 
     | 
| 
      
 13 
     | 
    
         
            +
            gem "hoe-gemspec", "~>1.0.0", :group => [:development, :test]
         
     | 
| 
      
 14 
     | 
    
         
            +
            gem "hoe-git", "~>1.6.0", :group => [:development, :test]
         
     | 
| 
      
 15 
     | 
    
         
            +
            gem "minitest", "~>5.8.4", :group => [:development, :test]
         
     | 
| 
      
 16 
     | 
    
         
            +
            gem "rake", "~>10.5.0", :group => [:development, :test]
         
     | 
| 
       17 
17 
     | 
    
         
             
            gem "rake-compiler", "~>0.9.2", :group => [:development, :test]
         
     | 
| 
       18 
18 
     | 
    
         
             
            gem "rake-compiler-dock", "~>0.5.1", :group => [:development, :test]
         
     | 
| 
       19 
     | 
    
         
            -
            gem "racc", " 
     | 
| 
       20 
     | 
    
         
            -
            gem "rexical", " 
     | 
| 
      
 19 
     | 
    
         
            +
            gem "racc", "~>1.4.14", :group => [:development, :test], :platform => :ruby
         
     | 
| 
      
 20 
     | 
    
         
            +
            gem "rexical", "~>1.0.5", :group => [:development, :test], :platform => :ruby
         
     | 
| 
       21 
21 
     | 
    
         
             
            gem "hoe", "~>3.14", :group => [:development, :test]
         
     | 
| 
       22 
22 
     | 
    
         | 
| 
       23 
23 
     | 
    
         
             
            # vim: syntax=ruby
         
     | 
    
        data/Manifest.txt
    CHANGED
    
    | 
         @@ -319,7 +319,6 @@ test/test_css_cache.rb 
     | 
|
| 
       319 
319 
     | 
    
         
             
            test/test_encoding_handler.rb
         
     | 
| 
       320 
320 
     | 
    
         
             
            test/test_memory_leak.rb
         
     | 
| 
       321 
321 
     | 
    
         
             
            test/test_nokogiri.rb
         
     | 
| 
       322 
     | 
    
         
            -
            test/test_reader.rb
         
     | 
| 
       323 
322 
     | 
    
         
             
            test/test_soap4r_sax.rb
         
     | 
| 
       324 
323 
     | 
    
         
             
            test/test_xslt_transforms.rb
         
     | 
| 
       325 
324 
     | 
    
         
             
            test/xml/node/test_save_options.rb
         
     | 
| 
         @@ -351,6 +350,7 @@ test/xml/test_node_reparenting.rb 
     | 
|
| 
       351 
350 
     | 
    
         
             
            test/xml/test_node_set.rb
         
     | 
| 
       352 
351 
     | 
    
         
             
            test/xml/test_parse_options.rb
         
     | 
| 
       353 
352 
     | 
    
         
             
            test/xml/test_processing_instruction.rb
         
     | 
| 
      
 353 
     | 
    
         
            +
            test/xml/test_reader.rb
         
     | 
| 
       354 
354 
     | 
    
         
             
            test/xml/test_reader_encoding.rb
         
     | 
| 
       355 
355 
     | 
    
         
             
            test/xml/test_relax_ng.rb
         
     | 
| 
       356 
356 
     | 
    
         
             
            test/xml/test_schema.rb
         
     | 
    
        data/README.md
    CHANGED
    
    | 
         @@ -22,9 +22,6 @@ Nokogiri (鋸) is an HTML, XML, SAX, and Reader parser.  Among 
     | 
|
| 
       22 
22 
     | 
    
         
             
            Nokogiri's many features is the ability to search documents via XPath
         
     | 
| 
       23 
23 
     | 
    
         
             
            or CSS3 selectors.
         
     | 
| 
       24 
24 
     | 
    
         | 
| 
       25 
     | 
    
         
            -
            XML is like violence - if it doesn’t solve your problems, you are not
         
     | 
| 
       26 
     | 
    
         
            -
            using enough of it.
         
     | 
| 
       27 
     | 
    
         
            -
             
     | 
| 
       28 
25 
     | 
    
         | 
| 
       29 
26 
     | 
    
         
             
            ## Features
         
     | 
| 
       30 
27 
     | 
    
         | 
    
        data/Rakefile
    CHANGED
    
    | 
         @@ -8,7 +8,6 @@ Hoe.plugin :debugging 
     | 
|
| 
       8 
8 
     | 
    
         
             
            Hoe.plugin :git
         
     | 
| 
       9 
9 
     | 
    
         
             
            Hoe.plugin :gemspec
         
     | 
| 
       10 
10 
     | 
    
         
             
            Hoe.plugin :bundler
         
     | 
| 
       11 
     | 
    
         
            -
            Hoe.add_include_dirs '.'
         
     | 
| 
       12 
11 
     | 
    
         | 
| 
       13 
12 
     | 
    
         
             
            GENERATED_PARSER    = "lib/nokogiri/css/parser.rb"
         
     | 
| 
       14 
13 
     | 
    
         
             
            GENERATED_TOKENIZER = "lib/nokogiri/css/tokenizer.rb"
         
     | 
| 
         @@ -134,16 +133,16 @@ HOE = Hoe.spec 'nokogiri' do 
     | 
|
| 
       134 
133 
     | 
    
         
             
              end
         
     | 
| 
       135 
134 
     | 
    
         | 
| 
       136 
135 
     | 
    
         
             
              self.extra_dev_deps += [
         
     | 
| 
       137 
     | 
    
         
            -
                ["hoe-bundler",        " 
     | 
| 
      
 136 
     | 
    
         
            +
                ["hoe-bundler",        "~> 1.2.0"],
         
     | 
| 
       138 
137 
     | 
    
         
             
                ["hoe-debugging",      "~> 1.2.1"],
         
     | 
| 
       139 
     | 
    
         
            -
                ["hoe-gemspec",        " 
     | 
| 
       140 
     | 
    
         
            -
                ["hoe-git",            " 
     | 
| 
       141 
     | 
    
         
            -
                ["minitest",           "~>  
     | 
| 
       142 
     | 
    
         
            -
                ["rake",               " 
     | 
| 
      
 138 
     | 
    
         
            +
                ["hoe-gemspec",        "~> 1.0.0"],
         
     | 
| 
      
 139 
     | 
    
         
            +
                ["hoe-git",            "~> 1.6.0"],
         
     | 
| 
      
 140 
     | 
    
         
            +
                ["minitest",           "~> 5.8.4"],
         
     | 
| 
      
 141 
     | 
    
         
            +
                ["rake",               "~> 10.5.0"],
         
     | 
| 
       143 
142 
     | 
    
         
             
                ["rake-compiler",      "~> 0.9.2"],
         
     | 
| 
       144 
143 
     | 
    
         
             
                ["rake-compiler-dock", "~> 0.5.1"],
         
     | 
| 
       145 
     | 
    
         
            -
                ["racc",               " 
     | 
| 
       146 
     | 
    
         
            -
                ["rexical",            " 
     | 
| 
      
 144 
     | 
    
         
            +
                ["racc",               "~> 1.4.14"],
         
     | 
| 
      
 145 
     | 
    
         
            +
                ["rexical",            "~> 1.0.5"]
         
     | 
| 
       147 
146 
     | 
    
         
             
              ]
         
     | 
| 
       148 
147 
     | 
    
         | 
| 
       149 
148 
     | 
    
         
             
              if java?
         
     | 
| 
         @@ -207,7 +206,7 @@ else 
     | 
|
| 
       207 
206 
     | 
    
         | 
| 
       208 
207 
     | 
    
         
             
              task gem_build_path do
         
     | 
| 
       209 
208 
     | 
    
         
             
                %w[libxml2 libxslt].each do |lib|
         
     | 
| 
       210 
     | 
    
         
            -
                  version = dependencies[lib]
         
     | 
| 
      
 209 
     | 
    
         
            +
                  version = dependencies[lib]["version"]
         
     | 
| 
       211 
210 
     | 
    
         
             
                  archive = File.join("ports", "archives", "#{lib}-#{version}.tar.gz")
         
     | 
| 
       212 
211 
     | 
    
         
             
                  add_file_to_gem archive
         
     | 
| 
       213 
212 
     | 
    
         
             
                  patchesdir = File.join("patches", lib)
         
     | 
| 
         @@ -232,7 +231,7 @@ else 
     | 
|
| 
       232 
231 
     | 
    
         
             
                  ext.cross_platform = CROSS_RUBIES.map(&:platform).uniq
         
     | 
| 
       233 
232 
     | 
    
         
             
                  ext.cross_config_options << "--enable-cross-build"
         
     | 
| 
       234 
233 
     | 
    
         
             
                  ext.cross_compiling do |spec|
         
     | 
| 
       235 
     | 
    
         
            -
                    libs = dependencies.map { |name,  
     | 
| 
      
 234 
     | 
    
         
            +
                    libs = dependencies.map { |name, dep| "#{name}-#{dep["version"]}" }.join(', ')
         
     | 
| 
       236 
235 
     | 
    
         | 
| 
       237 
236 
     | 
    
         
             
                    spec.required_ruby_version = [
         
     | 
| 
       238 
237 
     | 
    
         
             
                      '>= 1.9.2',
         
     | 
| 
         @@ -293,7 +292,7 @@ task :debug do 
     | 
|
| 
       293 
292 
     | 
    
         
             
              ENV['CFLAGS'] += " -DDEBUG"
         
     | 
| 
       294 
293 
     | 
    
         
             
            end
         
     | 
| 
       295 
294 
     | 
    
         | 
| 
       296 
     | 
    
         
            -
            require 'tasks/test'
         
     | 
| 
      
 295 
     | 
    
         
            +
            require File.join File.dirname(__FILE__), 'tasks/test'
         
     | 
| 
       297 
296 
     | 
    
         | 
| 
       298 
297 
     | 
    
         
             
            task :java_debug do
         
     | 
| 
       299 
298 
     | 
    
         
             
              ENV['JRUBY_OPTS'] = "#{ENV['JRUBY_OPTS']} --debug --dev"
         
     | 
    
        data/dependencies.yml
    CHANGED
    
    | 
         @@ -1,4 +1,29 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            libxml2: 
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
             
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
      
 1 
     | 
    
         
            +
            libxml2:
         
     | 
| 
      
 2 
     | 
    
         
            +
              version: "2.9.4"
         
     | 
| 
      
 3 
     | 
    
         
            +
              md5: "ae249165c173b1ff386ee8ad676815f5" # manually confirmed via `gpg --verify`
         
     | 
| 
      
 4 
     | 
    
         
            +
              # gpg: Signature made Mon 23 May 2016 04:02:13 AM EDT using DSA key ID DE95BC1F
         
     | 
| 
      
 5 
     | 
    
         
            +
              # gpg: Good signature from "Daniel Veillard (Red Hat work email) <veillard@redhat.com>"
         
     | 
| 
      
 6 
     | 
    
         
            +
              # gpg:                 aka "Daniel Veillard <Daniel.Veillard@w3.org>"
         
     | 
| 
      
 7 
     | 
    
         
            +
              # gpg: WARNING: This key is not certified with a trusted signature!
         
     | 
| 
      
 8 
     | 
    
         
            +
              # gpg:          There is no indication that the signature belongs to the owner.
         
     | 
| 
      
 9 
     | 
    
         
            +
              # Primary key fingerprint: C744 15BA 7C9C 7F78 F02E  1DC3 4606 B8A5 DE95 BC1F
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
            libxslt:
         
     | 
| 
      
 12 
     | 
    
         
            +
              version: "1.1.29"
         
     | 
| 
      
 13 
     | 
    
         
            +
              md5: "a129d3c44c022de3b9dcf6d6f288d72e"
         
     | 
| 
      
 14 
     | 
    
         
            +
              # gpg: Signature made Mon 23 May 2016 09:58:52 PM EDT using DSA key ID DE95BC1F
         
     | 
| 
      
 15 
     | 
    
         
            +
              # gpg: Good signature from "Daniel Veillard (Red Hat work email) <veillard@redhat.com>"
         
     | 
| 
      
 16 
     | 
    
         
            +
              # gpg:                 aka "Daniel Veillard <Daniel.Veillard@w3.org>"
         
     | 
| 
      
 17 
     | 
    
         
            +
              # gpg: WARNING: This key is not certified with a trusted signature!
         
     | 
| 
      
 18 
     | 
    
         
            +
              # gpg:          There is no indication that the signature belongs to the owner.
         
     | 
| 
      
 19 
     | 
    
         
            +
              # Primary key fingerprint: C744 15BA 7C9C 7F78 F02E  1DC3 4606 B8A5 DE95 BC1F
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
            zlib:
         
     | 
| 
      
 22 
     | 
    
         
            +
              version: "1.2.8"
         
     | 
| 
      
 23 
     | 
    
         
            +
              md5: "44d667c142d7cda120332623eab69f40"
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
            libiconv:
         
     | 
| 
      
 26 
     | 
    
         
            +
              version: "1.14"
         
     | 
| 
      
 27 
     | 
    
         
            +
              md5: "e34509b1623cec449dfeb73d7ce9c6c6"
         
     | 
| 
      
 28 
     | 
    
         
            +
              # gpg: Signature made Sun 07 Aug 2011 01:58:18 PM EDT using DSA key ID F059B1D1
         
     | 
| 
      
 29 
     | 
    
         
            +
              # gpg: BAD signature from "Bruno Haible (Open Source Development) <bruno@clisp.org>"
         
     | 
    
        data/ext/nokogiri/extconf.rb
    CHANGED
    
    | 
         @@ -8,6 +8,42 @@ ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..', '..')) 
     | 
|
| 
       8 
8 
     | 
    
         
             
            #
         
     | 
| 
       9 
9 
     | 
    
         
             
            # functions
         
     | 
| 
       10 
10 
     | 
    
         
             
            #
         
     | 
| 
      
 11 
     | 
    
         
            +
            def windows?
         
     | 
| 
      
 12 
     | 
    
         
            +
              RbConfig::CONFIG['target_os'] =~ /mingw32|mswin/
         
     | 
| 
      
 13 
     | 
    
         
            +
            end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
            def solaris?
         
     | 
| 
      
 16 
     | 
    
         
            +
              RbConfig::CONFIG['target_os'] =~ /solaris/
         
     | 
| 
      
 17 
     | 
    
         
            +
            end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
            def darwin?
         
     | 
| 
      
 20 
     | 
    
         
            +
              RbConfig::CONFIG['target_os'] =~ /darwin/
         
     | 
| 
      
 21 
     | 
    
         
            +
            end
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
            def nix?
         
     | 
| 
      
 24 
     | 
    
         
            +
              ! (windows? || solaris? || darwin?)
         
     | 
| 
      
 25 
     | 
    
         
            +
            end
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
            def sh_export_path path
         
     | 
| 
      
 28 
     | 
    
         
            +
              # because libxslt 1.1.29 configure.in uses AC_PATH_TOOL which treats ":"
         
     | 
| 
      
 29 
     | 
    
         
            +
              # as a $PATH separator, we need to convert windows paths from
         
     | 
| 
      
 30 
     | 
    
         
            +
              #
         
     | 
| 
      
 31 
     | 
    
         
            +
              #   C:/path/to/foo
         
     | 
| 
      
 32 
     | 
    
         
            +
              #
         
     | 
| 
      
 33 
     | 
    
         
            +
              # to
         
     | 
| 
      
 34 
     | 
    
         
            +
              #
         
     | 
| 
      
 35 
     | 
    
         
            +
              #   /C/path/to/foo
         
     | 
| 
      
 36 
     | 
    
         
            +
              #
         
     | 
| 
      
 37 
     | 
    
         
            +
              # which is sh-compatible, in order to find things properly during
         
     | 
| 
      
 38 
     | 
    
         
            +
              # configuration
         
     | 
| 
      
 39 
     | 
    
         
            +
              if windows?
         
     | 
| 
      
 40 
     | 
    
         
            +
                match = Regexp.new("^([A-Z]):(/.*)").match(path)
         
     | 
| 
      
 41 
     | 
    
         
            +
                if match && match.length == 3
         
     | 
| 
      
 42 
     | 
    
         
            +
                  return File.join("/", match[1], match[2])
         
     | 
| 
      
 43 
     | 
    
         
            +
                end
         
     | 
| 
      
 44 
     | 
    
         
            +
              end
         
     | 
| 
      
 45 
     | 
    
         
            +
              path
         
     | 
| 
      
 46 
     | 
    
         
            +
            end
         
     | 
| 
       11 
47 
     | 
    
         | 
| 
       12 
48 
     | 
    
         
             
            def do_help
         
     | 
| 
       13 
49 
     | 
    
         
             
              print <<HELP
         
     | 
| 
         @@ -364,7 +400,10 @@ when arg_config('--clean') 
     | 
|
| 
       364 
400 
     | 
    
         
             
            end
         
     | 
| 
       365 
401 
     | 
    
         | 
| 
       366 
402 
     | 
    
         
             
            RbConfig::MAKEFILE_CONFIG['CC'] = ENV['CC'] if ENV['CC']
         
     | 
| 
      
 403 
     | 
    
         
            +
            # use same c compiler for libxml and libxslt
         
     | 
| 
      
 404 
     | 
    
         
            +
            ENV['CC'] = RbConfig::MAKEFILE_CONFIG['CC']
         
     | 
| 
       367 
405 
     | 
    
         | 
| 
      
 406 
     | 
    
         
            +
            # TODO: deprecate MacRuby: https://github.com/sparklemotion/nokogiri/issues/1474
         
     | 
| 
       368 
407 
     | 
    
         
             
            if defined?(RUBY_ENGINE) && RUBY_ENGINE == 'macruby'
         
     | 
| 
       369 
408 
     | 
    
         
             
              $LIBRUBYARG_STATIC.gsub!(/-static/, '')
         
     | 
| 
       370 
409 
     | 
    
         
             
            end
         
     | 
| 
         @@ -374,17 +413,20 @@ $LIBS << " #{ENV["LIBS"]}" 
     | 
|
| 
       374 
413 
     | 
    
         
             
            # Read CFLAGS from ENV and make sure compiling works.
         
     | 
| 
       375 
414 
     | 
    
         
             
            add_cflags(ENV["CFLAGS"])
         
     | 
| 
       376 
415 
     | 
    
         | 
| 
       377 
     | 
    
         
            -
             
     | 
| 
       378 
     | 
    
         
            -
            when 'mingw32', /mswin/
         
     | 
| 
       379 
     | 
    
         
            -
              windows_p = true
         
     | 
| 
      
 416 
     | 
    
         
            +
            if windows?
         
     | 
| 
       380 
417 
     | 
    
         
             
              $CFLAGS << " -DXP_WIN -DXP_WIN32 -DUSE_INCLUDED_VASPRINTF"
         
     | 
| 
       381 
     | 
    
         
            -
             
     | 
| 
      
 418 
     | 
    
         
            +
            end
         
     | 
| 
      
 419 
     | 
    
         
            +
             
     | 
| 
      
 420 
     | 
    
         
            +
            if solaris?
         
     | 
| 
       382 
421 
     | 
    
         
             
              $CFLAGS << " -DUSE_INCLUDED_VASPRINTF"
         
     | 
| 
       383 
     | 
    
         
            -
             
     | 
| 
       384 
     | 
    
         
            -
             
     | 
| 
      
 422 
     | 
    
         
            +
            end
         
     | 
| 
      
 423 
     | 
    
         
            +
             
     | 
| 
      
 424 
     | 
    
         
            +
            if darwin?
         
     | 
| 
       385 
425 
     | 
    
         
             
              # Let Apple LLVM/clang 5.1 ignore unknown compiler flags
         
     | 
| 
       386 
426 
     | 
    
         
             
              add_cflags("-Wno-error=unused-command-line-argument-hard-error-in-future")
         
     | 
| 
       387 
     | 
    
         
            -
             
     | 
| 
      
 427 
     | 
    
         
            +
            end
         
     | 
| 
      
 428 
     | 
    
         
            +
             
     | 
| 
      
 429 
     | 
    
         
            +
            if nix?
         
     | 
| 
       388 
430 
     | 
    
         
             
              $CFLAGS << " -g -DXP_UNIX"
         
     | 
| 
       389 
431 
     | 
    
         
             
            end
         
     | 
| 
       390 
432 
     | 
    
         | 
| 
         @@ -436,9 +478,12 @@ else 
     | 
|
| 
       436 
478 
     | 
    
         
             
              dependencies = YAML.load_file(File.join(ROOT, "dependencies.yml"))
         
     | 
| 
       437 
479 
     | 
    
         | 
| 
       438 
480 
     | 
    
         
             
              cross_build_p = enable_config("cross-build")
         
     | 
| 
       439 
     | 
    
         
            -
              if cross_build_p ||  
     | 
| 
       440 
     | 
    
         
            -
                zlib_recipe = process_recipe("zlib", dependencies["zlib"], static_p, cross_build_p) do |recipe|
         
     | 
| 
       441 
     | 
    
         
            -
                  recipe.files = [ 
     | 
| 
      
 481 
     | 
    
         
            +
              if cross_build_p || windows?
         
     | 
| 
      
 482 
     | 
    
         
            +
                zlib_recipe = process_recipe("zlib", dependencies["zlib"]["version"], static_p, cross_build_p) do |recipe|
         
     | 
| 
      
 483 
     | 
    
         
            +
                  recipe.files = [{
         
     | 
| 
      
 484 
     | 
    
         
            +
                      url: "http://zlib.net/#{recipe.name}-#{recipe.version}.tar.gz",
         
     | 
| 
      
 485 
     | 
    
         
            +
                      md5: dependencies["zlib"]["md5"]
         
     | 
| 
      
 486 
     | 
    
         
            +
                    }]
         
     | 
| 
       442 
487 
     | 
    
         
             
                  class << recipe
         
     | 
| 
       443 
488 
     | 
    
         
             
                    attr_accessor :cross_build_p
         
     | 
| 
       444 
489 
     | 
    
         | 
| 
         @@ -472,8 +517,11 @@ else 
     | 
|
| 
       472 
517 
     | 
    
         
             
                  recipe.cross_build_p = cross_build_p
         
     | 
| 
       473 
518 
     | 
    
         
             
                end
         
     | 
| 
       474 
519 
     | 
    
         | 
| 
       475 
     | 
    
         
            -
                libiconv_recipe = process_recipe("libiconv", dependencies["libiconv"], static_p, cross_build_p) do |recipe|
         
     | 
| 
       476 
     | 
    
         
            -
                  recipe.files = [ 
     | 
| 
      
 520 
     | 
    
         
            +
                libiconv_recipe = process_recipe("libiconv", dependencies["libiconv"]["version"], static_p, cross_build_p) do |recipe|
         
     | 
| 
      
 521 
     | 
    
         
            +
                  recipe.files = [{
         
     | 
| 
      
 522 
     | 
    
         
            +
                      url: "http://ftp.gnu.org/pub/gnu/libiconv/#{recipe.name}-#{recipe.version}.tar.gz",
         
     | 
| 
      
 523 
     | 
    
         
            +
                      md5: dependencies["libiconv"]["md5"]
         
     | 
| 
      
 524 
     | 
    
         
            +
                    }]
         
     | 
| 
       477 
525 
     | 
    
         
             
                  recipe.configure_options += [
         
     | 
| 
       478 
526 
     | 
    
         
             
                    "CPPFLAGS=-Wall",
         
     | 
| 
       479 
527 
     | 
    
         
             
                    "CFLAGS=-O2 -g",
         
     | 
| 
         @@ -482,7 +530,7 @@ else 
     | 
|
| 
       482 
530 
     | 
    
         
             
                  ]
         
     | 
| 
       483 
531 
     | 
    
         
             
                end
         
     | 
| 
       484 
532 
     | 
    
         
             
              else
         
     | 
| 
       485 
     | 
    
         
            -
                if  
     | 
| 
      
 533 
     | 
    
         
            +
                if darwin? && !have_header('iconv.h')
         
     | 
| 
       486 
534 
     | 
    
         
             
                  abort <<'EOM'.chomp
         
     | 
| 
       487 
535 
     | 
    
         
             
            -----
         
     | 
| 
       488 
536 
     | 
    
         
             
            The file "iconv.h" is missing in your build environment,
         
     | 
| 
         @@ -498,17 +546,21 @@ EOM 
     | 
|
| 
       498 
546 
     | 
    
         
             
                end
         
     | 
| 
       499 
547 
     | 
    
         
             
              end
         
     | 
| 
       500 
548 
     | 
    
         | 
| 
       501 
     | 
    
         
            -
              unless  
     | 
| 
      
 549 
     | 
    
         
            +
              unless windows?
         
     | 
| 
       502 
550 
     | 
    
         
             
                preserving_globals {
         
     | 
| 
       503 
551 
     | 
    
         
             
                  have_library('z', 'gzdopen', 'zlib.h')
         
     | 
| 
       504 
552 
     | 
    
         
             
                } or abort 'zlib is missing; necessary for building libxml2'
         
     | 
| 
       505 
553 
     | 
    
         
             
              end
         
     | 
| 
       506 
554 
     | 
    
         | 
| 
       507 
     | 
    
         
            -
              libxml2_recipe = process_recipe("libxml2", dependencies["libxml2"], static_p, cross_build_p) do |recipe|
         
     | 
| 
       508 
     | 
    
         
            -
                recipe.files = [ 
     | 
| 
      
 555 
     | 
    
         
            +
              libxml2_recipe = process_recipe("libxml2", dependencies["libxml2"]["version"], static_p, cross_build_p) do |recipe|
         
     | 
| 
      
 556 
     | 
    
         
            +
                recipe.files = [{
         
     | 
| 
      
 557 
     | 
    
         
            +
                    url: "http://xmlsoft.org/sources/#{recipe.name}-#{recipe.version}.tar.gz",
         
     | 
| 
      
 558 
     | 
    
         
            +
                    md5: dependencies["libxml2"]["md5"]
         
     | 
| 
      
 559 
     | 
    
         
            +
                  }]
         
     | 
| 
       509 
560 
     | 
    
         
             
                recipe.configure_options += [
         
     | 
| 
       510 
561 
     | 
    
         
             
                  "--without-python",
         
     | 
| 
       511 
562 
     | 
    
         
             
                  "--without-readline",
         
     | 
| 
      
 563 
     | 
    
         
            +
                  *(zlib_recipe ? ["--with-zlib=#{zlib_recipe.path}", "CFLAGS=-I#{zlib_recipe.path}/include"] : []),
         
     | 
| 
       512 
564 
     | 
    
         
             
                  *(libiconv_recipe ? "--with-iconv=#{libiconv_recipe.path}" : iconv_configure_flags),
         
     | 
| 
       513 
565 
     | 
    
         
             
                  "--with-c14n",
         
     | 
| 
       514 
566 
     | 
    
         
             
                  "--with-debug",
         
     | 
| 
         @@ -516,13 +568,16 @@ EOM 
     | 
|
| 
       516 
568 
     | 
    
         
             
                ]
         
     | 
| 
       517 
569 
     | 
    
         
             
              end
         
     | 
| 
       518 
570 
     | 
    
         | 
| 
       519 
     | 
    
         
            -
              libxslt_recipe = process_recipe("libxslt", dependencies["libxslt"], static_p, cross_build_p) do |recipe|
         
     | 
| 
       520 
     | 
    
         
            -
                recipe.files = [ 
     | 
| 
      
 571 
     | 
    
         
            +
              libxslt_recipe = process_recipe("libxslt", dependencies["libxslt"]["version"], static_p, cross_build_p) do |recipe|
         
     | 
| 
      
 572 
     | 
    
         
            +
                recipe.files = [{
         
     | 
| 
      
 573 
     | 
    
         
            +
                    url: "http://xmlsoft.org/sources/#{recipe.name}-#{recipe.version}.tar.gz",
         
     | 
| 
      
 574 
     | 
    
         
            +
                    md5: dependencies["libxslt"]["md5"]
         
     | 
| 
      
 575 
     | 
    
         
            +
                  }]
         
     | 
| 
       521 
576 
     | 
    
         
             
                recipe.configure_options += [
         
     | 
| 
       522 
577 
     | 
    
         
             
                  "--without-python",
         
     | 
| 
       523 
578 
     | 
    
         
             
                  "--without-crypto",
         
     | 
| 
       524 
579 
     | 
    
         
             
                  "--with-debug",
         
     | 
| 
       525 
     | 
    
         
            -
                  "--with-libxml-prefix=#{libxml2_recipe.path}"
         
     | 
| 
      
 580 
     | 
    
         
            +
                  "--with-libxml-prefix=#{sh_export_path(libxml2_recipe.path)}"
         
     | 
| 
       526 
581 
     | 
    
         
             
                ]
         
     | 
| 
       527 
582 
     | 
    
         
             
              end
         
     | 
| 
       528 
583 
     | 
    
         | 
    
        data/ext/nokogiri/xml_node.c
    CHANGED
    
    | 
         @@ -35,13 +35,13 @@ static void relink_namespace(xmlNodePtr reparented) 
     | 
|
| 
       35 
35 
     | 
    
         
             
              xmlNsPtr ns;
         
     | 
| 
       36 
36 
     | 
    
         | 
| 
       37 
37 
     | 
    
         
             
              if (reparented->type != XML_ATTRIBUTE_NODE &&
         
     | 
| 
       38 
     | 
    
         
            -
                  reparented->type != XML_ELEMENT_NODE) return;
         
     | 
| 
      
 38 
     | 
    
         
            +
                  reparented->type != XML_ELEMENT_NODE) { return; }
         
     | 
| 
       39 
39 
     | 
    
         | 
| 
       40 
40 
     | 
    
         
             
              if (reparented->ns == NULL || reparented->ns->prefix == NULL) {
         
     | 
| 
       41 
41 
     | 
    
         
             
                name = xmlSplitQName2(reparented->name, &prefix);
         
     | 
| 
       42 
42 
     | 
    
         | 
| 
       43 
43 
     | 
    
         
             
                if(reparented->type == XML_ATTRIBUTE_NODE) {
         
     | 
| 
       44 
     | 
    
         
            -
                  if (prefix == NULL || strcmp((char*)prefix, XMLNS_PREFIX) == 0) return;
         
     | 
| 
      
 44 
     | 
    
         
            +
                  if (prefix == NULL || strcmp((char*)prefix, XMLNS_PREFIX) == 0) { return; }
         
     | 
| 
       45 
45 
     | 
    
         
             
                }
         
     | 
| 
       46 
46 
     | 
    
         | 
| 
       47 
47 
     | 
    
         
             
                ns = xmlSearchNs(reparented->doc, reparented, prefix);
         
     | 
| 
         @@ -57,18 +57,19 @@ static void relink_namespace(xmlNodePtr reparented) 
     | 
|
| 
       57 
57 
     | 
    
         
             
              }
         
     | 
| 
       58 
58 
     | 
    
         | 
| 
       59 
59 
     | 
    
         
             
              /* Avoid segv when relinking against unlinked nodes. */
         
     | 
| 
       60 
     | 
    
         
            -
              if (reparented->type != XML_ELEMENT_NODE || !reparented->parent) return;
         
     | 
| 
      
 60 
     | 
    
         
            +
              if (reparented->type != XML_ELEMENT_NODE || !reparented->parent) { return; }
         
     | 
| 
       61 
61 
     | 
    
         | 
| 
       62 
62 
     | 
    
         
             
              /* Make sure that our reparented node has the correct namespaces */
         
     | 
| 
       63 
     | 
    
         
            -
              if(!reparented->ns && reparented->doc != (xmlDocPtr)reparented->parent)
         
     | 
| 
      
 63 
     | 
    
         
            +
              if (!reparented->ns && reparented->doc != (xmlDocPtr)reparented->parent) {
         
     | 
| 
       64 
64 
     | 
    
         
             
                xmlSetNs(reparented, reparented->parent->ns);
         
     | 
| 
      
 65 
     | 
    
         
            +
              }
         
     | 
| 
       65 
66 
     | 
    
         | 
| 
       66 
67 
     | 
    
         
             
              /* Search our parents for an existing definition */
         
     | 
| 
       67 
     | 
    
         
            -
              if(reparented->nsDef) {
         
     | 
| 
      
 68 
     | 
    
         
            +
              if (reparented->nsDef) {
         
     | 
| 
       68 
69 
     | 
    
         
             
                xmlNsPtr curr = reparented->nsDef;
         
     | 
| 
       69 
70 
     | 
    
         
             
                xmlNsPtr prev = NULL;
         
     | 
| 
       70 
71 
     | 
    
         | 
| 
       71 
     | 
    
         
            -
                while(curr) {
         
     | 
| 
      
 72 
     | 
    
         
            +
                while (curr) {
         
     | 
| 
       72 
73 
     | 
    
         
             
                  xmlNsPtr ns = xmlSearchNsByHref(
         
     | 
| 
       73 
74 
     | 
    
         
             
                      reparented->doc,
         
     | 
| 
       74 
75 
     | 
    
         
             
                      reparented->parent,
         
     | 
| 
         @@ -76,7 +77,7 @@ static void relink_namespace(xmlNodePtr reparented) 
     | 
|
| 
       76 
77 
     | 
    
         
             
                  );
         
     | 
| 
       77 
78 
     | 
    
         
             
                  /* If we find the namespace is already declared, remove it from this
         
     | 
| 
       78 
79 
     | 
    
         
             
                   * definition list. */
         
     | 
| 
       79 
     | 
    
         
            -
                  if(ns && ns != curr) {
         
     | 
| 
      
 80 
     | 
    
         
            +
                  if (ns && ns != curr && xmlStrEqual(ns->prefix, curr->prefix)) {
         
     | 
| 
       80 
81 
     | 
    
         
             
                    if (prev) {
         
     | 
| 
       81 
82 
     | 
    
         
             
                      prev->next = curr->next;
         
     | 
| 
       82 
83 
     | 
    
         
             
                    } else {
         
     | 
| 
         @@ -92,12 +93,12 @@ static void relink_namespace(xmlNodePtr reparented) 
     | 
|
| 
       92 
93 
     | 
    
         | 
| 
       93 
94 
     | 
    
         
             
              /* Only walk all children if there actually is a namespace we need to */
         
     | 
| 
       94 
95 
     | 
    
         
             
              /* reparent. */
         
     | 
| 
       95 
     | 
    
         
            -
              if(NULL == reparented->ns) return;
         
     | 
| 
      
 96 
     | 
    
         
            +
              if (NULL == reparented->ns) { return; }
         
     | 
| 
       96 
97 
     | 
    
         | 
| 
       97 
98 
     | 
    
         
             
              /* When a node gets reparented, walk it's children to make sure that */
         
     | 
| 
       98 
99 
     | 
    
         
             
              /* their namespaces are reparented as well. */
         
     | 
| 
       99 
100 
     | 
    
         
             
              child = reparented->children;
         
     | 
| 
       100 
     | 
    
         
            -
              while(NULL != child) {
         
     | 
| 
      
 101 
     | 
    
         
            +
              while (NULL != child) {
         
     | 
| 
       101 
102 
     | 
    
         
             
                relink_namespace(child);
         
     | 
| 
       102 
103 
     | 
    
         
             
                child = child->next;
         
     | 
| 
       103 
104 
     | 
    
         
             
              }
         
     | 
| 
         @@ -140,6 +141,7 @@ static VALUE reparent_node_with(VALUE pivot_obj, VALUE reparentee_obj, pivot_rep 
     | 
|
| 
       140 
141 
     | 
    
         
             
            {
         
     | 
| 
       141 
142 
     | 
    
         
             
              VALUE reparented_obj ;
         
     | 
| 
       142 
143 
     | 
    
         
             
              xmlNodePtr reparentee, pivot, reparented, next_text, new_next_text, parent ;
         
     | 
| 
      
 144 
     | 
    
         
            +
              int original_ns_prefix_is_default = 0 ;
         
     | 
| 
       143 
145 
     | 
    
         | 
| 
       144 
146 
     | 
    
         
             
              if(!rb_obj_is_kind_of(reparentee_obj, cNokogiriXmlNode))
         
     | 
| 
       145 
147 
     | 
    
         
             
                rb_raise(rb_eArgError, "node must be a Nokogiri::XML::Node");
         
     | 
| 
         @@ -250,10 +252,21 @@ ok: 
     | 
|
| 
       250 
252 
     | 
    
         
             
                   */
         
     | 
| 
       251 
253 
     | 
    
         
             
                  reparentee->_private = NULL ;
         
     | 
| 
       252 
254 
     | 
    
         
             
                }
         
     | 
| 
      
 255 
     | 
    
         
            +
             
     | 
| 
      
 256 
     | 
    
         
            +
                if (reparentee->ns != NULL && reparentee->ns->prefix == NULL) {
         
     | 
| 
      
 257 
     | 
    
         
            +
                  original_ns_prefix_is_default = 1;
         
     | 
| 
      
 258 
     | 
    
         
            +
                }
         
     | 
| 
      
 259 
     | 
    
         
            +
             
     | 
| 
       253 
260 
     | 
    
         
             
                nokogiri_root_node(reparentee);
         
     | 
| 
      
 261 
     | 
    
         
            +
             
     | 
| 
       254 
262 
     | 
    
         
             
                if (!(reparentee = xmlDocCopyNode(reparentee, pivot->doc, 1))) {
         
     | 
| 
       255 
263 
     | 
    
         
             
                  rb_raise(rb_eRuntimeError, "Could not reparent node (xmlDocCopyNode)");
         
     | 
| 
       256 
264 
     | 
    
         
             
                }
         
     | 
| 
      
 265 
     | 
    
         
            +
             
     | 
| 
      
 266 
     | 
    
         
            +
                if (original_ns_prefix_is_default && reparentee->ns != NULL && reparentee->ns->prefix != NULL) {
         
     | 
| 
      
 267 
     | 
    
         
            +
                  /* issue #391, where new node's prefix may become the string "default" */
         
     | 
| 
      
 268 
     | 
    
         
            +
                  reparentee->ns->prefix = NULL;
         
     | 
| 
      
 269 
     | 
    
         
            +
                }
         
     | 
| 
       257 
270 
     | 
    
         
             
              }
         
     | 
| 
       258 
271 
     | 
    
         | 
| 
       259 
272 
     | 
    
         
             
              if (prf != xmlAddPrevSibling && prf != xmlAddNextSibling
         
     |