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) { if (dv.byteLength < size * item_size) {
throw new Error('too small buffer') 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++) { for (let i = 0; i < size; i++) {
const item_frame = new DataView(dv.buffer, dv.byteOffset + item_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) { if (dv.byteLength < this._size) {
throw new Error('too small buffer') throw new Error('too small buffer')
} }
if (src.byteLength != this._size) {
throw new Error('buffer should be ' + this._size + ' bytes length')
}
memcpy(dv, src) memcpy(dv, src)
return return
} }

View File

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

View File

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

View File

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

View File

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

View File

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