Skip to content

Commit 6bbae54

Browse files
authored
Merge pull request #133 from fh1ch/fix/object-type-larger-512
fix(asn1): correct encoding of object-types > 512
2 parents 196ac4d + 3103ad5 commit 6bbae54

File tree

3 files changed

+20
-1
lines changed

3 files changed

+20
-1
lines changed

lib/asn1.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ const decodeEnumerated = module.exports.decodeEnumerated = (buffer, offset, lenV
8686
};
8787

8888
const encodeBacnetObjectId = module.exports.encodeBacnetObjectId = (buffer, objectType, instance) => {
89-
const value = ((objectType & baEnum.ASN1_MAX_OBJECT) << baEnum.ASN1_INSTANCE_BITS) | (instance & baEnum.ASN1_MAX_INSTANCE);
89+
const value = (((objectType & baEnum.ASN1_MAX_OBJECT) << baEnum.ASN1_INSTANCE_BITS) | (instance & baEnum.ASN1_MAX_INSTANCE)) >>> 0;
9090
encodeUnsigned(buffer, value, 4);
9191
};
9292

test/unit/asn1.spec.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,12 @@ describe('bacstack - ASN1 layer', () => {
3131
expect(result).to.deep.equal({len: 4, value: 4294967295});
3232
});
3333
});
34+
35+
describe('encodeBacnetObjectId', () => {
36+
it('should successfully encode with object-type > 512', () => {
37+
const buffer = {buffer: Buffer.alloc(4), offset: 0};
38+
baAsn1.encodeBacnetObjectId(buffer, 600, 600);
39+
expect(buffer).to.deep.equal({buffer: Buffer.from([150, 0, 2, 88]), offset: 4});
40+
});
41+
});
3442
});

test/unit/service-read-property.spec.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,17 @@ describe('bacstack - Services layer ReadProperty unit', () => {
1717
});
1818
});
1919

20+
it('should successfully encode and decode with object-tye > 512', () => {
21+
const buffer = utils.getBuffer();
22+
baServices.readProperty.encode(buffer, 630, 5, 12, 0xFFFFFFFF);
23+
const result = baServices.readProperty.decode(buffer.buffer, 0, buffer.offset);
24+
delete result.len;
25+
expect(result).to.deep.equal({
26+
objectId: {type: 630, instance: 5},
27+
property: {id: 12, index: 0xFFFFFFFF}
28+
});
29+
});
30+
2031
it('should successfully encode and decode with array index', () => {
2132
const buffer = utils.getBuffer();
2233
baServices.readProperty.encode(buffer, 4, 630, 85, 2);

0 commit comments

Comments
 (0)