Skip to content

RangeError: Attempt to access memory outside buffer bounds #490

Description

@cyans-nya

Defintions here: https://github.com/CyanChanges/pastebin_but_github/blob/163d015645f6ef71a2ebd43abd18d91e2d6e9663/avsc_1.ts

trying to serialize with toBuffer()

ObjectSchema.toBuffer({
      "downloads": {
        "lastMonth": 124
      },
      "dependents": 0,
      "category": "other",
      "createdAt": "2022-03-16T09:45:31.652Z",
      "updatedAt": "2022-05-07T11:11:38.682Z",
      "updated": "2022-05-07T11:11:38.682Z",
      "verified": false,
      "insecure": false,
      "portable": false,
      "package": {
        "name": "koishi-plugin-chinfo",
        "keywords": [
          "chatbot",
          "koishi",
          "plugin",
          "Koishi.js"
        ],
        "version": "1.0.0",
        "description": "Show infos of a channel",
        "publisher": {
          "name": "constasj",
          "email": "2020212726@qq.com"
        },
        "maintainers": [
          {
            "name": "constasj",
            "email": "2020212726@qq.com"
          }
        ],
        "license": "MIT",
        "date": "2022-03-16T09:45:31.807Z",
        "links": {
          "npm": "https://www.npmjs.com/koishi-plugin-chinfo"
        },
        "contributors": []
      },
      "flags": {
        "insecure": 0
      },
      "manifest": {
        "public": [],
        "service": {
          "required": [],
          "optional": [],
          "implements": []
        },
        "locales": [],
        "description": "Show infos of a channel"
      },
      "publishSize": 1064
})

that throws following error:

Uncaught RangeError: Attempt to access memory outside buffer bounds
    at boundsError (ext:deno_node/internal/buffer.mjs:2383:11)
    at readUInt24LE (ext:deno_node/internal/buffer.mjs:1872:5)
    at Uint8Array.readUIntLE (ext:deno_node/internal/buffer.mjs:1016:12)
    at Tap.packLongBytes (file:///home/cyan/.cache/deno/npm/registry.npmjs.org/avsc/5.7.7/lib/utils.js:892:9)
    at AbstractLongType._write (file:///home/cyan/.cache/deno/npm/registry.npmjs.org/avsc/5.7.7/lib/types.js:2754:9)
    at UnwrappedUnionType._write (file:///home/cyan/.cache/deno/npm/registry.npmjs.org/avsc/5.7.7/lib/types.js:1329:23)
    at RecordType.writeObject [as _write] (eval at RecordType._createWriter (file:///home/cyan/.cache/deno/npm/registry.npmjs.org/avsc/5.7.7/lib/types.js:2343:10), <anonymous>:8:6)
    at RecordType.Type.toBuffer (file:///home/cyan/.cache/deno/npm/registry.npmjs.org/avsc/5.7.7/lib/types.js:658:8)
    at <anonymous>:1:35

Activity

  1. mtth commented on Feb 5, 2025

    @mtth
    Owner

    Hi @CyanChanges. avsc currently relies on node's buffers ignoring out-of-bound writes. This is used to optimize buffer size computation when the original buffer is too small. I haven't used deno, but from the stack trace it looks like it behaves differently?

    You should be able to work around this by preemptively increasing the size of the underlying buffer:

    avro.Type.__reset(1 << 20);

    Alternatively you can use type.encode and pass in an adequately sized buffer explicitly.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions