cbor-x 1.5.4 → 1.5.5

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/dist/index.js CHANGED
@@ -821,9 +821,18 @@
821
821
  return (glbl[data[0]] || Error)(data[1], data[2])
822
822
  };
823
823
  const packedTable = (read) => {
824
- if (src[position$1++] != 0x84)
825
- throw new Error('Packed values structure must be followed by a 4 element array')
824
+ if (src[position$1++] != 0x84) {
825
+ let error = new Error('Packed values structure must be followed by a 4 element array');
826
+ if (src.length < position$1)
827
+ error.incomplete = true;
828
+ throw error
829
+ }
826
830
  let newPackedValues = read(); // packed values
831
+ if (!newPackedValues || !newPackedValues.length) {
832
+ let error = new Error('Packed values structure must be followed by a 4 element array');
833
+ error.incomplete = true;
834
+ throw error
835
+ }
827
836
  packedValues = packedValues ? newPackedValues.concat(packedValues.slice(newPackedValues.length)) : newPackedValues;
828
837
  packedValues.prefixes = read();
829
838
  packedValues.suffixes = read();
@@ -841,7 +850,10 @@
841
850
  }
842
851
  if (typeof data == 'number')
843
852
  return packedValues[16 + (data >= 0 ? 2 * data : (-2 * data - 1))]
844
- throw new Error('No support for non-integer packed references yet')
853
+ let error = new Error('No support for non-integer packed references yet');
854
+ if (data === undefined)
855
+ error.incomplete = true;
856
+ throw error
845
857
  };
846
858
 
847
859
  // The following code is an incomplete implementation of http://cbor.schmorp.de/stringref
@@ -967,7 +979,15 @@
967
979
  currentExtensions[littleEndian ? tag : (tag - 4)] = (bytesPerElement == 1 || littleEndian == isLittleEndianMachine$1) ? (buffer) => {
968
980
  if (!TypedArray)
969
981
  throw new Error('Could not find typed array for code ' + tag)
970
- // we have to always slice/copy here to get a new ArrayBuffer that is word/byte aligned
982
+ if (!currentDecoder.copyBuffers) {
983
+ // try provide a direct view, but will only work if we are byte-aligned
984
+ if (bytesPerElement === 1 ||
985
+ bytesPerElement === 2 && !(buffer.byteOffset & 1) ||
986
+ bytesPerElement === 4 && !(buffer.byteOffset & 3) ||
987
+ bytesPerElement === 8 && !(buffer.byteOffset & 7))
988
+ return new TypedArray(buffer.buffer, buffer.byteOffset, buffer.byteLength);
989
+ }
990
+ // we have to slice/copy here to get a new ArrayBuffer, if we are not word/byte aligned
971
991
  return new TypedArray(Uint8Array.prototype.slice.call(buffer, 0).buffer)
972
992
  } : buffer => {
973
993
  if (!TypedArray)