ox 2.0.2 → 2.0.3
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of ox might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/README.md +2 -2
- data/ext/ox/sax.c +32 -32
- data/ext/ox/sax_buf.c +4 -3
- data/ext/ox/sax_buf.h +2 -1
- data/lib/ox/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9d03526c81d518faeee16a0866d7dcd58652cbb8
|
4
|
+
data.tar.gz: 606f087bcfadf31e8f3800424a7253bfee95dc17
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: decaadbf4e7024b3fbaef0694c49695d6c77739b617a8d24a63ed32f736f2cd4090d84ae1c0cfea2d32b7ef6419575b2b17c74672c96e3c995c1cb978095da44
|
7
|
+
data.tar.gz: 17fff8235ae614cc166d867c8fb983b953cb3bc2bc6e72a1f056f52d453c09516201199034c894843d3cb691f1cc8a3b4f01688e98737b1f4598c9e76a188721
|
data/README.md
CHANGED
@@ -34,9 +34,9 @@ A fast XML parser and Object marshaller as a Ruby gem.
|
|
34
34
|
|
35
35
|
## <a name="release">Release Notes</a>
|
36
36
|
|
37
|
-
### Release 2.0.
|
37
|
+
### Release 2.0.3
|
38
38
|
|
39
|
-
- Fixed
|
39
|
+
- Fixed excessive memory allocation issue for very large file parsing (half a gig).
|
40
40
|
|
41
41
|
## <a name="description">Description</a>
|
42
42
|
|
data/ext/ox/sax.c
CHANGED
@@ -188,8 +188,8 @@ ox_sax_drive_error_at(SaxDrive dr, const char *msg, int line, int col) {
|
|
188
188
|
VALUE args[3];
|
189
189
|
|
190
190
|
args[0] = rb_str_new2(msg);
|
191
|
-
args[1] =
|
192
|
-
args[2] =
|
191
|
+
args[1] = LONG2NUM(line);
|
192
|
+
args[2] = LONG2NUM(col);
|
193
193
|
if (dr->has.line) {
|
194
194
|
rb_ivar_set(dr->handler, ox_at_line_id, args[1]);
|
195
195
|
}
|
@@ -331,10 +331,10 @@ parse(SaxDrive dr) {
|
|
331
331
|
Nv sp;
|
332
332
|
|
333
333
|
if (dr->has.line) {
|
334
|
-
rb_ivar_set(dr->handler, ox_at_line_id,
|
334
|
+
rb_ivar_set(dr->handler, ox_at_line_id, LONG2NUM(dr->buf.line));
|
335
335
|
}
|
336
336
|
if (dr->has.column) {
|
337
|
-
rb_ivar_set(dr->handler, ox_at_column_id,
|
337
|
+
rb_ivar_set(dr->handler, ox_at_column_id, LONG2NUM(dr->buf.col));
|
338
338
|
}
|
339
339
|
for (sp = dr->stack.tail - 1; dr->stack.head <= sp; sp--) {
|
340
340
|
snprintf(msg, sizeof(msg) - 1, "%selement '%s' not closed", EL_MISMATCH, sp->name);
|
@@ -400,10 +400,10 @@ read_instruction(SaxDrive dr) {
|
|
400
400
|
VALUE args[1];
|
401
401
|
|
402
402
|
if (dr->has.line) {
|
403
|
-
rb_ivar_set(dr->handler, ox_at_line_id,
|
403
|
+
rb_ivar_set(dr->handler, ox_at_line_id, LONG2NUM(line));
|
404
404
|
}
|
405
405
|
if (dr->has.column) {
|
406
|
-
rb_ivar_set(dr->handler, ox_at_column_id,
|
406
|
+
rb_ivar_set(dr->handler, ox_at_column_id, LONG2NUM(col));
|
407
407
|
}
|
408
408
|
args[0] = target;
|
409
409
|
rb_funcall2(dr->handler, ox_instruct_id, 1, args);
|
@@ -437,10 +437,10 @@ read_instruction(SaxDrive dr) {
|
|
437
437
|
}
|
438
438
|
#endif
|
439
439
|
if (dr->has.line) {
|
440
|
-
rb_ivar_set(dr->handler, ox_at_line_id,
|
440
|
+
rb_ivar_set(dr->handler, ox_at_line_id, LONG2NUM(line));
|
441
441
|
}
|
442
442
|
if (dr->has.column) {
|
443
|
-
rb_ivar_set(dr->handler, ox_at_column_id,
|
443
|
+
rb_ivar_set(dr->handler, ox_at_column_id, LONG2NUM(col));
|
444
444
|
}
|
445
445
|
rb_funcall2(dr->handler, ox_text_id, 1, args);
|
446
446
|
}
|
@@ -463,10 +463,10 @@ read_instruction(SaxDrive dr) {
|
|
463
463
|
VALUE args[1];
|
464
464
|
|
465
465
|
if (dr->has.line) {
|
466
|
-
rb_ivar_set(dr->handler, ox_at_line_id,
|
466
|
+
rb_ivar_set(dr->handler, ox_at_line_id, LONG2NUM(line));
|
467
467
|
}
|
468
468
|
if (dr->has.column) {
|
469
|
-
rb_ivar_set(dr->handler, ox_at_column_id,
|
469
|
+
rb_ivar_set(dr->handler, ox_at_column_id, LONG2NUM(col));
|
470
470
|
}
|
471
471
|
args[0] = target;
|
472
472
|
rb_funcall2(dr->handler, ox_end_instruct_id, 1, args);
|
@@ -504,10 +504,10 @@ read_doctype(SaxDrive dr) {
|
|
504
504
|
VALUE args[1];
|
505
505
|
|
506
506
|
if (dr->has.line) {
|
507
|
-
rb_ivar_set(dr->handler, ox_at_line_id,
|
507
|
+
rb_ivar_set(dr->handler, ox_at_line_id, LONG2NUM(line));
|
508
508
|
}
|
509
509
|
if (dr->has.column) {
|
510
|
-
rb_ivar_set(dr->handler, ox_at_column_id,
|
510
|
+
rb_ivar_set(dr->handler, ox_at_column_id, LONG2NUM(col));
|
511
511
|
}
|
512
512
|
args[0] = rb_str_new2(dr->buf.str);
|
513
513
|
rb_funcall2(dr->handler, ox_doctype_id, 1, args);
|
@@ -584,10 +584,10 @@ read_cdata(SaxDrive dr) {
|
|
584
584
|
}
|
585
585
|
#endif
|
586
586
|
if (dr->has.line) {
|
587
|
-
rb_ivar_set(dr->handler, ox_at_line_id,
|
587
|
+
rb_ivar_set(dr->handler, ox_at_line_id, LONG2NUM(line));
|
588
588
|
}
|
589
589
|
if (dr->has.column) {
|
590
|
-
rb_ivar_set(dr->handler, ox_at_column_id,
|
590
|
+
rb_ivar_set(dr->handler, ox_at_column_id, LONG2NUM(col));
|
591
591
|
}
|
592
592
|
rb_funcall2(dr->handler, ox_cdata_id, 1, args);
|
593
593
|
}
|
@@ -663,10 +663,10 @@ read_comment(SaxDrive dr) {
|
|
663
663
|
}
|
664
664
|
#endif
|
665
665
|
if (dr->has.line) {
|
666
|
-
rb_ivar_set(dr->handler, ox_at_line_id,
|
666
|
+
rb_ivar_set(dr->handler, ox_at_line_id, LONG2NUM(line));
|
667
667
|
}
|
668
668
|
if (dr->has.column) {
|
669
|
-
rb_ivar_set(dr->handler, ox_at_column_id,
|
669
|
+
rb_ivar_set(dr->handler, ox_at_column_id, LONG2NUM(col));
|
670
670
|
}
|
671
671
|
rb_funcall2(dr->handler, ox_comment_id, 1, args);
|
672
672
|
}
|
@@ -744,10 +744,10 @@ read_element_start(SaxDrive dr) {
|
|
744
744
|
VALUE args[1];
|
745
745
|
|
746
746
|
if (dr->has.line) {
|
747
|
-
rb_ivar_set(dr->handler, ox_at_line_id,
|
747
|
+
rb_ivar_set(dr->handler, ox_at_line_id, LONG2NUM(line));
|
748
748
|
}
|
749
749
|
if (dr->has.column) {
|
750
|
-
rb_ivar_set(dr->handler, ox_at_column_id,
|
750
|
+
rb_ivar_set(dr->handler, ox_at_column_id, LONG2NUM(col));
|
751
751
|
}
|
752
752
|
args[0] = name;
|
753
753
|
rb_funcall2(dr->handler, ox_start_element_id, 1, args);
|
@@ -839,10 +839,10 @@ read_element_end(SaxDrive dr) {
|
|
839
839
|
VALUE args[1];
|
840
840
|
|
841
841
|
if (dr->has.line) {
|
842
|
-
rb_ivar_set(dr->handler, ox_at_line_id,
|
842
|
+
rb_ivar_set(dr->handler, ox_at_line_id, LONG2NUM(line));
|
843
843
|
}
|
844
844
|
if (dr->has.column) {
|
845
|
-
rb_ivar_set(dr->handler, ox_at_column_id,
|
845
|
+
rb_ivar_set(dr->handler, ox_at_column_id, LONG2NUM(col));
|
846
846
|
}
|
847
847
|
args[0] = name;
|
848
848
|
rb_funcall2(dr->handler, ox_start_element_id, 1, args);
|
@@ -858,10 +858,10 @@ read_element_end(SaxDrive dr) {
|
|
858
858
|
snprintf(msg, sizeof(msg) - 1, "%selement '%s' close does not match '%s' open", EL_MISMATCH, dr->buf.str, nv->name);
|
859
859
|
ox_sax_drive_error_at(dr, msg, line, col);
|
860
860
|
if (dr->has.line) {
|
861
|
-
rb_ivar_set(dr->handler, ox_at_line_id,
|
861
|
+
rb_ivar_set(dr->handler, ox_at_line_id, LONG2NUM(line));
|
862
862
|
}
|
863
863
|
if (dr->has.column) {
|
864
|
-
rb_ivar_set(dr->handler, ox_at_column_id,
|
864
|
+
rb_ivar_set(dr->handler, ox_at_column_id, LONG2NUM(col));
|
865
865
|
}
|
866
866
|
for (nv = stack_pop(&dr->stack); match < nv; nv = stack_pop(&dr->stack)) {
|
867
867
|
if (dr->has.end_element) {
|
@@ -898,10 +898,10 @@ read_text(SaxDrive dr) {
|
|
898
898
|
VALUE args[1];
|
899
899
|
|
900
900
|
if (dr->has.line) {
|
901
|
-
rb_ivar_set(dr->handler, ox_at_line_id,
|
901
|
+
rb_ivar_set(dr->handler, ox_at_line_id, LONG2NUM(line));
|
902
902
|
}
|
903
903
|
if (dr->has.column) {
|
904
|
-
rb_ivar_set(dr->handler, ox_at_column_id,
|
904
|
+
rb_ivar_set(dr->handler, ox_at_column_id, LONG2NUM(col));
|
905
905
|
}
|
906
906
|
*args = dr->value_obj;
|
907
907
|
rb_funcall2(dr->handler, ox_value_id, 1, args);
|
@@ -922,10 +922,10 @@ read_text(SaxDrive dr) {
|
|
922
922
|
}
|
923
923
|
#endif
|
924
924
|
if (dr->has.line) {
|
925
|
-
rb_ivar_set(dr->handler, ox_at_line_id,
|
925
|
+
rb_ivar_set(dr->handler, ox_at_line_id, LONG2NUM(line));
|
926
926
|
}
|
927
927
|
if (dr->has.column) {
|
928
|
-
rb_ivar_set(dr->handler, ox_at_column_id,
|
928
|
+
rb_ivar_set(dr->handler, ox_at_column_id, LONG2NUM(col));
|
929
929
|
}
|
930
930
|
rb_funcall2(dr->handler, ox_text_id, 1, args);
|
931
931
|
}
|
@@ -994,10 +994,10 @@ read_attrs(SaxDrive dr, char c, char termc, char term2, int is_xml, int eq_req)
|
|
994
994
|
VALUE args[2];
|
995
995
|
|
996
996
|
if (dr->has.line) {
|
997
|
-
rb_ivar_set(dr->handler, ox_at_line_id,
|
997
|
+
rb_ivar_set(dr->handler, ox_at_line_id, LONG2NUM(line));
|
998
998
|
}
|
999
999
|
if (dr->has.column) {
|
1000
|
-
rb_ivar_set(dr->handler, ox_at_column_id,
|
1000
|
+
rb_ivar_set(dr->handler, ox_at_column_id, LONG2NUM(col));
|
1001
1001
|
}
|
1002
1002
|
args[0] = name;
|
1003
1003
|
args[1] = dr->value_obj;
|
@@ -1018,10 +1018,10 @@ read_attrs(SaxDrive dr, char c, char termc, char term2, int is_xml, int eq_req)
|
|
1018
1018
|
}
|
1019
1019
|
#endif
|
1020
1020
|
if (dr->has.line) {
|
1021
|
-
rb_ivar_set(dr->handler, ox_at_line_id,
|
1021
|
+
rb_ivar_set(dr->handler, ox_at_line_id, LONG2NUM(line));
|
1022
1022
|
}
|
1023
1023
|
if (dr->has.column) {
|
1024
|
-
rb_ivar_set(dr->handler, ox_at_column_id,
|
1024
|
+
rb_ivar_set(dr->handler, ox_at_column_id, LONG2NUM(col));
|
1025
1025
|
}
|
1026
1026
|
rb_funcall2(dr->handler, ox_attr_id, 2, args);
|
1027
1027
|
}
|
@@ -1239,10 +1239,10 @@ static void
|
|
1239
1239
|
end_element_cb(SaxDrive dr, VALUE name, int line, int col) {
|
1240
1240
|
if (dr->has.end_element) {
|
1241
1241
|
if (dr->has.line) {
|
1242
|
-
rb_ivar_set(dr->handler, ox_at_line_id,
|
1242
|
+
rb_ivar_set(dr->handler, ox_at_line_id, LONG2NUM(line));
|
1243
1243
|
}
|
1244
1244
|
if (dr->has.column) {
|
1245
|
-
rb_ivar_set(dr->handler, ox_at_column_id,
|
1245
|
+
rb_ivar_set(dr->handler, ox_at_column_id, LONG2NUM(col));
|
1246
1246
|
}
|
1247
1247
|
rb_funcall(dr->handler, ox_end_element_id, 1, name);
|
1248
1248
|
}
|
data/ext/ox/sax_buf.c
CHANGED
@@ -114,7 +114,8 @@ ox_sax_buf_read(Buf buf) {
|
|
114
114
|
int err;
|
115
115
|
size_t shift = 0;
|
116
116
|
|
117
|
-
if
|
117
|
+
// if there is not much room to read into, shift or realloc a larger buffer.
|
118
|
+
if (buf->head < buf->tail && 4096 > buf->end - buf->tail) {
|
118
119
|
if (0 == buf->pro) {
|
119
120
|
shift = buf->tail - buf->head;
|
120
121
|
} else {
|
@@ -170,7 +171,7 @@ rescue_cb(VALUE rbuf, VALUE err) {
|
|
170
171
|
#endif
|
171
172
|
Buf buf = (Buf)rbuf;
|
172
173
|
|
173
|
-
ox_sax_drive_cleanup(buf->dr);
|
174
|
+
//ox_sax_drive_cleanup(buf->dr); called after exiting protect
|
174
175
|
rb_raise(err, "at line %d, column %d\n", buf->line, buf->col);
|
175
176
|
}
|
176
177
|
#endif
|
@@ -189,7 +190,7 @@ partial_io_cb(VALUE rbuf) {
|
|
189
190
|
rstr = rb_funcall2(buf->io, ox_readpartial_id, 1, args);
|
190
191
|
str = StringValuePtr(rstr);
|
191
192
|
cnt = strlen(str);
|
192
|
-
|
193
|
+
//printf("*** read %lu bytes, str: '%s'\n", cnt, str);
|
193
194
|
strcpy(buf->tail, str);
|
194
195
|
buf->read_end = buf->tail + cnt;
|
195
196
|
|
data/ext/ox/sax_buf.h
CHANGED
data/lib/ox/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ox
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Peter Ohler
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-06-
|
11
|
+
date: 2013-06-12 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: "A fast XML parser and object serializer that uses only standard C lib.\n
|
14
14
|
\ \nOptimized XML (Ox), as the name implies was written to provide speed
|