bson 5.3.0 → 5.5.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/README.md +4 -11
- package/bson.d.ts +20 -0
- package/lib/bson.bundle.js +137 -86
- package/lib/bson.bundle.js.map +1 -1
- package/lib/bson.cjs +137 -86
- package/lib/bson.cjs.map +1 -1
- package/lib/bson.mjs +137 -86
- package/lib/bson.mjs.map +1 -1
- package/lib/bson.rn.cjs +4159 -0
- package/lib/bson.rn.cjs.map +1 -0
- package/package.json +8 -7
- package/src/binary.ts +3 -2
- package/src/bson.ts +2 -2
- package/src/decimal128.ts +165 -84
- package/src/parser/deserializer.ts +8 -8
- package/src/timestamp.ts +7 -5
- package/src/utils/byte_utils.ts +1 -1
- package/src/utils/node_byte_utils.ts +3 -3
- package/src/utils/web_byte_utils.ts +2 -2
- package/vendor/base64/LICENSE-MIT.txt +20 -0
- package/vendor/base64/README.md +112 -0
- package/vendor/base64/base64.js +157 -0
- package/vendor/base64/package.json +43 -0
- package/vendor/text-encoding/LICENSE.md +237 -0
- package/vendor/text-encoding/README.md +111 -0
- package/vendor/text-encoding/index.js +9 -0
- package/vendor/text-encoding/lib/encoding-indexes.js +47 -0
- package/vendor/text-encoding/lib/encoding.js +3301 -0
- package/vendor/text-encoding/package.json +37 -0
- package/lib/binary.d.ts +0 -182
- package/lib/binary.d.ts.map +0 -1
- package/lib/bson.d.ts +0 -97
- package/lib/bson.d.ts.map +0 -1
- package/lib/bson_value.d.ts +0 -10
- package/lib/bson_value.d.ts.map +0 -1
- package/lib/code.d.ts +0 -32
- package/lib/code.d.ts.map +0 -1
- package/lib/constants.d.ts +0 -107
- package/lib/constants.d.ts.map +0 -1
- package/lib/db_ref.d.ts +0 -40
- package/lib/db_ref.d.ts.map +0 -1
- package/lib/decimal128.d.ts +0 -34
- package/lib/decimal128.d.ts.map +0 -1
- package/lib/double.d.ts +0 -35
- package/lib/double.d.ts.map +0 -1
- package/lib/error.d.ts +0 -50
- package/lib/error.d.ts.map +0 -1
- package/lib/extended_json.d.ts +0 -82
- package/lib/extended_json.d.ts.map +0 -1
- package/lib/index.d.ts +0 -4
- package/lib/index.d.ts.map +0 -1
- package/lib/int_32.d.ts +0 -35
- package/lib/int_32.d.ts.map +0 -1
- package/lib/long.d.ts +0 -323
- package/lib/long.d.ts.map +0 -1
- package/lib/max_key.d.ts +0 -19
- package/lib/max_key.d.ts.map +0 -1
- package/lib/min_key.d.ts +0 -19
- package/lib/min_key.d.ts.map +0 -1
- package/lib/objectid.d.ts +0 -96
- package/lib/objectid.d.ts.map +0 -1
- package/lib/regexp.d.ts +0 -36
- package/lib/regexp.d.ts.map +0 -1
- package/lib/symbol.d.ts +0 -28
- package/lib/symbol.d.ts.map +0 -1
- package/lib/timestamp.d.ts +0 -66
- package/lib/timestamp.d.ts.map +0 -1
- package/lib/validate_utf8.d.ts +0 -10
- package/lib/validate_utf8.d.ts.map +0 -1
package/lib/bson.cjs
CHANGED
|
@@ -165,8 +165,8 @@ const nodeJsByteUtils = {
|
|
|
165
165
|
fromUTF8(text) {
|
|
166
166
|
return Buffer.from(text, 'utf8');
|
|
167
167
|
},
|
|
168
|
-
toUTF8(buffer) {
|
|
169
|
-
return nodeJsByteUtils.toLocalBufferType(buffer).toString('utf8');
|
|
168
|
+
toUTF8(buffer, start, end) {
|
|
169
|
+
return nodeJsByteUtils.toLocalBufferType(buffer).toString('utf8', start, end);
|
|
170
170
|
},
|
|
171
171
|
utf8ByteLength(input) {
|
|
172
172
|
return Buffer.byteLength(input, 'utf8');
|
|
@@ -276,8 +276,8 @@ const webByteUtils = {
|
|
|
276
276
|
fromUTF8(text) {
|
|
277
277
|
return new TextEncoder().encode(text);
|
|
278
278
|
},
|
|
279
|
-
toUTF8(uint8array) {
|
|
280
|
-
return new TextDecoder('utf8', { fatal: false }).decode(uint8array);
|
|
279
|
+
toUTF8(uint8array, start, end) {
|
|
280
|
+
return new TextDecoder('utf8', { fatal: false }).decode(uint8array.slice(start, end));
|
|
281
281
|
},
|
|
282
282
|
utf8ByteLength(input) {
|
|
283
283
|
return webByteUtils.fromUTF8(input).byteLength;
|
|
@@ -409,8 +409,8 @@ class Binary extends BSONValue {
|
|
|
409
409
|
if (encoding === 'base64')
|
|
410
410
|
return ByteUtils.toBase64(this.buffer);
|
|
411
411
|
if (encoding === 'utf8' || encoding === 'utf-8')
|
|
412
|
-
return ByteUtils.toUTF8(this.buffer);
|
|
413
|
-
return ByteUtils.toUTF8(this.buffer);
|
|
412
|
+
return ByteUtils.toUTF8(this.buffer, 0, this.buffer.byteLength);
|
|
413
|
+
return ByteUtils.toUTF8(this.buffer, 0, this.buffer.byteLength);
|
|
414
414
|
}
|
|
415
415
|
toExtendedJSON(options) {
|
|
416
416
|
options = options || {};
|
|
@@ -1436,7 +1436,14 @@ class Decimal128 extends BSONValue {
|
|
|
1436
1436
|
}
|
|
1437
1437
|
}
|
|
1438
1438
|
static fromString(representation) {
|
|
1439
|
+
return Decimal128._fromString(representation, { allowRounding: false });
|
|
1440
|
+
}
|
|
1441
|
+
static fromStringWithRounding(representation) {
|
|
1442
|
+
return Decimal128._fromString(representation, { allowRounding: true });
|
|
1443
|
+
}
|
|
1444
|
+
static _fromString(representation, options) {
|
|
1439
1445
|
let isNegative = false;
|
|
1446
|
+
let sawSign = false;
|
|
1440
1447
|
let sawRadix = false;
|
|
1441
1448
|
let foundNonZero = false;
|
|
1442
1449
|
let significantDigits = 0;
|
|
@@ -1447,10 +1454,8 @@ class Decimal128 extends BSONValue {
|
|
|
1447
1454
|
const digits = [0];
|
|
1448
1455
|
let nDigitsStored = 0;
|
|
1449
1456
|
let digitsInsert = 0;
|
|
1450
|
-
let firstDigit = 0;
|
|
1451
1457
|
let lastDigit = 0;
|
|
1452
1458
|
let exponent = 0;
|
|
1453
|
-
let i = 0;
|
|
1454
1459
|
let significandHigh = new Long(0, 0);
|
|
1455
1460
|
let significandLow = new Long(0, 0);
|
|
1456
1461
|
let biasedExponent = 0;
|
|
@@ -1478,6 +1483,7 @@ class Decimal128 extends BSONValue {
|
|
|
1478
1483
|
}
|
|
1479
1484
|
}
|
|
1480
1485
|
if (representation[index] === '+' || representation[index] === '-') {
|
|
1486
|
+
sawSign = true;
|
|
1481
1487
|
isNegative = representation[index++] === '-';
|
|
1482
1488
|
}
|
|
1483
1489
|
if (!isDigit(representation[index]) && representation[index] !== '.') {
|
|
@@ -1496,7 +1502,7 @@ class Decimal128 extends BSONValue {
|
|
|
1496
1502
|
index = index + 1;
|
|
1497
1503
|
continue;
|
|
1498
1504
|
}
|
|
1499
|
-
if (nDigitsStored <
|
|
1505
|
+
if (nDigitsStored < MAX_DIGITS) {
|
|
1500
1506
|
if (representation[index] !== '0' || foundNonZero) {
|
|
1501
1507
|
if (!foundNonZero) {
|
|
1502
1508
|
firstNonZero = nDigitsRead;
|
|
@@ -1524,10 +1530,7 @@ class Decimal128 extends BSONValue {
|
|
|
1524
1530
|
}
|
|
1525
1531
|
if (representation[index])
|
|
1526
1532
|
return new Decimal128(NAN_BUFFER);
|
|
1527
|
-
firstDigit = 0;
|
|
1528
1533
|
if (!nDigitsStored) {
|
|
1529
|
-
firstDigit = 0;
|
|
1530
|
-
lastDigit = 0;
|
|
1531
1534
|
digits[0] = 0;
|
|
1532
1535
|
nDigits = 1;
|
|
1533
1536
|
nDigitsStored = 1;
|
|
@@ -1537,12 +1540,12 @@ class Decimal128 extends BSONValue {
|
|
|
1537
1540
|
lastDigit = nDigitsStored - 1;
|
|
1538
1541
|
significantDigits = nDigits;
|
|
1539
1542
|
if (significantDigits !== 1) {
|
|
1540
|
-
while (
|
|
1543
|
+
while (representation[firstNonZero + significantDigits - 1 + Number(sawSign) + Number(sawRadix)] === '0') {
|
|
1541
1544
|
significantDigits = significantDigits - 1;
|
|
1542
1545
|
}
|
|
1543
1546
|
}
|
|
1544
1547
|
}
|
|
1545
|
-
if (exponent <= radixPosition && radixPosition
|
|
1548
|
+
if (exponent <= radixPosition && radixPosition > exponent + (1 << 14)) {
|
|
1546
1549
|
exponent = EXPONENT_MIN;
|
|
1547
1550
|
}
|
|
1548
1551
|
else {
|
|
@@ -1550,9 +1553,8 @@ class Decimal128 extends BSONValue {
|
|
|
1550
1553
|
}
|
|
1551
1554
|
while (exponent > EXPONENT_MAX) {
|
|
1552
1555
|
lastDigit = lastDigit + 1;
|
|
1553
|
-
if (lastDigit
|
|
1554
|
-
|
|
1555
|
-
if (digitsString.match(/^0+$/)) {
|
|
1556
|
+
if (lastDigit >= MAX_DIGITS) {
|
|
1557
|
+
if (significantDigits === 0) {
|
|
1556
1558
|
exponent = EXPONENT_MAX;
|
|
1557
1559
|
break;
|
|
1558
1560
|
}
|
|
@@ -1560,69 +1562,116 @@ class Decimal128 extends BSONValue {
|
|
|
1560
1562
|
}
|
|
1561
1563
|
exponent = exponent - 1;
|
|
1562
1564
|
}
|
|
1563
|
-
|
|
1564
|
-
|
|
1565
|
-
|
|
1566
|
-
|
|
1567
|
-
|
|
1568
|
-
}
|
|
1569
|
-
if (nDigitsStored < nDigits) {
|
|
1570
|
-
nDigits = nDigits - 1;
|
|
1571
|
-
}
|
|
1572
|
-
else {
|
|
1573
|
-
lastDigit = lastDigit - 1;
|
|
1574
|
-
}
|
|
1575
|
-
if (exponent < EXPONENT_MAX) {
|
|
1576
|
-
exponent = exponent + 1;
|
|
1577
|
-
}
|
|
1578
|
-
else {
|
|
1579
|
-
const digitsString = digits.join('');
|
|
1580
|
-
if (digitsString.match(/^0+$/)) {
|
|
1581
|
-
exponent = EXPONENT_MAX;
|
|
1565
|
+
if (options.allowRounding) {
|
|
1566
|
+
while (exponent < EXPONENT_MIN || nDigitsStored < nDigits) {
|
|
1567
|
+
if (lastDigit === 0 && significantDigits < nDigitsStored) {
|
|
1568
|
+
exponent = EXPONENT_MIN;
|
|
1569
|
+
significantDigits = 0;
|
|
1582
1570
|
break;
|
|
1583
1571
|
}
|
|
1584
|
-
|
|
1585
|
-
|
|
1586
|
-
|
|
1587
|
-
|
|
1588
|
-
|
|
1589
|
-
|
|
1590
|
-
|
|
1591
|
-
|
|
1592
|
-
|
|
1593
|
-
|
|
1594
|
-
|
|
1595
|
-
|
|
1596
|
-
|
|
1597
|
-
|
|
1598
|
-
let roundBit = 0;
|
|
1599
|
-
if (roundDigit >= 5) {
|
|
1600
|
-
roundBit = 1;
|
|
1601
|
-
if (roundDigit === 5) {
|
|
1602
|
-
roundBit = digits[lastDigit] % 2 === 1 ? 1 : 0;
|
|
1603
|
-
for (i = firstNonZero + lastDigit + 2; i < endOfString; i++) {
|
|
1604
|
-
if (parseInt(representation[i], 10)) {
|
|
1605
|
-
roundBit = 1;
|
|
1606
|
-
break;
|
|
1607
|
-
}
|
|
1572
|
+
if (nDigitsStored < nDigits) {
|
|
1573
|
+
nDigits = nDigits - 1;
|
|
1574
|
+
}
|
|
1575
|
+
else {
|
|
1576
|
+
lastDigit = lastDigit - 1;
|
|
1577
|
+
}
|
|
1578
|
+
if (exponent < EXPONENT_MAX) {
|
|
1579
|
+
exponent = exponent + 1;
|
|
1580
|
+
}
|
|
1581
|
+
else {
|
|
1582
|
+
const digitsString = digits.join('');
|
|
1583
|
+
if (digitsString.match(/^0+$/)) {
|
|
1584
|
+
exponent = EXPONENT_MAX;
|
|
1585
|
+
break;
|
|
1608
1586
|
}
|
|
1587
|
+
invalidErr(representation, 'overflow');
|
|
1609
1588
|
}
|
|
1610
1589
|
}
|
|
1611
|
-
if (
|
|
1612
|
-
let
|
|
1613
|
-
|
|
1614
|
-
|
|
1615
|
-
|
|
1616
|
-
|
|
1617
|
-
|
|
1618
|
-
|
|
1619
|
-
|
|
1590
|
+
if (lastDigit + 1 < significantDigits) {
|
|
1591
|
+
let endOfString = nDigitsRead;
|
|
1592
|
+
if (sawRadix) {
|
|
1593
|
+
firstNonZero = firstNonZero + 1;
|
|
1594
|
+
endOfString = endOfString + 1;
|
|
1595
|
+
}
|
|
1596
|
+
if (sawSign) {
|
|
1597
|
+
firstNonZero = firstNonZero + 1;
|
|
1598
|
+
endOfString = endOfString + 1;
|
|
1599
|
+
}
|
|
1600
|
+
const roundDigit = parseInt(representation[firstNonZero + lastDigit + 1], 10);
|
|
1601
|
+
let roundBit = 0;
|
|
1602
|
+
if (roundDigit >= 5) {
|
|
1603
|
+
roundBit = 1;
|
|
1604
|
+
if (roundDigit === 5) {
|
|
1605
|
+
roundBit = digits[lastDigit] % 2 === 1 ? 1 : 0;
|
|
1606
|
+
for (let i = firstNonZero + lastDigit + 2; i < endOfString; i++) {
|
|
1607
|
+
if (parseInt(representation[i], 10)) {
|
|
1608
|
+
roundBit = 1;
|
|
1609
|
+
break;
|
|
1620
1610
|
}
|
|
1621
|
-
|
|
1622
|
-
|
|
1611
|
+
}
|
|
1612
|
+
}
|
|
1613
|
+
}
|
|
1614
|
+
if (roundBit) {
|
|
1615
|
+
let dIdx = lastDigit;
|
|
1616
|
+
for (; dIdx >= 0; dIdx--) {
|
|
1617
|
+
if (++digits[dIdx] > 9) {
|
|
1618
|
+
digits[dIdx] = 0;
|
|
1619
|
+
if (dIdx === 0) {
|
|
1620
|
+
if (exponent < EXPONENT_MAX) {
|
|
1621
|
+
exponent = exponent + 1;
|
|
1622
|
+
digits[dIdx] = 1;
|
|
1623
|
+
}
|
|
1624
|
+
else {
|
|
1625
|
+
return new Decimal128(isNegative ? INF_NEGATIVE_BUFFER : INF_POSITIVE_BUFFER);
|
|
1626
|
+
}
|
|
1623
1627
|
}
|
|
1624
1628
|
}
|
|
1629
|
+
else {
|
|
1630
|
+
break;
|
|
1631
|
+
}
|
|
1632
|
+
}
|
|
1633
|
+
}
|
|
1634
|
+
}
|
|
1635
|
+
}
|
|
1636
|
+
else {
|
|
1637
|
+
while (exponent < EXPONENT_MIN || nDigitsStored < nDigits) {
|
|
1638
|
+
if (lastDigit === 0) {
|
|
1639
|
+
if (significantDigits === 0) {
|
|
1640
|
+
exponent = EXPONENT_MIN;
|
|
1641
|
+
break;
|
|
1625
1642
|
}
|
|
1643
|
+
invalidErr(representation, 'exponent underflow');
|
|
1644
|
+
}
|
|
1645
|
+
if (nDigitsStored < nDigits) {
|
|
1646
|
+
if (representation[nDigits - 1 + Number(sawSign) + Number(sawRadix)] !== '0' &&
|
|
1647
|
+
significantDigits !== 0) {
|
|
1648
|
+
invalidErr(representation, 'inexact rounding');
|
|
1649
|
+
}
|
|
1650
|
+
nDigits = nDigits - 1;
|
|
1651
|
+
}
|
|
1652
|
+
else {
|
|
1653
|
+
if (digits[lastDigit] !== 0) {
|
|
1654
|
+
invalidErr(representation, 'inexact rounding');
|
|
1655
|
+
}
|
|
1656
|
+
lastDigit = lastDigit - 1;
|
|
1657
|
+
}
|
|
1658
|
+
if (exponent < EXPONENT_MAX) {
|
|
1659
|
+
exponent = exponent + 1;
|
|
1660
|
+
}
|
|
1661
|
+
else {
|
|
1662
|
+
invalidErr(representation, 'overflow');
|
|
1663
|
+
}
|
|
1664
|
+
}
|
|
1665
|
+
if (lastDigit + 1 < significantDigits) {
|
|
1666
|
+
if (sawRadix) {
|
|
1667
|
+
firstNonZero = firstNonZero + 1;
|
|
1668
|
+
}
|
|
1669
|
+
if (sawSign) {
|
|
1670
|
+
firstNonZero = firstNonZero + 1;
|
|
1671
|
+
}
|
|
1672
|
+
const roundDigit = parseInt(representation[firstNonZero + lastDigit + 1], 10);
|
|
1673
|
+
if (roundDigit !== 0) {
|
|
1674
|
+
invalidErr(representation, 'inexact rounding');
|
|
1626
1675
|
}
|
|
1627
1676
|
}
|
|
1628
1677
|
}
|
|
@@ -1632,8 +1681,8 @@ class Decimal128 extends BSONValue {
|
|
|
1632
1681
|
significandHigh = Long.fromNumber(0);
|
|
1633
1682
|
significandLow = Long.fromNumber(0);
|
|
1634
1683
|
}
|
|
1635
|
-
else if (lastDigit
|
|
1636
|
-
let dIdx =
|
|
1684
|
+
else if (lastDigit < 17) {
|
|
1685
|
+
let dIdx = 0;
|
|
1637
1686
|
significandLow = Long.fromNumber(digits[dIdx++]);
|
|
1638
1687
|
significandHigh = new Long(0, 0);
|
|
1639
1688
|
for (; dIdx <= lastDigit; dIdx++) {
|
|
@@ -1642,7 +1691,7 @@ class Decimal128 extends BSONValue {
|
|
|
1642
1691
|
}
|
|
1643
1692
|
}
|
|
1644
1693
|
else {
|
|
1645
|
-
let dIdx =
|
|
1694
|
+
let dIdx = 0;
|
|
1646
1695
|
significandHigh = Long.fromNumber(digits[dIdx++]);
|
|
1647
1696
|
for (; dIdx <= lastDigit - 17; dIdx++) {
|
|
1648
1697
|
significandHigh = significandHigh.multiply(Long.fromNumber(10));
|
|
@@ -2416,19 +2465,21 @@ class Timestamp extends LongWithoutOverridesClass {
|
|
|
2416
2465
|
if (typeof low.i !== 'number' && (typeof low.i !== 'object' || low.i._bsontype !== 'Int32')) {
|
|
2417
2466
|
throw new BSONError('Timestamp constructed from { t, i } must provide i as a number');
|
|
2418
2467
|
}
|
|
2419
|
-
|
|
2468
|
+
const t = Number(low.t);
|
|
2469
|
+
const i = Number(low.i);
|
|
2470
|
+
if (t < 0 || Number.isNaN(t)) {
|
|
2420
2471
|
throw new BSONError('Timestamp constructed from { t, i } must provide a positive t');
|
|
2421
2472
|
}
|
|
2422
|
-
if (
|
|
2473
|
+
if (i < 0 || Number.isNaN(i)) {
|
|
2423
2474
|
throw new BSONError('Timestamp constructed from { t, i } must provide a positive i');
|
|
2424
2475
|
}
|
|
2425
|
-
if (
|
|
2476
|
+
if (t > 4294967295) {
|
|
2426
2477
|
throw new BSONError('Timestamp constructed from { t, i } must provide t equal or less than uint32 max');
|
|
2427
2478
|
}
|
|
2428
|
-
if (
|
|
2479
|
+
if (i > 4294967295) {
|
|
2429
2480
|
throw new BSONError('Timestamp constructed from { t, i } must provide i equal or less than uint32 max');
|
|
2430
2481
|
}
|
|
2431
|
-
super(
|
|
2482
|
+
super(i, t, true);
|
|
2432
2483
|
}
|
|
2433
2484
|
else {
|
|
2434
2485
|
throw new BSONError('A Timestamp can only be constructed with: bigint, Long, or { t: number; i: number }');
|
|
@@ -2600,7 +2651,7 @@ function deserializeObject(buffer, index, options, isArray = false) {
|
|
|
2600
2651
|
}
|
|
2601
2652
|
if (i >= buffer.byteLength)
|
|
2602
2653
|
throw new BSONError('Bad BSON Document: illegal CString');
|
|
2603
|
-
const name = isArray ? arrayIndex++ : ByteUtils.toUTF8(buffer
|
|
2654
|
+
const name = isArray ? arrayIndex++ : ByteUtils.toUTF8(buffer, index, i);
|
|
2604
2655
|
let shouldValidateKey = true;
|
|
2605
2656
|
if (globalUTFValidation || utf8KeysSet.has(name)) {
|
|
2606
2657
|
shouldValidateKey = validationSetting;
|
|
@@ -2815,7 +2866,7 @@ function deserializeObject(buffer, index, options, isArray = false) {
|
|
|
2815
2866
|
}
|
|
2816
2867
|
if (i >= buffer.length)
|
|
2817
2868
|
throw new BSONError('Bad BSON Document: illegal CString');
|
|
2818
|
-
const source = ByteUtils.toUTF8(buffer
|
|
2869
|
+
const source = ByteUtils.toUTF8(buffer, index, i);
|
|
2819
2870
|
index = i + 1;
|
|
2820
2871
|
i = index;
|
|
2821
2872
|
while (buffer[i] !== 0x00 && i < buffer.length) {
|
|
@@ -2823,7 +2874,7 @@ function deserializeObject(buffer, index, options, isArray = false) {
|
|
|
2823
2874
|
}
|
|
2824
2875
|
if (i >= buffer.length)
|
|
2825
2876
|
throw new BSONError('Bad BSON Document: illegal CString');
|
|
2826
|
-
const regExpOptions = ByteUtils.toUTF8(buffer
|
|
2877
|
+
const regExpOptions = ByteUtils.toUTF8(buffer, index, i);
|
|
2827
2878
|
index = i + 1;
|
|
2828
2879
|
const optionsArray = new Array(regExpOptions.length);
|
|
2829
2880
|
for (i = 0; i < regExpOptions.length; i++) {
|
|
@@ -2848,7 +2899,7 @@ function deserializeObject(buffer, index, options, isArray = false) {
|
|
|
2848
2899
|
}
|
|
2849
2900
|
if (i >= buffer.length)
|
|
2850
2901
|
throw new BSONError('Bad BSON Document: illegal CString');
|
|
2851
|
-
const source = ByteUtils.toUTF8(buffer
|
|
2902
|
+
const source = ByteUtils.toUTF8(buffer, index, i);
|
|
2852
2903
|
index = i + 1;
|
|
2853
2904
|
i = index;
|
|
2854
2905
|
while (buffer[i] !== 0x00 && i < buffer.length) {
|
|
@@ -2856,7 +2907,7 @@ function deserializeObject(buffer, index, options, isArray = false) {
|
|
|
2856
2907
|
}
|
|
2857
2908
|
if (i >= buffer.length)
|
|
2858
2909
|
throw new BSONError('Bad BSON Document: illegal CString');
|
|
2859
|
-
const regExpOptions = ByteUtils.toUTF8(buffer
|
|
2910
|
+
const regExpOptions = ByteUtils.toUTF8(buffer, index, i);
|
|
2860
2911
|
index = i + 1;
|
|
2861
2912
|
value = new BSONRegExp(source, regExpOptions);
|
|
2862
2913
|
}
|
|
@@ -2953,7 +3004,7 @@ function deserializeObject(buffer, index, options, isArray = false) {
|
|
|
2953
3004
|
throw new BSONError('Invalid UTF-8 string in BSON document');
|
|
2954
3005
|
}
|
|
2955
3006
|
}
|
|
2956
|
-
const namespace = ByteUtils.toUTF8(buffer
|
|
3007
|
+
const namespace = ByteUtils.toUTF8(buffer, index, index + stringSize - 1);
|
|
2957
3008
|
index = index + stringSize;
|
|
2958
3009
|
const oidBuffer = ByteUtils.allocate(12);
|
|
2959
3010
|
oidBuffer.set(buffer.subarray(index, index + 12), 0);
|
|
@@ -2993,7 +3044,7 @@ function deserializeObject(buffer, index, options, isArray = false) {
|
|
|
2993
3044
|
return object;
|
|
2994
3045
|
}
|
|
2995
3046
|
function getValidatedString(buffer, start, end, shouldValidateUtf8) {
|
|
2996
|
-
const value = ByteUtils.toUTF8(buffer
|
|
3047
|
+
const value = ByteUtils.toUTF8(buffer, start, end);
|
|
2997
3048
|
if (shouldValidateUtf8) {
|
|
2998
3049
|
for (let i = 0; i < value.length; i++) {
|
|
2999
3050
|
if (value.charCodeAt(i) === 0xfffd) {
|