Skip to content

Got NegativeArraySizeException when calling writeValueAsString() #1012

Closed
@klettier

Description

@klettier

Hi,

I'm serializing an object containing 15M values

  • Jackson version: 2.14.2

Stack trace

java.lang.NegativeArraySizeException: -1649955036
	at java.base/java.lang.AbstractStringBuilder.<init>(AbstractStringBuilder.java:86)
	at java.base/java.lang.StringBuilder.<init>(StringBuilder.java:116)
	at com.fasterxml.jackson.core.util.TextBuffer.contentsAsString(TextBuffer.java:455)
	at com.fasterxml.jackson.core.io.SegmentedStringWriter.getAndClear(SegmentedStringWriter.java:85)
	at com.fasterxml.jackson.databind.ObjectMapper.writeValueAsString(ObjectMapper.java:3875)

Looks like an int overflow somewhere in TextBuffer 👀

Minimal test case that reproduce the issue

  data class MyData(
      @JsonProperty("foo")
      val foo: Collection<Item> = emptyList(),

      @JsonProperty("bar")
      val bar: Collection<Item> = emptyList(),
  )

  data class Item(
      @JsonProperty("id")
      val id: String,

      @JsonProperty("value")
      val value: String,
  )

  @Test
  fun overflow() {
      val report = MyData(
          foo = (1..5_000_000).map { Item(UUID.randomUUID().toString(), UUID.randomUUID().toString()) },
          bar = (1..10_000_000).map {
              Item(
                  "foo=${UUID.randomUUID()}bar=${UUID.randomUUID()},barbar=${UUID.randomUUID()}",
                  UUID.randomUUID().toString(),
              )
          },
      )

      jacksonObjectMapper().writeValueAsString(report)
  }

Result

image

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions