tomlib 0.6.0 → 0.7.1

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: aad6b4a6455bd446b09db888f1fc491a66521e0680594f74eeba9d10314cc8b6
4
- data.tar.gz: fe599fd32583ba52c6702d29a9a27d805ba3cb0889e3df4b6612e2cebc6d1c75
3
+ metadata.gz: 2485bbac9374c3f6c822fa8f92418b1664954642d0eabeff92c19da02efeda98
4
+ data.tar.gz: 362ad310079bfaa4ea0defe6dc90923ea74a353431cb60e70c6c87c08f9f81b5
5
5
  SHA512:
6
- metadata.gz: a9f44b0a8b4f65b58ebf058646ca69d1fabdb935f352523cf9836f6387a92b5712ee59e233ec4efe92beb5a8feae28dd03af630f7601db236564d0a5afc79b86
7
- data.tar.gz: aa654d7e31d34113629798a9336c9ead2e2071eb1935b3c80974f4c44da6333bf9b11719668ed43d148a4d85df6b1032f5fc8a306cde7e7620d9316ad7e9bb9a
6
+ metadata.gz: 07d958881ee3c4880bed029f6cc6f418e7fb8ba9ea738afb6524e63aa82c28c8163e0be0bd111a2cc3e944fb58a108940665765adf66215a2d0cad4993c0c934
7
+ data.tar.gz: eb645bd85515fc73abf25b70a47caebb3fc5e14c1acb63e79dae2f818e61b985a6dd74fe0dc849c6303c4722a763e19d05c2a07689dc98093e3042df467006ae
data/CHANGELOG.md CHANGED
@@ -1,3 +1,14 @@
1
+ ## [0.7.1] - 2024-02-17
2
+
3
+ - Remove "missing bigdecimal dependency" warning
4
+
5
+ ## [0.7.0] - 2024-02-10
6
+
7
+ - Update tomlc99 to the latest version
8
+ - Parse very large numbers as Infinity
9
+ - Add support for Ruby 3.3
10
+ - Drop support for Ruby 2.7 and 2.7
11
+
1
12
  ## [0.6.0] - 2023-05-05
2
13
 
3
14
  - Correctly escape special characters
data/README.md CHANGED
@@ -11,7 +11,7 @@ It passes both [BurntSushi/toml-test](https://github.com/BurntSushi/toml-test) a
11
11
 
12
12
  ## Installation
13
13
 
14
- Tomlib supports Ruby (MRI) 2.6+
14
+ Tomlib supports Ruby (MRI) 3.0+
15
15
 
16
16
  Add this line to your application's Gemfile:
17
17
 
data/ext/tomlib/toml.c CHANGED
@@ -45,6 +45,7 @@ void toml_set_memutil(void *(*xxmalloc)(size_t), void (*xxfree)(void *)) {
45
45
  ppfree = xxfree;
46
46
  }
47
47
 
48
+ #define ALIGN8(sz) (((sz) + 7) & ~7)
48
49
  #define MALLOC(a) ppmalloc(a)
49
50
  #define FREE(a) ppfree(a)
50
51
 
@@ -53,7 +54,7 @@ void toml_set_memutil(void *(*xxmalloc)(size_t), void (*xxfree)(void *)) {
53
54
  #define calloc(x, y) error - forbidden - use CALLOC instead
54
55
 
55
56
  static void *CALLOC(size_t nmemb, size_t sz) {
56
- int nb = sz * nmemb;
57
+ int nb = ALIGN8(sz) * nmemb;
57
58
  void *p = MALLOC(nb);
58
59
  if (p) {
59
60
  memset(p, 0, nb);
@@ -220,8 +221,8 @@ int toml_ucs_to_utf8(int64_t code, char buf[6]) {
220
221
  110xxxxx 10xxxxxx
221
222
  */
222
223
  if (code <= 0x000007FF) {
223
- buf[0] = (unsigned char) (0xc0 | (code >> 6));
224
- buf[1] = (unsigned char) (0x80 | (code & 0x3f));
224
+ buf[0] = (unsigned char)(0xc0 | (code >> 6));
225
+ buf[1] = (unsigned char)(0x80 | (code & 0x3f));
225
226
  return 2;
226
227
  }
227
228
 
@@ -229,9 +230,9 @@ int toml_ucs_to_utf8(int64_t code, char buf[6]) {
229
230
  1110xxxx 10xxxxxx 10xxxxxx
230
231
  */
231
232
  if (code <= 0x0000FFFF) {
232
- buf[0] = (unsigned char) (0xe0 | (code >> 12));
233
- buf[1] = (unsigned char) (0x80 | ((code >> 6) & 0x3f));
234
- buf[2] = (unsigned char) (0x80 | (code & 0x3f));
233
+ buf[0] = (unsigned char)(0xe0 | (code >> 12));
234
+ buf[1] = (unsigned char)(0x80 | ((code >> 6) & 0x3f));
235
+ buf[2] = (unsigned char)(0x80 | (code & 0x3f));
235
236
  return 3;
236
237
  }
237
238
 
@@ -239,10 +240,10 @@ int toml_ucs_to_utf8(int64_t code, char buf[6]) {
239
240
  11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
240
241
  */
241
242
  if (code <= 0x001FFFFF) {
242
- buf[0] = (unsigned char) (0xf0 | (code >> 18));
243
- buf[1] = (unsigned char) (0x80 | ((code >> 12) & 0x3f));
244
- buf[2] = (unsigned char) (0x80 | ((code >> 6) & 0x3f));
245
- buf[3] = (unsigned char) (0x80 | (code & 0x3f));
243
+ buf[0] = (unsigned char)(0xf0 | (code >> 18));
244
+ buf[1] = (unsigned char)(0x80 | ((code >> 12) & 0x3f));
245
+ buf[2] = (unsigned char)(0x80 | ((code >> 6) & 0x3f));
246
+ buf[3] = (unsigned char)(0x80 | (code & 0x3f));
246
247
  return 4;
247
248
  }
248
249
 
@@ -250,11 +251,11 @@ int toml_ucs_to_utf8(int64_t code, char buf[6]) {
250
251
  111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
251
252
  */
252
253
  if (code <= 0x03FFFFFF) {
253
- buf[0] = (unsigned char) (0xf8 | (code >> 24));
254
- buf[1] = (unsigned char) (0x80 | ((code >> 18) & 0x3f));
255
- buf[2] = (unsigned char) (0x80 | ((code >> 12) & 0x3f));
256
- buf[3] = (unsigned char) (0x80 | ((code >> 6) & 0x3f));
257
- buf[4] = (unsigned char) (0x80 | (code & 0x3f));
254
+ buf[0] = (unsigned char)(0xf8 | (code >> 24));
255
+ buf[1] = (unsigned char)(0x80 | ((code >> 18) & 0x3f));
256
+ buf[2] = (unsigned char)(0x80 | ((code >> 12) & 0x3f));
257
+ buf[3] = (unsigned char)(0x80 | ((code >> 6) & 0x3f));
258
+ buf[4] = (unsigned char)(0x80 | (code & 0x3f));
258
259
  return 5;
259
260
  }
260
261
 
@@ -262,12 +263,12 @@ int toml_ucs_to_utf8(int64_t code, char buf[6]) {
262
263
  1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
263
264
  */
264
265
  if (code <= 0x7FFFFFFF) {
265
- buf[0] = (unsigned char) (0xfc | (code >> 30));
266
- buf[1] = (unsigned char) (0x80 | ((code >> 24) & 0x3f));
267
- buf[2] = (unsigned char) (0x80 | ((code >> 18) & 0x3f));
268
- buf[3] = (unsigned char) (0x80 | ((code >> 12) & 0x3f));
269
- buf[4] = (unsigned char) (0x80 | ((code >> 6) & 0x3f));
270
- buf[5] = (unsigned char) (0x80 | (code & 0x3f));
266
+ buf[0] = (unsigned char)(0xfc | (code >> 30));
267
+ buf[1] = (unsigned char)(0x80 | ((code >> 24) & 0x3f));
268
+ buf[2] = (unsigned char)(0x80 | ((code >> 18) & 0x3f));
269
+ buf[3] = (unsigned char)(0x80 | ((code >> 12) & 0x3f));
270
+ buf[4] = (unsigned char)(0x80 | ((code >> 6) & 0x3f));
271
+ buf[5] = (unsigned char)(0x80 | (code & 0x3f));
271
272
  return 6;
272
273
  }
273
274
 
@@ -411,8 +412,10 @@ static void *expand(void *p, int sz, int newsz) {
411
412
  if (!s)
412
413
  return 0;
413
414
 
414
- memcpy(s, p, sz);
415
- FREE(p);
415
+ if (p) {
416
+ memcpy(s, p, sz);
417
+ FREE(p);
418
+ }
416
419
  return s;
417
420
  }
418
421
 
@@ -422,8 +425,10 @@ static void **expand_ptrarr(void **p, int n) {
422
425
  return 0;
423
426
 
424
427
  s[n] = 0;
425
- memcpy(s, p, n * sizeof(void *));
426
- FREE(p);
428
+ if (p) {
429
+ memcpy(s, p, n * sizeof(void *));
430
+ FREE(p);
431
+ }
427
432
  return s;
428
433
  }
429
434
 
@@ -2198,7 +2203,7 @@ int toml_rtod_ex(toml_raw_t src, double *ret_, char *buf, int buflen) {
2198
2203
  }
2199
2204
 
2200
2205
  int toml_rtod(toml_raw_t src, double *ret_) {
2201
- char buf[100];
2206
+ char buf[400];
2202
2207
  return toml_rtod_ex(src, ret_, buf, sizeof(buf));
2203
2208
  }
2204
2209
 
@@ -2211,6 +2216,7 @@ int toml_rtos(toml_raw_t src, char **ret) {
2211
2216
  if (!src)
2212
2217
  return -1;
2213
2218
 
2219
+ // for strings, first char must be a s-quote or d-quote
2214
2220
  int qchar = src[0];
2215
2221
  int srclen = strlen(src);
2216
2222
  if (!(qchar == '\'' || qchar == '"')) {
@@ -2219,12 +2225,14 @@ int toml_rtos(toml_raw_t src, char **ret) {
2219
2225
 
2220
2226
  // triple quotes?
2221
2227
  if (qchar == src[1] && qchar == src[2]) {
2222
- multiline = 1;
2223
- sp = src + 3;
2224
- sq = src + srclen - 3;
2225
- /* last 3 chars in src must be qchar */
2226
- if (!(sp <= sq && sq[0] == qchar && sq[1] == qchar && sq[2] == qchar))
2228
+ multiline = 1; // triple-quote implies multiline
2229
+ sp = src + 3; // first char after quote
2230
+ sq = src + srclen - 3; // first char of ending quote
2231
+
2232
+ if (!(sp <= sq && sq[0] == qchar && sq[1] == qchar && sq[2] == qchar)) {
2233
+ // last 3 chars in src must be qchar
2227
2234
  return -1;
2235
+ }
2228
2236
 
2229
2237
  /* skip new line immediate after qchar */
2230
2238
  if (sp[0] == '\n')
@@ -2233,13 +2241,18 @@ int toml_rtos(toml_raw_t src, char **ret) {
2233
2241
  sp += 2;
2234
2242
 
2235
2243
  } else {
2236
- sp = src + 1;
2237
- sq = src + srclen - 1;
2238
- /* last char in src must be qchar */
2239
- if (!(sp <= sq && *sq == qchar))
2244
+ sp = src + 1; // first char after quote
2245
+ sq = src + srclen - 1; // ending quote
2246
+ if (!(sp <= sq && *sq == qchar)) {
2247
+ /* last char in src must be qchar */
2240
2248
  return -1;
2249
+ }
2241
2250
  }
2242
2251
 
2252
+ // at this point:
2253
+ // sp points to first valid char after quote.
2254
+ // sq points to one char beyond last valid char.
2255
+ // string len is (sq - sp).
2243
2256
  if (qchar == '\'') {
2244
2257
  *ret = norm_lit_str(sp, sq - sp, multiline, 0, 0);
2245
2258
  } else {
data/ext/tomlib/toml.h CHANGED
@@ -26,7 +26,7 @@
26
26
  #define TOML_H
27
27
 
28
28
  #ifdef _MSC_VER
29
- #pragma warning(disable: 4996)
29
+ #pragma warning(disable : 4996)
30
30
  #endif
31
31
 
32
32
  #include <stdint.h>
data/ext/tomlib/tomlib.c CHANGED
@@ -187,7 +187,7 @@ static VALUE toml_table_key_to_rb_value(const toml_table_t *table, const char *k
187
187
 
188
188
  datum = toml_double_in(table, key);
189
189
 
190
- if (datum.ok) {
190
+ if (datum.ok || datum.u.d == INFINITY || datum.u.d == -INFINITY) {
191
191
  return DBL2NUM(datum.u.d);
192
192
  }
193
193
 
@@ -2,5 +2,5 @@
2
2
 
3
3
  module Tomlib
4
4
  # @api private
5
- VERSION = '0.6.0'
5
+ VERSION = '0.7.1'
6
6
  end
data/tomlib.gemspec CHANGED
@@ -32,5 +32,7 @@ Gem::Specification.new do |spec|
32
32
 
33
33
  spec.extensions = ['ext/tomlib/extconf.rb']
34
34
 
35
- spec.required_ruby_version = '>= 2.6.0'
35
+ spec.add_runtime_dependency 'bigdecimal'
36
+
37
+ spec.required_ruby_version = '>= 3.0.0'
36
38
  end
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tomlib
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.7.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kamil Giszczak
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-05-05 00:00:00.000000000 Z
12
- dependencies: []
11
+ date: 2024-02-17 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bigdecimal
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
13
27
  description: Fast TOML parser and generator with native extension.
14
28
  email:
15
29
  - beerkg@gmail.com
@@ -47,14 +61,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
47
61
  requirements:
48
62
  - - ">="
49
63
  - !ruby/object:Gem::Version
50
- version: 2.6.0
64
+ version: 3.0.0
51
65
  required_rubygems_version: !ruby/object:Gem::Requirement
52
66
  requirements:
53
67
  - - ">="
54
68
  - !ruby/object:Gem::Version
55
69
  version: '0'
56
70
  requirements: []
57
- rubygems_version: 3.4.10
71
+ rubygems_version: 3.5.3
58
72
  signing_key:
59
73
  specification_version: 4
60
74
  summary: Fast TOML parser and generator with native extension.