nokogiri 1.16.8-x86_64-linux → 1.17.0-x86_64-linux

Sign up to get free protection for your applications and to get access to all the features.
Files changed (113) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +11 -21
  3. data/README.md +4 -0
  4. data/dependencies.yml +6 -6
  5. data/ext/nokogiri/extconf.rb +191 -137
  6. data/ext/nokogiri/gumbo.c +69 -53
  7. data/ext/nokogiri/html4_document.c +10 -4
  8. data/ext/nokogiri/html4_element_description.c +18 -18
  9. data/ext/nokogiri/html4_sax_parser.c +40 -0
  10. data/ext/nokogiri/html4_sax_parser_context.c +48 -58
  11. data/ext/nokogiri/html4_sax_push_parser.c +25 -24
  12. data/ext/nokogiri/include/libexslt/exsltconfig.h +3 -3
  13. data/ext/nokogiri/include/libxml2/libxml/HTMLparser.h +12 -19
  14. data/ext/nokogiri/include/libxml2/libxml/c14n.h +1 -12
  15. data/ext/nokogiri/include/libxml2/libxml/debugXML.h +1 -1
  16. data/ext/nokogiri/include/libxml2/libxml/encoding.h +9 -0
  17. data/ext/nokogiri/include/libxml2/libxml/entities.h +12 -1
  18. data/ext/nokogiri/include/libxml2/libxml/hash.h +19 -0
  19. data/ext/nokogiri/include/libxml2/libxml/list.h +2 -2
  20. data/ext/nokogiri/include/libxml2/libxml/nanohttp.h +17 -0
  21. data/ext/nokogiri/include/libxml2/libxml/parser.h +60 -54
  22. data/ext/nokogiri/include/libxml2/libxml/parserInternals.h +9 -1
  23. data/ext/nokogiri/include/libxml2/libxml/pattern.h +6 -0
  24. data/ext/nokogiri/include/libxml2/libxml/tree.h +32 -12
  25. data/ext/nokogiri/include/libxml2/libxml/uri.h +11 -0
  26. data/ext/nokogiri/include/libxml2/libxml/valid.h +29 -2
  27. data/ext/nokogiri/include/libxml2/libxml/xinclude.h +7 -0
  28. data/ext/nokogiri/include/libxml2/libxml/xmlIO.h +21 -4
  29. data/ext/nokogiri/include/libxml2/libxml/xmlerror.h +14 -0
  30. data/ext/nokogiri/include/libxml2/libxml/xmlexports.h +111 -15
  31. data/ext/nokogiri/include/libxml2/libxml/xmlmemory.h +8 -45
  32. data/ext/nokogiri/include/libxml2/libxml/xmlreader.h +2 -0
  33. data/ext/nokogiri/include/libxml2/libxml/xmlsave.h +5 -0
  34. data/ext/nokogiri/include/libxml2/libxml/xmlunicode.h +165 -1
  35. data/ext/nokogiri/include/libxml2/libxml/xmlversion.h +7 -171
  36. data/ext/nokogiri/include/libxml2/libxml/xmlwriter.h +1 -0
  37. data/ext/nokogiri/include/libxml2/libxml/xpath.h +4 -0
  38. data/ext/nokogiri/include/libxslt/xsltInternals.h +3 -0
  39. data/ext/nokogiri/include/libxslt/xsltconfig.h +4 -37
  40. data/ext/nokogiri/libxml2_polyfill.c +114 -0
  41. data/ext/nokogiri/nokogiri.c +9 -2
  42. data/ext/nokogiri/nokogiri.h +18 -33
  43. data/ext/nokogiri/xml_attr.c +1 -1
  44. data/ext/nokogiri/xml_cdata.c +2 -10
  45. data/ext/nokogiri/xml_comment.c +3 -8
  46. data/ext/nokogiri/xml_document.c +163 -156
  47. data/ext/nokogiri/xml_document_fragment.c +10 -25
  48. data/ext/nokogiri/xml_dtd.c +1 -1
  49. data/ext/nokogiri/xml_element_content.c +9 -9
  50. data/ext/nokogiri/xml_encoding_handler.c +4 -4
  51. data/ext/nokogiri/xml_namespace.c +6 -6
  52. data/ext/nokogiri/xml_node.c +130 -104
  53. data/ext/nokogiri/xml_node_set.c +46 -44
  54. data/ext/nokogiri/xml_reader.c +54 -58
  55. data/ext/nokogiri/xml_relax_ng.c +35 -56
  56. data/ext/nokogiri/xml_sax_parser.c +156 -88
  57. data/ext/nokogiri/xml_sax_parser_context.c +213 -131
  58. data/ext/nokogiri/xml_sax_push_parser.c +68 -49
  59. data/ext/nokogiri/xml_schema.c +50 -85
  60. data/ext/nokogiri/xml_syntax_error.c +19 -11
  61. data/ext/nokogiri/xml_text.c +2 -4
  62. data/ext/nokogiri/xml_xpath_context.c +2 -2
  63. data/ext/nokogiri/xslt_stylesheet.c +8 -8
  64. data/lib/nokogiri/3.0/nokogiri.so +0 -0
  65. data/lib/nokogiri/3.1/nokogiri.so +0 -0
  66. data/lib/nokogiri/3.2/nokogiri.so +0 -0
  67. data/lib/nokogiri/3.3/nokogiri.so +0 -0
  68. data/lib/nokogiri/class_resolver.rb +1 -1
  69. data/lib/nokogiri/css/node.rb +6 -2
  70. data/lib/nokogiri/css/parser.rb +6 -4
  71. data/lib/nokogiri/css/parser.y +2 -2
  72. data/lib/nokogiri/css/parser_extras.rb +6 -66
  73. data/lib/nokogiri/css/selector_cache.rb +38 -0
  74. data/lib/nokogiri/css/tokenizer.rb +4 -4
  75. data/lib/nokogiri/css/tokenizer.rex +9 -8
  76. data/lib/nokogiri/css/xpath_visitor.rb +42 -6
  77. data/lib/nokogiri/css.rb +86 -20
  78. data/lib/nokogiri/decorators/slop.rb +3 -5
  79. data/lib/nokogiri/encoding_handler.rb +2 -2
  80. data/lib/nokogiri/html4/document.rb +44 -23
  81. data/lib/nokogiri/html4/document_fragment.rb +124 -12
  82. data/lib/nokogiri/html4/encoding_reader.rb +1 -1
  83. data/lib/nokogiri/html4/sax/parser.rb +23 -38
  84. data/lib/nokogiri/html4/sax/parser_context.rb +4 -9
  85. data/lib/nokogiri/html4.rb +9 -14
  86. data/lib/nokogiri/html5/builder.rb +40 -0
  87. data/lib/nokogiri/html5/document.rb +61 -30
  88. data/lib/nokogiri/html5/document_fragment.rb +130 -20
  89. data/lib/nokogiri/html5/node.rb +4 -4
  90. data/lib/nokogiri/html5.rb +114 -72
  91. data/lib/nokogiri/version/constant.rb +1 -1
  92. data/lib/nokogiri/xml/builder.rb +8 -1
  93. data/lib/nokogiri/xml/document.rb +70 -26
  94. data/lib/nokogiri/xml/document_fragment.rb +84 -13
  95. data/lib/nokogiri/xml/node.rb +82 -11
  96. data/lib/nokogiri/xml/node_set.rb +9 -7
  97. data/lib/nokogiri/xml/parse_options.rb +1 -1
  98. data/lib/nokogiri/xml/pp/node.rb +6 -1
  99. data/lib/nokogiri/xml/reader.rb +46 -13
  100. data/lib/nokogiri/xml/relax_ng.rb +57 -20
  101. data/lib/nokogiri/xml/sax/document.rb +174 -83
  102. data/lib/nokogiri/xml/sax/parser.rb +115 -41
  103. data/lib/nokogiri/xml/sax/parser_context.rb +116 -8
  104. data/lib/nokogiri/xml/sax/push_parser.rb +3 -0
  105. data/lib/nokogiri/xml/sax.rb +48 -0
  106. data/lib/nokogiri/xml/schema.rb +112 -45
  107. data/lib/nokogiri/xml/searchable.rb +6 -8
  108. data/lib/nokogiri/xml/syntax_error.rb +22 -0
  109. data/lib/nokogiri/xml.rb +13 -24
  110. data/lib/nokogiri/xslt.rb +3 -9
  111. data/lib/xsd/xmlparser/nokogiri.rb +3 -4
  112. metadata +8 -4
  113. data/ext/nokogiri/libxml2_backwards_compat.c +0 -121
@@ -0,0 +1,114 @@
1
+ #include <nokogiri.h>
2
+
3
+ #ifndef HAVE_XMLCTXTSETOPTIONS
4
+ /* based on libxml2-2.14.0-dev (1d8bd126) parser.c xmlCtxtSetInternalOptions */
5
+ int
6
+ xmlCtxtSetOptions(xmlParserCtxtPtr ctxt, int options)
7
+ {
8
+ int keepMask = 0;
9
+ int allMask;
10
+
11
+ if (ctxt == NULL) {
12
+ return (-1);
13
+ }
14
+
15
+ /*
16
+ * XInclude options aren't handled by the parser.
17
+ *
18
+ * XML_PARSE_XINCLUDE
19
+ * XML_PARSE_NOXINCNODE
20
+ * XML_PARSE_NOBASEFIX
21
+ */
22
+ allMask = XML_PARSE_RECOVER |
23
+ XML_PARSE_NOENT |
24
+ XML_PARSE_DTDLOAD |
25
+ XML_PARSE_DTDATTR |
26
+ XML_PARSE_DTDVALID |
27
+ XML_PARSE_NOERROR |
28
+ XML_PARSE_NOWARNING |
29
+ XML_PARSE_PEDANTIC |
30
+ XML_PARSE_NOBLANKS |
31
+ #ifdef LIBXML_SAX1_ENABLED
32
+ XML_PARSE_SAX1 |
33
+ #endif
34
+ XML_PARSE_NONET |
35
+ XML_PARSE_NODICT |
36
+ XML_PARSE_NSCLEAN |
37
+ XML_PARSE_NOCDATA |
38
+ XML_PARSE_COMPACT |
39
+ XML_PARSE_OLD10 |
40
+ XML_PARSE_HUGE |
41
+ XML_PARSE_OLDSAX |
42
+ XML_PARSE_IGNORE_ENC |
43
+ XML_PARSE_BIG_LINES;
44
+
45
+ ctxt->options = (ctxt->options & keepMask) | (options & allMask);
46
+
47
+ /*
48
+ * For some options, struct members are historically the source
49
+ * of truth. The values are initalized from global variables and
50
+ * old code could also modify them directly. Several older API
51
+ * functions that don't take an options argument rely on these
52
+ * deprecated mechanisms.
53
+ *
54
+ * Once public access to struct members and the globals are
55
+ * disabled, we can use the options bitmask as source of
56
+ * truth, making all these struct members obsolete.
57
+ *
58
+ * The XML_DETECT_IDS flags is misnamed. It simply enables
59
+ * loading of the external subset.
60
+ */
61
+ ctxt->recovery = (options & XML_PARSE_RECOVER) ? 1 : 0;
62
+ ctxt->replaceEntities = (options & XML_PARSE_NOENT) ? 1 : 0;
63
+ ctxt->loadsubset = (options & XML_PARSE_DTDLOAD) ? XML_DETECT_IDS : 0;
64
+ ctxt->loadsubset |= (options & XML_PARSE_DTDATTR) ? XML_COMPLETE_ATTRS : 0;
65
+ ctxt->validate = (options & XML_PARSE_DTDVALID) ? 1 : 0;
66
+ ctxt->pedantic = (options & XML_PARSE_PEDANTIC) ? 1 : 0;
67
+ ctxt->keepBlanks = (options & XML_PARSE_NOBLANKS) ? 0 : 1;
68
+ ctxt->dictNames = (options & XML_PARSE_NODICT) ? 0 : 1;
69
+
70
+ /*
71
+ * Changing SAX callbacks is a bad idea. This should be fixed.
72
+ */
73
+ if (options & XML_PARSE_NOBLANKS) {
74
+ ctxt->sax->ignorableWhitespace = xmlSAX2IgnorableWhitespace;
75
+ }
76
+ if (options & XML_PARSE_NOCDATA) {
77
+ ctxt->sax->cdataBlock = NULL;
78
+ }
79
+ if (options & XML_PARSE_HUGE) {
80
+ if (ctxt->dict != NULL) {
81
+ xmlDictSetLimit(ctxt->dict, 0);
82
+ }
83
+ }
84
+
85
+ ctxt->linenumbers = 1;
86
+
87
+ return (options & ~allMask);
88
+ }
89
+ #endif
90
+
91
+ #ifndef HAVE_XMLCTXTGETOPTIONS
92
+ int
93
+ xmlCtxtGetOptions(xmlParserCtxtPtr ctxt)
94
+ {
95
+ return (ctxt->options);
96
+ }
97
+ #endif
98
+
99
+ #ifndef HAVE_XMLSWITCHENCODINGNAME
100
+ int
101
+ xmlSwitchEncodingName(xmlParserCtxtPtr ctxt, const char *encoding)
102
+ {
103
+ if (ctxt == NULL) {
104
+ return (-1);
105
+ }
106
+
107
+ xmlCharEncodingHandlerPtr handler = xmlFindCharEncodingHandler(encoding);
108
+ if (handler == NULL) {
109
+ return (-1);
110
+ }
111
+
112
+ return (xmlSwitchToEncoding(ctxt, handler));
113
+ }
114
+ #endif
@@ -46,6 +46,7 @@ void noko_init_html_element_description(void);
46
46
  void noko_init_html_entity_lookup(void);
