Skip to content

Values greater than 255 can be written to a Buffer object position representing 1 byte #10

Description

@stephenwvickers

See: TritonDataCenter/node-asn1#6

@@ -233,14 +233,14 @@ Writer.prototype.writeLength = function(len) {
      this._buf[this._offset++] = len;
    } else if (len <= 0xffff) {
      this._buf[this._offset++] = 0x82;
 -    this._buf[this._offset++] = len >> 8;
 -    this._buf[this._offset++] = len;
 +    this._buf[this._offset++] = (len >> 8) & 0xff;
 +    this._buf[this._offset++] = len & 0xff;
    } else if (len <= 0xffffff) {
      this._shift(start, len, 1);
      this._buf[this._offset++] = 0x83;
 -    this._buf[this._offset++] = len >> 16;
 -    this._buf[this._offset++] = len >> 8;
 -    this._buf[this._offset++] = len;
 +    this._buf[this._offset++] = (len >> 16) & 0xff;
 +    this._buf[this._offset++] = (len >> 8) & 0xff;
 +    this._buf[this._offset++] = len & 0xff;
    } else {
      throw new InvalidAsn1ERror('Length too long (> 4 bytes)');
    }
 @@ -271,14 +271,14 @@ Writer.prototype.endSequence = function() {
      this._buf[seq + 1] = len;
    } else if (len <= 0xffff) {
      this._buf[seq] = 0x82;
 -    this._buf[seq + 1] = len >> 8;
 -    this._buf[seq + 2] = len;
 +    this._buf[seq + 1] = (len >> 8) & 0xff;
 +    this._buf[seq + 2] = len & 0xff;
    } else if (len <= 0xffffff) {
      this._shift(start, len, 1);
      this._buf[seq] = 0x83;
 -    this._buf[seq + 1] = len >> 16;
 -    this._buf[seq + 2] = len >> 8;
 -    this._buf[seq + 3] = len;
 +    this._buf[seq + 1] = (len >> 16) & 0xff;
 +    this._buf[seq + 2] = (len >> 8) & 0xff;
 +    this._buf[seq + 3] = len & 0xff;
    } else {
      throw new InvalidAsn1Error('Sequence too long');
    }

Metadata

Metadata

Labels

No labels
No labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions