mini_racer 0.17.0.pre7 → 0.17.0.pre8

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: 1d058a397309a0e5354576fa25b299f26e9ca9576b23333063dbcd46fcf9f775
4
- data.tar.gz: 3dde7c0c2e713ebb419593eb6fb0d7634f07ee4d91e35549aa9fb57987a255e5
3
+ metadata.gz: 6a4649daa0104376800784775a305593ff637dbde023f27ed6d9126b77c54548
4
+ data.tar.gz: e46ffb00764e6113cef170508d8ed1ac4b68cab29ace1051fc7c5df4c7d97f07
5
5
  SHA512:
6
- metadata.gz: 8cf3e4c85acafb8161ff8a88d193b7bfde7e2b1ab241366364306a72416f462cbd31b4886a3b1f01402557a6045fd6ad40b1837849f307df9d3ac3fafdd7c6d0
7
- data.tar.gz: a08db269e750b147daa7501cdf38dccdee8de7d07530b0112aecd1da3949b8daab704c778f1b3657d0dea328b087db9173f30e9aeb43f9d755d4a95dd1e51bac
6
+ metadata.gz: 38202ee576c23d016afd7b69ba9bada8ca47a82c3a460c028a42e25c23438f965e4ac2e8d6c4a24bea7211bed6436a9f2cc55bc4c9c0c42fd6b8e5054602c8f5
7
+ data.tar.gz: e8da8f6787111b63e698db0964a9ad35ffe62c1acca83db7efa08cdb7db94d8d68ed39b989f81fd77b310fff510790d16454761f083bc5bd1154105f93c20f6f
data/CHANGELOG CHANGED
@@ -1,3 +1,7 @@
1
+ - 0.17.0.pre8 - 11-01-2025
2
+ - Fix handling of UTF 32 LE and Ascii encoding strings - Ben Noordhuis
3
+ - Handle rare edge case in V8 serialization - Ben Noordhuis
4
+
1
5
  - 0.17.0.pre7 - 10-01-2025
2
6
 
3
7
  - Objects containing non serializable properties will return an Error object vs raising an exception. Ben Noordhuis
@@ -422,6 +422,25 @@ static int collect(VALUE k, VALUE v, VALUE a)
422
422
  return ST_CONTINUE;
423
423
  }
424
424
 
425
+ static void add_string(Ser *s, VALUE v)
426
+ {
427
+ rb_encoding *e;
428
+ const void *p;
429
+ size_t n;
430
+
431
+ Check_Type(v, T_STRING);
432
+ e = rb_enc_get(v);
433
+ p = RSTRING_PTR(v);
434
+ n = RSTRING_LEN(v);
435
+ if (e) {
436
+ if (!strcmp(e->name, "ISO-8859-1"))
437
+ return ser_string8(s, p, n);
438
+ if (!strcmp(e->name, "UTF-16LE"))
439
+ return ser_string16(s, p, n);
440
+ }
441
+ return ser_string(s, p, n);
442
+ }
443
+
425
444
  static int serialize1(Ser *s, VALUE refs, VALUE v)
