kriszyp / msgpackr

Ultra-fast MessagePack implementation with extension for record and structural cloning / msgpack.org[JavaScript/NodeJS]

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Unpack failed when `structuredClone: true` and `bundleStrings: true`

yume-chan opened this issue · comments

Repro:

const { Packr } = require('msgpackr')

const packer = new Packr({
  structuredClone: true, // both options must be enabled
  bundleStrings: true,
});

const v = {};

const shared = {
  aaaa: v, // any key length >= 4
  b: v,
};

console.log(packer.pack(shared).toString('base64'))

console.log(packer.unpack(packer.pack(shared)));

Actual:

<project_folder>\node_modules\msgpackr\dist\node.cjs:220
                throw error
                ^

Error: Expected string
    at readOnlyJSString (<project_folder>\node_modules\msgpackr\dist\node.cjs:848:11)
    at Array.currentExtensions.<computed> (<project_folder>\node_modules\msgpackr\dist\node.cjs:1028:20)
    at readExt (<project_folder>\node_modules\msgpackr\dist\node.cjs:865:33)
    at read (<project_folder>\node_modules\msgpackr\dist\node.cjs:417:12)
    at read (<project_folder>\node_modules\msgpackr\dist\node.cjs:271:16)
    at recordDefinition (<project_folder>\node_modules\msgpackr\dist\node.cjs:953:15)
    at read (<project_folder>\node_modules\msgpackr\dist\node.cjs:392:13)
    at checkedRead (<project_folder>\node_modules\msgpackr\dist\node.cjs:193:13)
    at Packr.unpack (<project_folder>\node_modules\msgpackr\dist\node.cjs:103:12)
    at Object.<anonymous> (<project_folder>\index.js:17:20)

Node version: v16.17.0
msgpackr version: 1.7.0

Published a fix in 1.7.1.

Fix verified in 1.7.1, thanks!

Sorry for reopening, 1.7.1 has a regression on this case, it used to work in 1.7.0:

const { Packr } = require('msgpackr')

const packer = new Packr({
  structuredClone: true, // both options must be enabled
  bundleStrings: true,
});

const shared = {};
shared.aaaa = shared; // key length >= 4

packer.unpack(packer.pack(shared));
<project_folder>\msgpackr\dist\node.cjs:220
                throw error
                ^

Error: Expected string
    at readOnlyJSString (<project_folder>\msgpackr\dist\node.cjs:848:11)
    at Array.currentExtensions.<computed> (<project_folder>\msgpackr\dist\node.cjs:1028:20)
    at readExt (<project_folder>\msgpackr\dist\node.cjs:865:33)
    at read (<project_folder>\msgpackr\dist\node.cjs:417:12)
    at read (<project_folder>\msgpackr\dist\node.cjs:271:16)
    at recordDefinition (<project_folder>\msgpackr\dist\node.cjs:953:15)
    at read (<project_folder>\msgpackr\dist\node.cjs:392:13)
    at Array.currentExtensions.<computed> (<project_folder>\msgpackr\dist\node.cjs:991:25)
    at readExt (<project_folder>\msgpackr\dist\node.cjs:865:33)
    at read (<project_folder>\msgpackr\dist\node.cjs:417:12) {
  incomplete: true
}

8b020f0 on master branch still fails.

Should be fixed in v1.7.2, let me know if you see any issues with it.

I don't see any issues now. Thanks again!