nokogiri 1.10.8-x86-mingw32 → 1.11.0.rc3-x86-mingw32

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of nokogiri might be problematic. Click here for more details.

Files changed (78) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +24 -22
  3. data/ext/nokogiri/extconf.rb +50 -37
  4. data/ext/nokogiri/nokogiri.c +12 -6
  5. data/ext/nokogiri/nokogiri.h +13 -0
  6. data/ext/nokogiri/xml_document.c +16 -2
  7. data/ext/nokogiri/xml_io.c +8 -6
  8. data/ext/nokogiri/xml_node.c +20 -0
  9. data/ext/nokogiri/xml_reader.c +6 -17
  10. data/ext/nokogiri/xml_schema.c +29 -0
  11. data/ext/nokogiri/xslt_stylesheet.c +0 -4
  12. data/lib/nokogiri.rb +3 -20
  13. data/lib/nokogiri/2.4/nokogiri.so +0 -0
  14. data/lib/nokogiri/2.5/nokogiri.so +0 -0
  15. data/lib/nokogiri/2.6/nokogiri.so +0 -0
  16. data/lib/nokogiri/{2.3 → 2.7}/nokogiri.so +0 -0
  17. data/lib/nokogiri/css.rb +1 -0
  18. data/lib/nokogiri/css/node.rb +1 -0
  19. data/lib/nokogiri/css/parser.rb +61 -60
  20. data/lib/nokogiri/css/parser_extras.rb +39 -36
  21. data/lib/nokogiri/css/syntax_error.rb +1 -0
  22. data/lib/nokogiri/css/tokenizer.rb +1 -0
  23. data/lib/nokogiri/css/xpath_visitor.rb +3 -1
  24. data/lib/nokogiri/decorators/slop.rb +1 -0
  25. data/lib/nokogiri/html.rb +1 -0
  26. data/lib/nokogiri/html/builder.rb +1 -0
  27. data/lib/nokogiri/html/document.rb +1 -0
  28. data/lib/nokogiri/html/document_fragment.rb +1 -0
  29. data/lib/nokogiri/html/element_description.rb +1 -0
  30. data/lib/nokogiri/html/element_description_defaults.rb +1 -0
  31. data/lib/nokogiri/html/entity_lookup.rb +1 -0
  32. data/lib/nokogiri/html/sax/parser.rb +1 -0
  33. data/lib/nokogiri/html/sax/parser_context.rb +1 -0
  34. data/lib/nokogiri/html/sax/push_parser.rb +1 -0
  35. data/lib/nokogiri/jruby/dependencies.rb +20 -0
  36. data/lib/nokogiri/syntax_error.rb +1 -0
  37. data/lib/nokogiri/version.rb +86 -45
  38. data/lib/nokogiri/xml.rb +1 -0
  39. data/lib/nokogiri/xml/attr.rb +1 -0
  40. data/lib/nokogiri/xml/attribute_decl.rb +1 -0
  41. data/lib/nokogiri/xml/builder.rb +3 -2
  42. data/lib/nokogiri/xml/cdata.rb +1 -0
  43. data/lib/nokogiri/xml/character_data.rb +1 -0
  44. data/lib/nokogiri/xml/document.rb +3 -8
  45. data/lib/nokogiri/xml/document_fragment.rb +1 -0
  46. data/lib/nokogiri/xml/dtd.rb +1 -0
  47. data/lib/nokogiri/xml/element_content.rb +1 -0
  48. data/lib/nokogiri/xml/element_decl.rb +1 -0
  49. data/lib/nokogiri/xml/entity_decl.rb +1 -0
  50. data/lib/nokogiri/xml/entity_reference.rb +1 -0
  51. data/lib/nokogiri/xml/namespace.rb +1 -0
  52. data/lib/nokogiri/xml/node.rb +539 -224
  53. data/lib/nokogiri/xml/node/save_options.rb +1 -0
  54. data/lib/nokogiri/xml/node_set.rb +1 -0
  55. data/lib/nokogiri/xml/notation.rb +1 -0
  56. data/lib/nokogiri/xml/parse_options.rb +4 -3
  57. data/lib/nokogiri/xml/pp.rb +1 -0
  58. data/lib/nokogiri/xml/pp/character_data.rb +1 -0
  59. data/lib/nokogiri/xml/pp/node.rb +1 -0
  60. data/lib/nokogiri/xml/processing_instruction.rb +1 -0
  61. data/lib/nokogiri/xml/reader.rb +7 -3
  62. data/lib/nokogiri/xml/relax_ng.rb +1 -0
  63. data/lib/nokogiri/xml/sax.rb +1 -0
  64. data/lib/nokogiri/xml/sax/document.rb +1 -0
  65. data/lib/nokogiri/xml/sax/parser.rb +1 -0
  66. data/lib/nokogiri/xml/sax/parser_context.rb +1 -0
  67. data/lib/nokogiri/xml/sax/push_parser.rb +1 -0
  68. data/lib/nokogiri/xml/schema.rb +1 -0
  69. data/lib/nokogiri/xml/searchable.rb +22 -15
  70. data/lib/nokogiri/xml/syntax_error.rb +1 -0
  71. data/lib/nokogiri/xml/text.rb +1 -0
  72. data/lib/nokogiri/xml/xpath.rb +1 -0
  73. data/lib/nokogiri/xml/xpath/syntax_error.rb +1 -0
  74. data/lib/nokogiri/xml/xpath_context.rb +1 -0
  75. data/lib/nokogiri/xslt.rb +1 -0
  76. data/lib/nokogiri/xslt/stylesheet.rb +1 -0
  77. data/lib/xsd/xmlparser/nokogiri.rb +1 -0
  78. metadata +46 -40