426
445
  {
427
446
  unsigned long limbs[64];
@@ -525,7 +544,7 @@ static int serialize1(Ser *s, VALUE refs, VALUE v)
525
544
  v = rb_sym2str(v);
526
545
  // fallthru
527
546
  case T_STRING:
528
- ser_string(s, RSTRING_PTR(v), RSTRING_LENINT(v));
547
+ add_string(s, v);
529
548
  break;
530
549
  default:
531
550
  snprintf(s->err, sizeof(s->err), "unsupported type %x", TYPE(v));
@@ -1062,7 +1081,7 @@ static VALUE context_attach(VALUE self, VALUE name, VALUE proc)
1062
1081
  // request is (A)ttach, [name, id] array
1063
1082
  ser_init1(&s, 'A');
1064
1083
  ser_array_begin(&s, 2);
1065
- ser_string(&s, RSTRING_PTR(name), RSTRING_LENINT(name));
1084
+ add_string(&s, name);
1066
1085
  ser_int(&s, RARRAY_LENINT(c->procs));
1067
1086
  ser_array_end(&s, 2);
1068
1087
  rb_ary_push(c->procs, proc);
@@ -1159,8 +1178,8 @@ static VALUE context_eval(int argc, VALUE *argv, VALUE self)
1159
1178
  // request is (E)val, [filename, source] array
1160
1179
  ser_init1(&s, 'E');
1161
1180
  ser_array_begin(&s, 2);
1162
- ser_string(&s, RSTRING_PTR(filename), RSTRING_LENINT(filename));
1163
- ser_string(&s, RSTRING_PTR(source), RSTRING_LENINT(source));
1181
+ add_string(&s, filename);
1182
+ add_string(&s, source);
1164
1183
  ser_array_end(&s, 2);
1165
1184
  // response is [result, errname] array
1166
1185
  a = rendezvous(c, &s.b); // takes ownership of |s.b|
@@ -1462,7 +1481,7 @@ static VALUE snapshot_initialize(int argc, VALUE *argv, VALUE self)
1462
1481
  TypedData_Get_Struct(cv, Context, &context_type, c);
1463
1482
  // request is snapsho(T), "code"
1464
1483
  ser_init1(&s, 'T');
1465
- ser_string(&s, RSTRING_PTR(code), RSTRING_LENINT(code));
1484
+ add_string(&s, code);
1466
1485
  // response is [arraybuffer, error]
1467
1486
  a = rendezvous(c, &s.b);
1468
1487
  e = rb_ary_pop(a);
@@ -1489,7 +1508,7 @@ static VALUE snapshot_warmup(VALUE self, VALUE arg)
1489
1508
  ser_init1(&s, 'W');
1490
1509
  ser_array_begin(&s, 2);
1491
1510
  ser_string8(&s, (const uint8_t *)RSTRING_PTR(ss->blob), RSTRING_LENINT(ss->blob));
1492
- ser_string(&s, RSTRING_PTR(arg), RSTRING_LENINT(arg));
1511
+ add_string(&s, arg);
1493
1512
  ser_array_end(&s, 2);
1494
1513
  // response is [arraybuffer, error]
1495
1514
  a = rendezvous(c, &s.b);
@@ -303,6 +303,14 @@ static void ser_string8(Ser *s, const uint8_t *p, size_t n)
303
303
  w(s, p, n);
304
304
  }
305
305
 
306
+ // string must be utf16le; |n| is in bytes, not code points
307
+ static void ser_string16(Ser *s, const void *p, size_t n)
308
+ {
309
+ w_byte(s, 'c');
310
+ w_varint(s, n);
311
+ w(s, p, n);
312
+ }
313
+
306
314
  static void ser_object_begin(Ser *s)
307
315
  {
308
316
  w_byte(s, 'o');
@@ -362,6 +370,7 @@ static int des1(char (*err)[64], const uint8_t **p, const uint8_t *pe,
362
370
 
363
371
  if (depth < 0)
364
372
  return bail(err, "too much recursion");
373
+ again:
365
374
  if (*p >= pe)
366
375
  goto too_short;
367
376
  switch ((c = *(*p)++)) {
@@ -372,7 +381,9 @@ static int des1(char (*err)[64], const uint8_t **p, const uint8_t *pe,
372
381
  snprintf(*err, sizeof(*err), "bad tag: %02x", c);
373
382
  }
374
383
  return -1;
375
- case '\0': // padding
384
+ case '\0': // skip alignment padding for two-byte strings
385
+ if (*p < pe)
386
+ goto again;
376
387
  break;
377
388
  case '^':
378
389
  if (r_varint(p, pe, &u))
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module MiniRacer
4
- VERSION = "0.17.0.pre7"
4
+ VERSION = "0.17.0.pre8"
5
5
  LIBV8_NODE_VERSION = "~> 22.7.0.4"
6
6
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mini_racer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.17.0.pre7
4
+ version: 0.17.0.pre8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sam Saffron
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-01-09 00:00:00.000000000 Z
11
+ date: 2025-01-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -123,9 +123,9 @@ licenses:
123
123
  - MIT
124
124
  metadata:
125
125
  bug_tracker_uri: https://github.com/discourse/mini_racer/issues
126
- changelog_uri: https://github.com/discourse/mini_racer/blob/v0.17.0.pre7/CHANGELOG
127
- documentation_uri: https://www.rubydoc.info/gems/mini_racer/0.17.0.pre7
128
- source_code_uri: https://github.com/discourse/mini_racer/tree/v0.17.0.pre7
126
+ changelog_uri: https://github.com/discourse/mini_racer/blob/v0.17.0.pre8/CHANGELOG
127
+ documentation_uri: https://www.rubydoc.info/gems/mini_racer/0.17.0.pre8
128
+ source_code_uri: https://github.com/discourse/mini_racer/tree/v0.17.0.pre8
129
129
  post_install_message:
130
130
  rdoc_options: []
131
131
  require_paths: