ox 2.14.8 → 2.14.11

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.
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.