-
Notifications
You must be signed in to change notification settings - Fork 1.4k
Open
Description
Minimal code to reproduce:
import {Field, Message} from 'protobufjs';
export class DataPacketCacheDto extends Message<DataPacketCacheDto> {
@Field.d(1, 'float')
f: number;
@Field.d(2, 'int32')
f2: number;
@Field.d(3, 'int32')
f3: number;
}
const message = new DataPacketCacheDto({
f: 1097.300048828125,
f2: 1.793662034335766e-43,
f3: -2.0975153105823492e-14,
});
const buffer = Buffer.from(DataPacketCacheDto.encode(message).finish());
console.log(buffer.toString('hex'));
const decodedPacket: DataPacketCacheDto = (DataPacketCacheDto.toObject(DataPacketCacheDto.decode(buffer as Buffer), {
defaults: true,
}) as DataPacketCacheDto);
console.log(decodedPacket);Expected result:
Error: invalid wire type
Actual result
Every run outputs a different result:
- Trying to encode results in error:
throw Error("invalid wire type " + wireType + " at offset " + this.pos);
^
Error: invalid wire type 4 at offset 11
- Some runs manage to encode message into a buffer, but the buffer can't be decoded:
0d9a298944100018008ab8346c0100008891
E:\Projects\protobuf_test\node_modules\protobufjs\src\reader.js:13
return RangeError("index out of range: " + reader.pos + " + " + (writeLength || 1) + " > " + reader.len)
;
^
RangeError: index out of range: 13 + 108 > 18
- Other times decoding the buffer succeeds but, field values aren't the same as before encodingOutput:
0d9a2989441000180000000034090000c8c0
{ f: -6.25, f2: 0, f3: 0 }
Observations:
- positive float are rounded;
- buffer is simingly random;
- indexes in error messages are random;
package.json
{
"dependencies": {
"protobufjs": "7.5.4"
},
"devDependencies": {
"ts-node": "9.1.1",
"typescript": "4.2.3"
}
}
tsconfig.json
{
"compilerOptions": {
"module": "commonjs",
"declaration": true,
"removeComments": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"allowSyntheticDefaultImports": true,
"target": "es2017",
"sourceMap": true,
"outDir": "./dist",
"baseUrl": "./",
"incremental": true,
"paths": {}
},
"exclude": ["node_modules", "dist"]
}
Metadata
Metadata
Assignees
Labels
No labels