47
47
  void noko_init_html_sax_parser_context(void);
48
48
  void noko_init_html_sax_push_parser(void);
49
+ void noko_init_html4_sax_parser(void);
49
50
  void noko_init_gumbo(void);
50
51
  void noko_init_test_global_handlers(void);
51
52
 
@@ -184,8 +185,8 @@ Init_nokogiri(void)
184
185
  {
185
186
  mNokogiri = rb_define_module("Nokogiri");
186
187
  mNokogiriGumbo = rb_define_module_under(mNokogiri, "Gumbo");
187
- mNokogiriHtml4 = rb_define_module_under(mNokogiri, "HTML4");
188
- mNokogiriHtml4Sax = rb_define_module_under(mNokogiriHtml4, "SAX");
188
+ mNokogiriHtml4 = rb_define_module_under(mNokogiri, "HTML4");
189
+ mNokogiriHtml4Sax = rb_define_module_under(mNokogiriHtml4, "SAX");
189
190
  mNokogiriHtml5 = rb_define_module_under(mNokogiri, "HTML5");
190
191
  mNokogiriXml = rb_define_module_under(mNokogiri, "XML");
191
192
  mNokogiriXmlSax = rb_define_module_under(mNokogiriXml, "SAX");
@@ -202,6 +203,9 @@ Init_nokogiri(void)
202
203
  rb_const_set(mNokogiri, rb_intern("LIBXSLT_COMPILED_VERSION"), NOKOGIRI_STR_NEW2(LIBXSLT_DOTTED_VERSION));
203
204
  rb_const_set(mNokogiri, rb_intern("LIBXSLT_LOADED_VERSION"), NOKOGIRI_STR_NEW2(xsltEngineVersion));
204
205
 
206
+ rb_const_set(mNokogiri, rb_intern("LIBXML_ZLIB_ENABLED"),
207
+ xmlHasFeature(XML_WITH_ZLIB) == 1 ? Qtrue : Qfalse);
208
+
205
209
  #ifdef NOKOGIRI_PACKAGED_LIBRARIES
206
210
  rb_const_set(mNokogiri, rb_intern("PACKAGED_LIBRARIES"), Qtrue);
207
211
  # ifdef NOKOGIRI_PRECOMPILED_LIBRARIES
@@ -244,7 +248,10 @@ Init_nokogiri(void)
244
248
  noko_init_xml_namespace();
245
249
  noko_init_xml_node_set();
246
250
  noko_init_xml_reader();
251
+
247
252
  noko_init_xml_sax_parser();
253
+ noko_init_html4_sax_parser();
254
+
248
255
  noko_init_xml_xpath_context();
249
256
  noko_init_xslt_stylesheet();
250
257
  noko_init_html_element_description();
@@ -56,11 +56,15 @@
56
56
 
57
57
  #include <libexslt/exslt.h>
58
58
 
59
- /* libxml2_backwards_compat.c */
60
- #ifndef HAVE_XMLFIRSTELEMENTCHILD
61
- xmlNodePtr xmlFirstElementChild(xmlNodePtr parent);
62
- xmlNodePtr xmlNextElementSibling(xmlNodePtr node);
63
- xmlNodePtr xmlLastElementChild(xmlNodePtr parent);
59
+ /* libxml2_polyfill.c */
60
+ #ifndef HAVE_XMLCTXTSETOPTIONS
61
+ int xmlCtxtSetOptions(xmlParserCtxtPtr ctxt, int options);
62
+ #endif
63
+ #ifndef HAVE_XMLCTXTGETOPTIONS
64
+ int xmlCtxtGetOptions(xmlParserCtxtPtr ctxt);
65
+ #endif
66
+ #ifndef HAVE_XMLSWITCHENCODINGNAME
67
+ int xmlSwitchEncodingName(xmlParserCtxtPtr ctxt, const char *encoding);
64
68
  #endif
65
69
 
66
70
  #define XMLNS_PREFIX "xmlns"
@@ -148,6 +152,7 @@ NOKOPUBVAR VALUE cNokogiriXsltStylesheet ;
148
152
  NOKOPUBVAR VALUE cNokogiriHtml4Document ;
149
153
  NOKOPUBVAR VALUE cNokogiriHtml4SaxPushParser ;
150
154
  NOKOPUBVAR VALUE cNokogiriHtml4ElementDescription ;
155
+ NOKOPUBVAR VALUE cNokogiriHtml4SaxParser;
151
156
  NOKOPUBVAR VALUE cNokogiriHtml4SaxParserContext;
152
157
  NOKOPUBVAR VALUE cNokogiriHtml5Document ;
153
158
 
@@ -158,12 +163,6 @@ typedef struct _nokogiriTuple {
158
163
  } nokogiriTuple;
159
164
  typedef nokogiriTuple *nokogiriTuplePtr;
160
165
 
161
- typedef struct _nokogiriSAXTuple {
162
- xmlParserCtxtPtr ctxt;
163
- VALUE self;
164
- } nokogiriSAXTuple;
165
- typedef nokogiriSAXTuple *nokogiriSAXTuplePtr;
166
-
167
166
  typedef struct _libxmlStructuredErrorHandlerState {
168
167
  void *user_data;
169
168
  xmlStructuredErrorFunc handler;
@@ -203,12 +202,13 @@ xmlDocPtr noko_xml_document_unwrap(VALUE rb_document);
203
202
  NOKOPUBFUN VALUE Nokogiri_wrap_xml_document(VALUE klass,
204
203
  xmlDocPtr doc); /* deprecated. use noko_xml_document_wrap() instead. */
205
204
 
206
- xmlSAXHandlerPtr noko_sax_handler_unwrap(VALUE rb_sax_handler);
205
+ xmlSAXHandlerPtr noko_xml_sax_parser_unwrap(VALUE rb_sax_handler);
207
206
 
208
207
  xmlParserCtxtPtr noko_xml_sax_push_parser_unwrap(VALUE rb_parser);
209
208
 
210
209
  VALUE noko_xml_sax_parser_context_wrap(VALUE klass, xmlParserCtxtPtr c_context);
211
210
  xmlParserCtxtPtr noko_xml_sax_parser_context_unwrap(VALUE rb_context);
211
+ void noko_xml_sax_parser_context_set_encoding(xmlParserCtxtPtr c_context, VALUE rb_encoding);
212
212
 
213
213
  #define DOC_RUBY_OBJECT_TEST(x) ((nokogiriTuplePtr)(x->_private))
214
214
  #define DOC_RUBY_OBJECT(x) (((nokogiriTuplePtr)(x->_private))->doc)
@@ -216,11 +216,6 @@ xmlParserCtxtPtr noko_xml_sax_parser_context_unwrap(VALUE rb_context);
216
216
  #define DOC_NODE_CACHE(x) (((nokogiriTuplePtr)(x->_private))->node_cache)
217
217
  #define NOKOGIRI_NAMESPACE_EH(node) ((node)->type == XML_NAMESPACE_DECL)
218
218
 
219
- #define NOKOGIRI_SAX_SELF(_ctxt) ((nokogiriSAXTuplePtr)(_ctxt))->self
220
- #define NOKOGIRI_SAX_CTXT(_ctxt) ((nokogiriSAXTuplePtr)(_ctxt))->ctxt
221
- #define NOKOGIRI_SAX_TUPLE_NEW(_ctxt, _self) nokogiri_sax_tuple_new(_ctxt, _self)
222
- #define NOKOGIRI_SAX_TUPLE_DESTROY(_tuple) ruby_xfree(_tuple)
223
-
224
219
  #define DISCARD_CONST_QUAL(t, v) ((t)(uintptr_t)(v))
225
220
  #define DISCARD_CONST_QUAL_XMLCHAR(v) DISCARD_CONST_QUAL(xmlChar *, v)
226
221
 
@@ -230,24 +225,14 @@ xmlParserCtxtPtr noko_xml_sax_parser_context_unwrap(VALUE rb_context);
230
225
  # define NOKO_WARN_DEPRECATION(message...) rb_warning(message)
231
226
  #endif
232
227
 
233
- void Nokogiri_structured_error_func_save(libxmlStructuredErrorHandlerState *handler_state);
234
- void Nokogiri_structured_error_func_save_and_set(libxmlStructuredErrorHandlerState *handler_state, void *user_data,
228
+ void noko__structured_error_func_save(libxmlStructuredErrorHandlerState *handler_state);
229
+ void noko__structured_error_func_save_and_set(libxmlStructuredErrorHandlerState *handler_state, void *user_data,
235
230
  xmlStructuredErrorFunc handler);
236
- void Nokogiri_structured_error_func_restore(libxmlStructuredErrorHandlerState *handler_state);
237
- VALUE Nokogiri_wrap_xml_syntax_error(xmlErrorConstPtr error);
238
- void Nokogiri_error_array_pusher(void *ctx, xmlErrorConstPtr error);
239
- NORETURN_DECL void Nokogiri_error_raise(void *ctx, xmlErrorConstPtr error);
231
+ void noko__structured_error_func_restore(libxmlStructuredErrorHandlerState *handler_state);
232
+ VALUE noko_xml_syntax_error__wrap(xmlErrorConstPtr error);
233
+ void noko__error_array_pusher(void *ctx, xmlErrorConstPtr error);
234
+ NORETURN_DECL void noko__error_raise(void *ctx, xmlErrorConstPtr error);
240
235
  void Nokogiri_marshal_xpath_funcall_and_return_values(xmlXPathParserContextPtr ctx, int nargs, VALUE handler,
241
236
  const char *function_name) ;
242
237
 
243
- static inline
244
- nokogiriSAXTuplePtr
245
- nokogiri_sax_tuple_new(xmlParserCtxtPtr ctxt, VALUE self)
246
- {
247
- nokogiriSAXTuplePtr tuple = ruby_xmalloc(sizeof(nokogiriSAXTuple));
248
- tuple->self = self;
249
- tuple->ctxt = ctxt;
250
- return tuple;
251
- }
252
-
253
238
  #endif /* NOKOGIRI_NATIVE */
@@ -6,7 +6,7 @@ VALUE cNokogiriXmlAttr;
6
6
  * call-seq:
7
7
  * value=(content)
8
8
  *
9
- * Set the value for this Attr to +content+. Use `nil` to remove the value
9
+ * Set the value for this Attr to +content+. Use +nil+ to remove the value
10
10
  * (e.g., a HTML boolean attribute).
11
11
  */
12
12
  static VALUE
@@ -20,11 +20,10 @@ rb_xml_cdata_s_new(int argc, VALUE *argv, VALUE klass)
20
20
  VALUE rb_content;
21
21
  VALUE rb_rest;
22
22
  VALUE rb_node;
23
- xmlChar *c_content = NULL;
24
- int c_content_len = 0;
25
23
 
26
24
  rb_scan_args(argc, argv, "2*", &rb_document, &rb_content, &rb_rest);
27
25
 
26
+ Check_Type(rb_content, T_STRING);
28
27
  if (!rb_obj_is_kind_of(rb_document, cNokogiriXmlNode)) {
29
28
  rb_raise(rb_eTypeError,
30
29
  "expected first parameter to be a Nokogiri::XML::Document, received %"PRIsVALUE,
@@ -40,15 +39,8 @@ rb_xml_cdata_s_new(int argc, VALUE *argv, VALUE klass)
40
39
  c_document = noko_xml_document_unwrap(rb_document);
41
40
  }
42
41
 
43
- if (!NIL_P(rb_content)) {
44
- c_content = (xmlChar *)StringValuePtr(rb_content);
45
- c_content_len = RSTRING_LENINT(rb_content);
46
- }
47
-
48
- c_node = xmlNewCDataBlock(c_document, c_content, c_content_len);
49
-
42
+ c_node = xmlNewCDataBlock(c_document, (xmlChar *)StringValueCStr(rb_content), RSTRING_LENINT(rb_content));
50
43
  noko_xml_document_pin_node(c_node);
51
-
52
44
  rb_node = noko_xml_node_wrap(klass, c_node);
53
45
  rb_obj_call_init(rb_node, argc, argv);
54
46
 
@@ -23,25 +23,20 @@ new (int argc, VALUE *argv, VALUE klass)
23
23
 
24
24
  rb_scan_args(argc, argv, "2*", &document, &content, &rest);
25
25
 
26
+ Check_Type(content, T_STRING);
26
27
  if (rb_obj_is_kind_of(document, cNokogiriXmlNode)) {
27
28
  document = rb_funcall(document, document_id, 0);
28
29
  } else if (!rb_obj_is_kind_of(document, cNokogiriXmlDocument)
29
30
  && !rb_obj_is_kind_of(document, cNokogiriXmlDocumentFragment)) {
30
31
  rb_raise(rb_eArgError, "first argument must be a XML::Document or XML::Node");
31
32
  }
32
-
33
33
  xml_doc = noko_xml_document_unwrap(document);
34
34
 
35
- node = xmlNewDocComment(
36
- xml_doc,
37
- (const xmlChar *)StringValueCStr(content)
38
- );
39
-
35
+ node = xmlNewDocComment(xml_doc, (const xmlChar *)StringValueCStr(content));
36
+ noko_xml_document_pin_node(node);
40
37
  rb_node = noko_xml_node_wrap(klass, node);
41
38
  rb_obj_call_init(rb_node, argc, argv);
42
39
 
43
- noko_xml_document_pin_node(node);
44
-
45
40
  if (rb_block_given_p()) { rb_yield(rb_node); }
46
41
 
47
42
  return rb_node;