@@ -133,6 +133,31 @@ static VALUE read_memory(VALUE klass, VALUE content)
133
133
  return rb_schema;
134
134
  }
135
135
 
136
+ /* Schema creation will remove and deallocate "blank" nodes.
137
+ * If those blank nodes have been exposed to Ruby, they could get freed
138
+ * out from under the VALUE pointer. This function checks to see if any of
139
+ * those nodes have been exposed to Ruby, and if so we should raise an exception.
140
+ */
141
+ static int has_blank_nodes_p(VALUE cache)
142
+ {
143
+ long i;
144
+
145
+ if (NIL_P(cache)) {
146
+ return 0;
147
+ }
148
+
149
+ for (i = 0; i < RARRAY_LEN(cache); i++) {
150
+ xmlNodePtr node;
151
+ VALUE element = rb_ary_entry(cache, i);
152
+ Data_Get_Struct(element, xmlNode, node);
153
+ if (xmlIsBlankNode(node)) {
154
+ return 1;
155
+ }
156
+ }
157
+
158
+ return 0;
159
+ }
160
+
136
161
  /*
137
162
  * call-seq:
138
163
  * from_document(doc)
@@ -152,6 +177,10 @@ static VALUE from_document(VALUE klass, VALUE document)
152
177
  /* In case someone passes us a node. ugh. */
153
178
  doc = doc->doc;
154
179
 
180
+ if (has_blank_nodes_p(DOC_NODE_CACHE(doc))) {
181
+ rb_raise(rb_eArgError, "Creating a schema from a document that has blank nodes exposed to Ruby is dangerous");
182
+ }
183
+
155
184
  ctx = xmlSchemaNewDocParserCtxt(doc);
156
185
 
157
186
  errors = rb_ary_new();
@@ -109,10 +109,6 @@ static VALUE serialize(VALUE self, VALUE xmlobj)
109
109
  return rval ;
110
110
  }
111
111
 
112
- static void swallow_superfluous_xml_errors(void * userdata, xmlErrorPtr error, ...)
113
- {
114
- }
115
-
116
112
  /*
117
113
  * call-seq:
118
114
  * transform(document, params = [])
@@ -1,28 +1,11 @@
1
1
  # -*- coding: utf-8 -*-
2
+ # frozen_string_literal: true
2
3
  # Modify the PATH on windows so that the external DLLs will get loaded.
3
4
 
4
5
  require 'rbconfig'
5
6
 
6
7
  if defined?(RUBY_ENGINE) && RUBY_ENGINE == "jruby"
7
- # The line below caused a problem on non-GAE rack environment.
8
- # unless defined?(JRuby::Rack::VERSION) || defined?(AppEngine::ApiProxy)
9
- #
10
- # However, simply cutting defined?(JRuby::Rack::VERSION) off resulted in
11
- # an unable-to-load-nokogiri problem. Thus, now, Nokogiri checks the presense
12
- # of appengine-rack.jar in $LOAD_PATH. If Nokogiri is on GAE, Nokogiri
13
- # should skip loading xml jars. This is because those are in WEB-INF/lib and
14
- # already set in the classpath.
15
- unless $LOAD_PATH.to_s.include?("appengine-rack")
16
- require 'stringio'
17
- require 'isorelax.jar'
18
- require 'jing.jar'
19
- require 'nekohtml.jar'
20
- require 'nekodtd.jar'
21
- require 'xercesImpl.jar'
22
- require 'serializer.jar'
23
- require 'xalan.jar'
24
- require 'xml-apis.jar'
25
- end
8
+ require 'nokogiri/jruby/dependencies'
26
9
  end
27
10
 
28
11
  begin
@@ -54,7 +37,7 @@ require 'nokogiri/html/builder'
54
37
  #
55
38
  # # Get a Nokogiri::HTML:Document for the page we’re interested in...
56
39
  #
57
- # doc = Nokogiri::HTML(open('http://www.google.com/search?q=tenderlove'))
40
+ # doc = Nokogiri::HTML(URI.open('http://www.google.com/search?q=tenderlove'))
58
41
  #
59
42
  # # Do funky things with it using Nokogiri::XML::Node methods...
60
43
  #
Binary file
Binary file
Binary file
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'nokogiri/css/node'
2
3
  require 'nokogiri/css/xpath_visitor'
3
4
  x = $-w
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Nokogiri
2
3
  module CSS
3
4
  class Node
@@ -1,7 +1,8 @@
1
+ # frozen_string_literal: true
1
2
  #
2
3
  # DO NOT MODIFY!!!!
3
- # This file is automatically generated by Racc 1.4.14
4
- # from Racc grammer file "".
4
+ # This file is automatically generated by Racc 1.4.16
5
+ # from Racc grammar file "".
5
6
  #
6
7
 
7
8
  require 'racc/parser.rb'
@@ -333,42 +334,42 @@ Racc_debug_parser = false
333
334
 
334
335
  def _reduce_1(val, _values, result)
335
336
  result = [val.first, val.last].flatten
336
-
337
+
337
338
  result
338
339
  end
339
340
 
340
341
  def _reduce_2(val, _values, result)
341
- result = val.flatten
342
+ result = val.flatten
342
343
  result
343
344
  end
344
345
 
345
346
  def _reduce_3(val, _values, result)
346
- result = [val.last].flatten
347
+ result = [val.last].flatten
347
348
  result
348
349
  end
349
350
 
350
351
  def _reduce_4(val, _values, result)
351
- result = :DIRECT_ADJACENT_SELECTOR
352
+ result = :DIRECT_ADJACENT_SELECTOR
352
353
  result
353
354
  end
354
355
 
355
356
  def _reduce_5(val, _values, result)
356
- result = :CHILD_SELECTOR
357
+ result = :CHILD_SELECTOR
357
358
  result
358
359
  end
359
360
 
360
361
  def _reduce_6(val, _values, result)
361
- result = :FOLLOWING_SELECTOR
362
+ result = :FOLLOWING_SELECTOR
362
363
  result
363
364
  end
364
365
 
365
366
  def _reduce_7(val, _values, result)
366
- result = :DESCENDANT_SELECTOR
367
+ result = :DESCENDANT_SELECTOR
367
368
  result
368
369
  end
369
370
 
370
371
  def _reduce_8(val, _values, result)
371
- result = :CHILD_SELECTOR
372
+ result = :CHILD_SELECTOR
372
373
  result
373
374
  end
374
375
 
@@ -378,7 +379,7 @@ def _reduce_9(val, _values, result)
378
379
  else
379
380
  Node.new(:CONDITIONAL_SELECTOR, [val.first, val[1]])
380
381
  end
381
-
382
+
382
383
  result
383
384
  end
384
385
 
@@ -386,13 +387,13 @@ end
386
387
 
387
388
  def _reduce_11(val, _values, result)
388
389
  result = Node.new(:CONDITIONAL_SELECTOR, val)
389
-
390
+
390
391
  result
391
392
  end
392
393
 
393
394
  def _reduce_12(val, _values, result)
394
395
  result = Node.new(:CONDITIONAL_SELECTOR, val)
395
-
396
+
396
397
  result
397
398
  end
398
399
 
@@ -400,39 +401,39 @@ def _reduce_13(val, _values, result)
400
401
  result = Node.new(:CONDITIONAL_SELECTOR,
401
402
  [Node.new(:ELEMENT_NAME, ['*']), val.first]
402
403
  )
403
-
404
+
404
405
  result
405
406
  end
406
407
 
407
408
  def _reduce_14(val, _values, result)
408
409
  result = Node.new(val.first, [nil, val.last])
409
-
410
+
410
411
  result
411
412
  end
412
413
 
413
414
  def _reduce_15(val, _values, result)
414
415
  result = Node.new(val[1], [val.first, val.last])
415
-
416
+
416
417
  result
417
418
  end
418
419
 
419
420
  def _reduce_16(val, _values, result)
420
421
  result = Node.new(:DESCENDANT_SELECTOR, [val.first, val.last])
421
-
422
+
422
423
  result
423
424
  end
424
425
 
425
426
  # reduce 17 omitted
426
427
 
427
428
  def _reduce_18(val, _values, result)
428
- result = Node.new(:CLASS_CONDITION, [unescape_css_identifier(val[1])])
429
+ result = Node.new(:CLASS_CONDITION, [unescape_css_identifier(val[1])])
429
430
  result
430
431
  end
431
432
 
432
433
  # reduce 19 omitted
433
434
 
434
435
  def _reduce_20(val, _values, result)
435
- result = Node.new(:ELEMENT_NAME, val)
436
+ result = Node.new(:ELEMENT_NAME, val)
436
437
  result
437
438
  end
438
439
 
@@ -440,19 +441,19 @@ def _reduce_21(val, _values, result)
440
441
  result = Node.new(:ELEMENT_NAME,
441
442
  [[val.first, val.last].compact.join(':')]
442
443
  )
443
-
444
+
444
445
  result
445
446
  end
446
447
 
447
448
  def _reduce_22(val, _values, result)
448
449
  name = @namespaces.key?('xmlns') ? "xmlns:#{val.first}" : val.first
449
450
  result = Node.new(:ELEMENT_NAME, [name])
450
-
451
+
451
452
  result
452
453
  end
453
454
 
454
455
  def _reduce_23(val, _values, result)
455
- result = val[0]
456
+ result = val[0]
456
457
  result
457
458
  end
458
459
 
@@ -462,7 +463,7 @@ def _reduce_25(val, _values, result)
462
463
  result = Node.new(:ATTRIBUTE_CONDITION,
463
464
  [val[1]] + (val[2] || [])
464
465
  )
465
-
466
+
466
467
  result
467
468
  end
468
469
 
@@ -470,7 +471,7 @@ def _reduce_26(val, _values, result)
470
471
  result = Node.new(:ATTRIBUTE_CONDITION,
471
472
  [val[1]] + (val[2] || [])
472
473
  )
473
-
474
+
474
475
  result
475
476
  end
476
477
 
@@ -479,7 +480,7 @@ def _reduce_27(val, _values, result)
479
480
  result = Node.new(:PSEUDO_CLASS,
480
481
  [Node.new(:FUNCTION, ['nth-child(', val[1]])]
481
482
  )
482
-
483
+
483
484
  result
484
485
  end
485
486
 
@@ -487,7 +488,7 @@ def _reduce_28(val, _values, result)
487
488
  result = Node.new(:ELEMENT_NAME,
488
489
  [[val.first, val.last].compact.join(':')]
489
490
  )
490
-
491
+
491
492
  result
492
493
  end
493
494
 
@@ -495,52 +496,52 @@ def _reduce_29(val, _values, result)
495
496
  # Default namespace is not applied to attributes.
496
497
  # So we don't add prefix "xmlns:" as in namespaced_ident.
497
498
  result = Node.new(:ELEMENT_NAME, [val.first])
498
-
499
+
499
500
  result
500
501
  end
501
502
 
502
503
  def _reduce_30(val, _values, result)
503
504
  result = Node.new(:FUNCTION, [val.first.strip])
504
-
505
+
505
506
  result
506
507
  end
507
508
 
508
509
  def _reduce_31(val, _values, result)
509
510
  result = Node.new(:FUNCTION, [val.first.strip, val[1]].flatten)
510
-
511
+
511
512
  result
512
513
  end
513
514
 
514
515
  def _reduce_32(val, _values, result)
515
516
  result = Node.new(:FUNCTION, [val.first.strip, val[1]].flatten)
516
-
517
+
517
518
  result
518
519
  end
519
520
 
520
521
  def _reduce_33(val, _values, result)
521
522
  result = Node.new(:FUNCTION, [val.first.strip, val[1]].flatten)
522
-
523
+
523
524
  result
524
525
  end
525
526
 
526
527
  def _reduce_34(val, _values, result)
527
528
  result = Node.new(:FUNCTION, [val.first.strip, val[1]].flatten)
528
-
529
+
529
530
  result
530
531
  end
531
532
 
532
533
  def _reduce_35(val, _values, result)
533
- result = [val.first, val.last]
534
+ result = [val.first, val.last]
534
535
  result
535
536
  end
536
537
 
537
538
  def _reduce_36(val, _values, result)
538
- result = [val.first, val.last]
539
+ result = [val.first, val.last]
539
540
  result
540
541
  end
541
542
 
542
543
  def _reduce_37(val, _values, result)
543
- result = [val.first, val.last]
544
+ result = [val.first, val.last]
544
545
  result
545
546
  end
546
547
 
@@ -563,7 +564,7 @@ def _reduce_40(val, _values, result)
563
564
  # assert_xpath("//a[foo(., a, 10)]", @parser.parse('a:foo(a, 10)'))
564
565
  result = val
565
566
  end
566
-
567
+
567
568
  result
568
569
  end
569
570
 
@@ -573,7 +574,7 @@ def _reduce_41(val, _values, result)
573
574
  else
574
575
  raise Racc::ParseError, "parse error on IDENT '#{val[1]}'"
575
576
  end
576
-
577
+
577
578
  result
578
579
  end
579
580
 
@@ -589,7 +590,7 @@ def _reduce_42(val, _values, result)
589
590
  else
590
591
  raise Racc::ParseError, "parse error on IDENT '#{val[1]}'"
591
592
  end
592
-
593
+
593
594
  result
594
595
  end
595
596
 
@@ -609,18 +610,18 @@ def _reduce_43(val, _values, result)
609
610
  else
610
611
  raise Racc::ParseError, "parse error on IDENT '#{val[1]}'"
611
612
  end
612
-
613
+
613
614
  result
614
615
  end
615
616
 
616
617
  def _reduce_44(val, _values, result)
617
618
  result = Node.new(:PSEUDO_CLASS, [val[1]])
618
-
619
+
619
620
  result
620
621
  end
621
622
 
622
623
  def _reduce_45(val, _values, result)
623
- result = Node.new(:PSEUDO_CLASS, [val[1]])
624
+ result = Node.new(:PSEUDO_CLASS, [val[1]])
624
625
  result
625
626
  end
626
627
 
@@ -630,31 +631,31 @@ end
630
631
 
631
632
  def _reduce_48(val, _values, result)
632
633
  result = Node.new(:COMBINATOR, val)
633
-
634
+
634
635
  result
635
636
  end
636
637
 
637
638
  def _reduce_49(val, _values, result)
638
639
  result = Node.new(:COMBINATOR, val)
639
-
640
+
640
641
  result
641
642
  end
642
643
 
643
644
  def _reduce_50(val, _values, result)
644
645
  result = Node.new(:COMBINATOR, val)
645
-
646
+
646
647
  result
647
648
  end
648
649
 
649
650
  def _reduce_51(val, _values, result)
650
651
  result = Node.new(:COMBINATOR, val)
651
-
652
+
652
653
  result
653
654
  end
654
655
 
655
656
  def _reduce_52(val, _values, result)
656
657
  result = Node.new(:COMBINATOR, val)
657
-
658
+
658
659
  result
659
660
  end
660
661
 
@@ -669,65 +670,65 @@ end
669
670
  # reduce 57 omitted
670
671
 
671
672
  def _reduce_58(val, _values, result)
672
- result = Node.new(:ID, [unescape_css_identifier(val.first)])
673
+ result = Node.new(:ID, [unescape_css_identifier(val.first)])
673
674
  result
674
675
  end
675
676
 
676
677
  def _reduce_59(val, _values, result)
677
- result = [val.first, unescape_css_identifier(val[1])]
678
+ result = [val.first, unescape_css_identifier(val[1])]
678
679
  result
679
680
  end
680
681
 
681
682
  def _reduce_60(val, _values, result)
682
- result = [val.first, unescape_css_string(val[1])]
683
+ result = [val.first, unescape_css_string(val[1])]
683
684
  result
684
685
  end
685
686
 
686
687
  def _reduce_61(val, _values, result)
687
- result = [val.first, val[1]]
688
+ result = [val.first, val[1]]
688
689
  result
689
690
  end
690
691
 
691
692
  # reduce 62 omitted
692
693
 
693
694
  def _reduce_63(val, _values, result)
694
- result = :equal
695
+ result = :equal
695
696
  result
696
697
  end
697
698
 
698
699
  def _reduce_64(val, _values, result)
699
- result = :prefix_match
700
+ result = :prefix_match
700
701
  result
701
702
  end
702
703
 
703
704
  def _reduce_65(val, _values, result)
704
- result = :suffix_match
705
+ result = :suffix_match
705
706
  result
706
707
  end
707
708
 
708
709
  def _reduce_66(val, _values, result)
709
- result = :substring_match
710
+ result = :substring_match
710
711
  result
711
712
  end
712
713
 
713
714
  def _reduce_67(val, _values, result)
714
- result = :not_equal
715
+ result = :not_equal
715
716
  result
716
717
  end
717
718
 
718
719
  def _reduce_68(val, _values, result)
719
- result = :includes
720
+ result = :includes
720
721
  result
721
722
  end
722
723
 
723
724
  def _reduce_69(val, _values, result)
724
- result = :dash_match
725
+ result = :dash_match
725
726
  result
726
727
  end
727
728
 
728
729
  def _reduce_70(val, _values, result)
729
730
  result = Node.new(:NOT, [val[1]])
730
-
731
+
731
732
  result
732
733
  end
733
734
 
@@ -746,5 +747,5 @@ def _reduce_none(val, _values, result)
746
747
  end
747
748
 
748
749
  end # class Parser
749
- end # module CSS
750
- end # module Nokogiri
750
+ end # module CSS
751
+ end # module Nokogiri