ox 2.14.8 → 2.14.11

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 141360789b82c7bdc927d64818b673c91f2c0ca585c9d00eab8f81324c5b56e2
4
- data.tar.gz: 0b19c86cce35dcc00c4da5b526722580eedcb7dd5edce9eb96ccd99407f4ca84
3
+ metadata.gz: a654851f11a761fdb77beb9cb4ec9ae07b4697cec9a4c5578a973a344779ca97
4
+ data.tar.gz: b4b004cc4fd90e3c52e142bd4007c471515a520d52a42ca2d81f332c11e6b2ba
5
5
  SHA512:
6
- metadata.gz: cbfe081ac34c6fbea4719156f0666d9554d2c25b23e52546c95cc5fbae89105dfe1aef0c6b5ad659bea540bbcf6bd87b4ea661d9e82fdd3798db6f41eecb3bcd
7
- data.tar.gz: a7946c2929b553b5c019dc5ee43a07fb289aa7e5f93ae3ad890862f018310efb5fa172822944a2be5178f88884d6404daa0d7bdc9dd8b733e1a8a55547909ca8
6
+ metadata.gz: 6b0595691afa3021e1abada2fd0fc4fb21992a10155f744846b01eb40bd74e33bf52041db37ec502b3f916295b64bde60816c20d99ed9954633342d035225d8a
7
+ data.tar.gz: e38010c8dcf091b983d17774464bd727a0f33538548d6b5d1820c6d043ba602d83552837a4ce4dd963c554ec19657475c21add9246323e5d5a9fbd7773c20e55
data/CHANGELOG.md CHANGED
@@ -2,6 +2,24 @@
2
2
 
3
3
  All changes to the Ox gem are documented here. Releases follow semantic versioning.
4
4
 
5
+ ## [2.14.11] - 2022-03-31
6
+
7
+ ### Fixed
8
+
9
+ - Missing attribute value no longer crashes with the SAX parser.
10
+
11
+ ## [2.14.10] - 2022-03-10
12
+
13
+ ### Fixed
14
+
15
+ - Writing strings over 16K to a file with builder no longer causes a crash.
16
+
17
+ ## [2.14.9] - 2022-02-11
18
+
19
+ ### Fixed
20
+
21
+ - Fixed the `\r` replacement with `\n` with the SAX parser according to https://www.w3.org/TR/2008/REC-xml-20081126/#sec-line-ends.
22
+
5
23
  ## [2.14.8] - 2022-02-09
6
24
 
7
25
  ### Fixed
data/ext/ox/buf.h CHANGED
@@ -86,8 +86,16 @@ buf_append_string(Buf buf, const char *s, size_t slen) {
86
86
 
87
87
  if (len != (size_t)write(buf->fd, buf->head, len)) {
88
88
  buf->err = true;
89
+ return;
89
90
  }
90
91
  buf->tail = buf->head;
92
+ if (sizeof(buf->base) <= slen) {
93
+ if (slen != (size_t)write(buf->fd, s, slen)) {
94
+ buf->err = true;
95
+ return;
96
+ }
97
+ return;
98
+ }
91
99
  } else {
92
100
  size_t len = buf->end - buf->head;
93
101
  size_t toff = buf->tail - buf->head;
data/ext/ox/parse.c CHANGED
@@ -108,7 +108,7 @@ static void fix_newlines(char *buf) {
108
108
  if ('\n' == *(s + 1)) {
109
109
  continue;
110
110
  }
111
- *s = '\n';
111
+ *d = '\n';
112
112
  } else if (d < s) {
113
113
  *d = *s;
114
114
  }
data/ext/ox/sax.c CHANGED
@@ -117,7 +117,7 @@ static void attr_text(SaxDrive dr, VALUE name, char *value, long pos, long line,
117
117
  VALUE args[2];
118
118
 
119
119
  args[0] = name;
120
- if (dr->options.convert_special) {
120
+ if (dr->options.convert_special && '\0' != value[0]) {
121
121
  ox_sax_collapse_special(dr, value, pos, line, col);
122
122
  }
123
123
  args[1] = rb_str_new2(value);
@@ -307,8 +307,8 @@ static void sax_drive_init(SaxDrive dr, VALUE handler, VALUE io, SaxOptions opti
307
307
  dr->encoding = rb_enc_find(ox_default_options.encoding);
308
308
  }
309
309
  dr->utf8 = (NULL == dr->encoding || rb_utf8_encoding() == dr->encoding);
310
- if (NULL == dr->encoding || rb_utf8_encoding() == dr->encoding) { // UTF-8
311
- dr->get_name = dr->options.symbolize ? ox_utf8_sym : ox_utf8_name; // TBD UTF8 sym?
310
+ if (NULL == dr->encoding || rb_utf8_encoding() == dr->encoding) { // UTF-8
311
+ dr->get_name = dr->options.symbolize ? ox_utf8_sym : ox_utf8_name; // TBD UTF8 sym?
312
312
  } else {
313
313
  dr->get_name = dr->options.symbolize ? ox_enc_sym : ox_enc_name;
314
314
  }
@@ -334,7 +334,7 @@ static char skipBOM(SaxDrive dr) {
334
334
  if (0xEF == (uint8_t)c) { /* only UTF8 is supported */
335
335
  if (0xBB == (uint8_t)buf_get(&dr->buf) && 0xBF == (uint8_t)buf_get(&dr->buf)) {
336
336
  dr->encoding = ox_utf8_encoding;
337
- c = buf_get(&dr->buf);
337
+ c = buf_get(&dr->buf);
338
338
  } else {
339
339
  ox_sax_drive_error(dr, BAD_BOM "invalid BOM or a binary file.");
340
340
  c = '\0';
@@ -1215,9 +1215,10 @@ static char read_attrs(SaxDrive dr, char c, char termc, char term2, int is_xml,
1215
1215
  col = dr->buf.col + 1;
1216
1216
  c = read_quoted_value(dr);
1217
1217
  attr_value = dr->buf.str;
1218
+
1218
1219
  if (is_encoding) {
1219
1220
  dr->encoding = rb_enc_find(dr->buf.str);
1220
- is_encoding = 0;
1221
+ is_encoding = 0;
1221
1222
  }
1222
1223
  }
1223
1224
  if (0 >= dr->blocked && (NULL == h || ActiveOverlay == h->overlay || NestOverlay == h->overlay)) {
@@ -1368,7 +1369,8 @@ int ox_sax_collapse_special(SaxDrive dr, char *str, long pos, long line, long co
1368
1369
  char *b = str;
1369
1370
 
1370
1371
  while ('\0' != *s) {
1371
- if ('&' == *s) {
1372
+ switch (*s) {
1373
+ case '&': {
1372
1374
  int c = 0;
1373
1375
  char *end;
1374
1376
 
@@ -1458,13 +1460,25 @@ int ox_sax_collapse_special(SaxDrive dr, char *str, long pos, long line, long co
1458
1460
  }
1459
1461
  *b++ = (char)c;
1460
1462
  col++;
1461
- } else {
1463
+ break;
1464
+ }
1465
+ case '\r':
1466
+ s++;
1462
1467
  if ('\n' == *s) {
1463
- line++;
1464
- col = 0;
1465
- }
1468
+ continue;
1469
+ }
1470
+ line++;
1471
+ col = 1;
1472
+ *b++ = '\n';
1473
+ break;
1474
+ case '\n':
1475
+ line++;
1476
+ col = 0;
1477
+ // fall through
1478
+ default:
1466
1479
  col++;
1467
1480
  *b++ = *s++;
1481
+ break;
1468
1482
  }
1469
1483
  }
1470
1484
  *b = '\0';
data/lib/ox/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
 
2
2
  module Ox
3
3
  # Current version of the module.
4
- VERSION = '2.14.8'
4
+ VERSION = '2.14.11'
5
5
  end
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.14.8
4
+ version: 2.14.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter Ohler
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-02-09 00:00:00.000000000 Z
11
+ date: 2022-03-31 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\nOptimized
14
14
  XML (Ox), as the name implies was written to provide speed optimized\nXML handling.