Skip to content

CborWriter.Reset does not clear _currentIndefiniteLengthStringRanges #121183

@vcsjones

Description

@vcsjones

CborWriter.Reset does not clear _currentIndefiniteLengthStringRanges.

A writer that is in convertIndefiniteLengthEncodings mode and has Reset called mid indefinite length encoding will improperly patch the next block of indefinite length encoding when trying to re-encode it as a definite length encoding.

using System.Formats.Cbor;

void Main()
{
   CborWriter writer = new(convertIndefiniteLengthEncodings: true);
// BEGIN
   writer.WriteStartIndefiniteLengthByteString();
   writer.WriteByteString([1, 2, 3]);
   
   writer.Reset();
// END
   writer.WriteStartIndefiniteLengthByteString();
   writer.WriteByteString([1, 2, 3]);
   writer.WriteEndIndefiniteLengthByteString();
   byte[] encoded = writer.Encode();
   Console.WriteLine(Convert.ToHexString(encoded));
}

This will throw for WriteEndIndefiniteLengthByteString. However, if the contents between BEGIN and END are removed entirely, then it will correctly encode.

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions