bare-buffer 3.2.0 → 3.3.0

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.
package/CMakeLists.txt CHANGED
@@ -6,7 +6,7 @@ find_package(cmake-fetch REQUIRED PATHS node_modules/cmake-fetch)
6
6
  project(bare_buffer C)
7
7
 
8
8
  fetch_package("github:holepunchto/libutf#9509b28")
9
- fetch_package("github:holepunchto/libbase64#cded073")
9
+ fetch_package("github:holepunchto/libbase64#86afd29")
10
10
  fetch_package("github:holepunchto/libhex#1dfad95")
11
11
 
12
12
  add_bare_module(bare_buffer)
package/binding.c CHANGED
@@ -437,6 +437,45 @@ bare_buffer_to_string_base64(js_env_t *env, js_callback_info_t *info) {
437
437
  return result;
438
438
  }
439
439
 
440
+ static js_value_t *
441
+ bare_buffer_to_string_base64url(js_env_t *env, js_callback_info_t *info) {
442
+ int err;
443
+
444
+ size_t argc = 3;
445
+ js_value_t *argv[3];
446
+
447
+ err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
448
+ assert(err == 0);
449
+
450
+ assert(argc == 3);
451
+
452
+ utf8_t *buf;
453
+ err = js_get_arraybuffer_info(env, argv[0], (void **) &buf, NULL);
454
+ assert(err == 0);
455
+
456
+ int64_t offset;
457
+ err = js_get_value_int64(env, argv[1], &offset);
458
+ assert(err == 0);
459
+
460
+ int64_t len;
461
+ err = js_get_value_int64(env, argv[2], &len);
462
+ assert(err == 0);
463
+
464
+ size_t str_len;
465
+ err = base64url_encode_utf8(&buf[offset], len, NULL, &str_len);
466
+ assert(err == 0);
467
+
468
+ utf8_t *str = malloc(str_len);
469
+ err = base64url_encode_utf8(&buf[offset], len, str, &str_len);
470
+ assert(err == 0);
471
+
472
+ js_value_t *result;
473
+ err = js_create_external_string_latin1(env, str, str_len, bare_buffer__on_finalize_string, NULL, &result, NULL);
474
+ assert(err == 0);
475
+
476
+ return result;
477
+ }
478
+
440
479
  static int64_t
441
480
  bare_buffer_typed_write_base64(
442
481
  js_value_t *receiver,
@@ -468,10 +507,18 @@ bare_buffer_typed_write_base64(
468
507
 
469
508
  if (encoding == js_utf16le) {
470
509
  err = base64_decode_utf16le(str, str_len, &buf[offset], &written);
471
- assert(err == 0);
472
510
  } else {
473
511
  err = base64_decode_utf8(str, str_len, &buf[offset], &written);
512
+ }
513
+
514
+ if (err != 0) {
515
+ err = js_throw_error(env, NULL, "Invalid input");
474
516
  assert(err == 0);
517
+
518
+ err = js_release_string_view(env, str_view);
519
+ assert(err == 0);
520
+
521
+ return 0;
475
522
  }
476
523
 
477
524
  err = js_release_string_view(env, str_view);
@@ -516,10 +563,18 @@ bare_buffer_write_base64(js_env_t *env, js_callback_info_t *info) {
516
563
 
517
564
  if (encoding == js_utf16le) {
518
565
  err = base64_decode_utf16le(str, str_len, &buf[offset], &written);
519
- assert(err == 0);
520
566
  } else {
521
567
  err = base64_decode_utf8(str, str_len, &buf[offset], &written);
568
+ }
569
+
570
+ if (err != 0) {
571
+ err = js_throw_error(env, NULL, "Invalid input");
522
572
  assert(err == 0);
573
+
574
+ err = js_release_string_view(env, str_view);
575
+ assert(err == 0);
576
+
577
+ return NULL;
523
578
  }
524
579
 
525
580
  err = js_release_string_view(env, str_view);
@@ -602,10 +657,18 @@ bare_buffer_typed_write_hex(
602
657
 
603
658
  if (encoding == js_utf16le) {
604
659
  err = hex_decode_utf16le(str, str_len, &buf[offset], &written);
605
- assert(err == 0);
606
660
  } else {
607
661
  err = hex_decode_utf8(str, str_len, &buf[offset], &written);
662
+ }
663
+
664
+ if (err != 0) {
665
+ err = js_throw_error(env, NULL, "Invalid input");
666
+ assert(err == 0);
667
+
668
+ err = js_release_string_view(env, str_view);
608
669
  assert(err == 0);
670
+
671
+ return 0;
609
672
  }
610
673
 
611
674
  err = js_release_string_view(env, str_view);
@@ -650,10 +713,18 @@ bare_buffer_write_hex(js_env_t *env, js_callback_info_t *info) {
650
713
 
651
714
  if (encoding == js_utf16le) {
652
715
  err = hex_decode_utf16le(str, str_len, &buf[offset], &written);
653
- assert(err == 0);
654
716
  } else {
655
717
  err = hex_decode_utf8(str, str_len, &buf[offset], &written);
718
+ }
719
+
720
+ if (err != 0) {
721
+ err = js_throw_error(env, NULL, "Invalid input");
656
722
  assert(err == 0);
723
+
724
+ err = js_release_string_view(env, str_view);
725
+ assert(err == 0);
726
+
727
+ return NULL;
657
728
  }
658
729
 
659
730
  err = js_release_string_view(env, str_view);
@@ -864,6 +935,7 @@ bare_buffer_exports(js_env_t *env, js_value_t *exports) {
864
935
  );
865
936
 
866
937
  V("toStringBase64", bare_buffer_to_string_base64, NULL, NULL);
938
+ V("toStringBase64URL", bare_buffer_to_string_base64url, NULL, NULL);
867
939
 
868
940
  V(
869
941
  "writeBase64",
package/index.js CHANGED
@@ -1,6 +1,7 @@
1
1
  const constants = require('./lib/constants')
2
2
  const ascii = require('./lib/ascii')
3
3
  const base64 = require('./lib/base64')
4
+ const base64url = require('./lib/base64url')
4
5
  const hex = require('./lib/hex')
5
6
  const utf8 = require('./lib/utf8')
6
7
  const utf16le = require('./lib/utf16le')
@@ -536,6 +537,7 @@ const codecs = Object.create(null)
536
537
 
537
538
  codecs.ascii = ascii
538
539
  codecs.base64 = base64
540
+ codecs.base64url = base64url
539
541
  codecs.hex = hex
540
542
  codecs.utf8 = codecs['utf-8'] = utf8
541
543
  codecs.utf16le = codecs.ucs2 = codecs['utf-16le'] = codecs['ucs-2'] = utf16le
@@ -548,7 +550,7 @@ function codecFor(encoding = 'utf8') {
548
550
 
549
551
  if (encoding in codecs) return codecs[encoding]
550
552
 
551
- throw new Error(`Unknown encoding: ${encoding}`)
553
+ throw new Error(`Unknown encoding '${encoding}'`)
552
554
  }
553
555
 
554
556
  const views = new WeakMap()
@@ -0,0 +1,27 @@
1
+ const binding = require('../binding')
2
+
3
+ exports.byteLength = function byteLength(string) {
4
+ let len = string.length
5
+
6
+ if (string.charCodeAt(len - 1) === 0x3d) len--
7
+ if (len > 1 && string.charCodeAt(len - 1) === 0x3d) len--
8
+
9
+ return (len * 3) >>> 2
10
+ }
11
+
12
+ exports.toString = function toString(buffer) {
13
+ return binding.toStringBase64URL(
14
+ buffer.buffer,
15
+ buffer.byteOffset,
16
+ buffer.byteLength
17
+ )
18
+ }
19
+
20
+ exports.write = function write(buffer, string) {
21
+ return binding.writeBase64(
22
+ buffer.buffer,
23
+ buffer.byteOffset,
24
+ buffer.byteLength,
25
+ string
26
+ )
27
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bare-buffer",
3
- "version": "3.2.0",
3
+ "version": "3.3.0",
4
4
  "description": "Native buffers for JavaScript",
5
5
  "exports": {
6
6
  "./package": "./package.json",