Skip to content

[BUG] "RangeError: Maximum call stack size exceeded" occurs when a schema includes type: BufferΒ #1608

@k1350

Description

@k1350

Summary:

When a schema includes type: Buffer and the byte length of the buffer is very long, the following error occurs when executing Model.get.

2023-06-02T02:33:35.358Z	36a19b32-d48b-4a57-a22d-9262ab32e0e5	ERROR	RangeError: Maximum call stack size exceeded
    at /var/task/index.js:8644:23
    at Array.reduce (<anonymous>)
    at Object.main2 [as entries] (/var/task/index.js:8639:37)
    at Item.fromDynamo (/var/task/index.js:9443:32)

In my environment, an error occurs when the result of Buffer.byteLength is greater than 105730.

Code sample:

export interface TestSchema extends Item, TestSchemaAttributes {}
export interface TestSchemaAttributes {
  id: string;
  sk: string;
  content: Buffer;
}
export const TestSchemaDefinition: SchemaDefinition = {
  uid: {
    type: String,
    required: true,
    hashKey: true,
  },
  sk: {
    type: String,
    required: true,
    rangeKey: true,
  },
  content: {
    type: Buffer,
    required: true,
  },
};

const model = dynamoose.model<TestSchema>(
    "TestSchemaTable",
    [new dynamoose.Schema(TestSchemaDefinition)],
    {
      create: false,
      waitForActive: { enabled: false },
      throughput: "ON_DEMAND",
    }
  );

await model.get({id: "id", sk: "sk}); // `RangeError: Maximum call stack size exceeded` occurs when "content" is very large.

Current output and behavior (including stack trace):

RangeError: Maximum call stack size exceeded occurs.

2023-06-02T02:33:35.358Z	36a19b32-d48b-4a57-a22d-9262ab32e0e5	ERROR	RangeError: Maximum call stack size exceeded
    at /var/task/index.js:8644:23
    at Array.reduce (<anonymous>)
    at Object.main2 [as entries] (/var/task/index.js:8639:37)
    at Item.fromDynamo (/var/task/index.js:9443:32)
    at new Item (/var/task/index.js:9425:63)
    at new TestSchema (/var/task/index.js:12852:13)
    at itemify (/var/task/index.js:13359:35)

Expected output and behavior:

No error occurs.

Environment:

Operating System: Amazon Linux 2 (AWS Lambda)
Node.js version (node -v): 18x
Dynamoose version: 3.2.0

Other information (if applicable):

Other:

  • I have read through the Dynamoose documentation before posting this issue
  • I have searched through the GitHub issues (including closed issues) and pull requests to ensure this issue has not already been raised before
  • I have searched the internet and Stack Overflow to ensure this issue hasn't been raised or answered before
  • I have tested the code provided and am confident it doesn't work as intended
  • I have filled out all fields above
  • I am running the latest version of Dynamoose

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions