fix(ConstTypes): size should be same as in type

This commit is contained in:
2025-08-04 18:43:08 +03:00
parent f25af1b6ac
commit b9d12b1945
7 changed files with 17 additions and 3 deletions

View File

@ -13,6 +13,9 @@ ConstArray.prototype.serialize = function(dv, src, ...inner_types) {
if (dv.byteLength < size * item_size) {
throw new Error('too small buffer')
}
if (src.length != size) {
throw new Error('array should be ' + size + ' elements length')
}
for (let i = 0; i < size; i++) {
const item_frame = new DataView(dv.buffer, dv.byteOffset + item_size * i)

View File

@ -10,6 +10,9 @@ ConstDataView.prototype.serialize = function(dv, src) {
if (dv.byteLength < this._size) {
throw new Error('too small buffer')
}
if (src.byteLength != this._size) {
throw new Error('buffer should be ' + this._size + ' bytes length')
}
memcpy(dv, src)
return
}

View File

@ -14,6 +14,9 @@ ConstString.prototype.serialize = function(dv, src) {
if (dv.byteLength < encoded.byteLength) {
throw new Error('too small buffer')
}
if (src.length != this._size) {
throw new Error('string should be ' + this._size + ' symbols length')
}
memcpy(dv, encoded)
return

View File

@ -14,6 +14,8 @@ describe(ConstArray.name, () => {
dv = sizedDataView(sizeof(ConstArray(2), Number))
expect(16).toEqual(dv.byteLength)
expect(() => serialize(dv, [1, 2, 3], ConstArray(2), Number)).toThrow()
serialize(dv, [1, 2], ConstArray(2), Number)
expectDataViewEqual(dv, expected)
})

View File

@ -13,6 +13,8 @@ describe(ConstDataView.name, () => {
actual = new DataView(buffer, 2, 2)
expect(() => serialize(actual, dv, ConstDataView(1))).toThrow()
serialize(actual, dv, ConstDataView(2))
expectDataViewEqual(new DataView(actual.buffer), expected)
})

View File

@ -10,7 +10,8 @@ describe(ConstString.name, () => {
dv = sizedDataView(5)
serialize(dv, 'hello', ConstString(3))
expect(() => serialize(dv, 'hello', ConstString(3))).toThrow()
serialize(dv, 'hel', ConstString(3))
expectDataViewEqual(dv, expected)
})

View File

@ -80,13 +80,13 @@ describe(Struct.name, () => {
const token = {
data: { name: 'sek1ro' },
header: { expires: 1 },
signature: sizedDataView(4),
signature: filledDataView([0xFF, 0xFF, 0xFF, 0xFF]),
}
const token_dv = filledDataView([
0x00, 0x00, 0x00, 0x10, // data_head
// header
0x3F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // header.expires
0x00, 0x00, 0x00, 0x00, // signature
0xFF, 0xFF, 0xFF, 0xFF, // signature
// data
0x00, 0x00, 0x00, 0x04, // data.name_head
// data.name