Skip to content

cbor: STRINGREF String reference outside of a namespace #669

@ajafff

Description

@ajafff

Tested with 3.0.4 and 3.1.0

Minimal repro:

import static org.assertj.core.api.Assertions.assertThat;

import java.util.List;
import org.junit.jupiter.api.Test;
import tools.jackson.dataformat.cbor.CBORMapper;
import tools.jackson.dataformat.cbor.CBORWriteFeature;

public class CborMapperTest {

    private final CBORMapper mapper = CBORMapper.builder().enable(CBORWriteFeature.STRINGREF).build();

    @Test
    public void test() {
        var original = List.of("foo", "foo");
        var serialized = this.mapper.writeValueAsBytes(original);
        var deserialized = this.mapper.readValue(serialized, List.class);
        assertThat(deserialized).isEqualTo(original);
    }
}

Produces the following error:

String reference outside of a namespace
 at [Source: (byte[])[8 bytes]; byte offset: #8]
tools.jackson.core.exc.StreamReadException: String reference outside of a namespace
 at [Source: (byte[])[8 bytes]; byte offset: #8]
	at tools.jackson.core.JsonParser._constructReadException(JsonParser.java:1812)
	at tools.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:1154)
	at tools.jackson.dataformat.cbor.CBORParser._handleTaggedInt(CBORParser.java:816)
	at tools.jackson.dataformat.cbor.CBORParser.nextToken(CBORParser.java:612)
	at tools.jackson.databind.deser.jdk.CollectionDeserializer._deserializeFromArray(CollectionDeserializer.java:380)
	at tools.jackson.databind.deser.jdk.CollectionDeserializer.deserialize(CollectionDeserializer.java:279)
	at tools.jackson.databind.deser.jdk.CollectionDeserializer.deserialize(CollectionDeserializer.java:30)
	at tools.jackson.databind.deser.DeserializationContextExt.readRootValue(DeserializationContextExt.java:266)
	at tools.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:2639)
	at tools.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:1649)

Not sure if this is an issue in the Parser or Writer, but either way, I would expect it to round-trip without an error.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions