Skip to content

Commit 80d58e7

Browse files
committed
Throw on un-aligned bit arrays
1 parent 2fc3226 commit 80d58e7

File tree

2 files changed

+6
-5
lines changed

2 files changed

+6
-5
lines changed

compiler-core/templates/prelude.mjs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -298,6 +298,8 @@ export const BitArray$BitArray = (buffer, bitSize, bitOffset) =>
298298
new BitArray(buffer, bitSize, bitOffset);
299299
export const BitArray$isBitArray = (value) => value instanceof BitArray;
300300
export const BitArray$BitArray$data = (bitArray) => {
301+
if (bitArray.bitSize % 8 !== 0)
302+
throw new Error("BitArray$BitArray$data called on un-aligned bit array");
301303
const array = bitArray.rawBuffer;
302304
return new DataView(array.buffer, array.byteOffest, bitArray.byteLength);
303305
};
@@ -496,7 +498,7 @@ export function bitArraySliceToInt(
496498

497499
// Handle the case of the slice being completely contained in a single byte
498500
if (startByteIndex == endByteIndex) {
499-
const mask = 0xff >> start % 8;
501+
const mask = 0xff >> (start % 8);
500502
const unusedLowBitCount = (8 - (end % 8)) % 8;
501503

502504
let value =

test/javascript_prelude/main.mjs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1213,10 +1213,9 @@ assert(
12131213
assertEqual(bitArray.byteSize, 3);
12141214
assertEqual(bitArray.bitOffset, 1);
12151215
assertEqual(bitArray.rawBuffer, new Uint8Array([1, 2, 3]));
1216-
assertEqual(
1217-
BitArray$BitArray$data(bitArray),
1218-
new DataView(new Uint8Array([1, 2, 3]).buffer),
1219-
);
1216+
assertThrows("BitArray$BitArray$data of un-aligned bit array", () => {
1217+
BitArray$BitArray$data(bitArray);
1218+
});
12201219
}
12211220

12221221
assertEqual(

0 commit comments

Comments
 (0)