stellar / js-stellar-base

The lowest-level stellar helper library. It consists of classes to read, write, hash, and sign Stellar xdr
https://stellar.github.io/js-stellar-base/
Apache License 2.0
108 stars 137 forks source link

Add Buffer.from checkSum to fix buffer concat could fail #746

Closed jiqiang90 closed 6 months ago

jiqiang90 commented 6 months ago

Hi team, we are running stellar code in a sandbox, and in our production env we are prohibit to inject any additional modules into this sandbox.

In following code you can see we try to get .publicKey() from a keypair, this will throw an error Failed to execute script. TypeError [ERR_INVALID_ARG_TYPE]: The "list[1]" argument must be an instance of Buffer or Uint8Array. Received an instance of Object, this is due to in sandbox env could not identify Unit8Array so it been treated as an object here.


const {NodeVM, VMScript} = require('vm2');
const {Keypair} = require('@stellar/stellar-base')

const vm = new NodeVM({
    require: {
        builtin: ['crypto'],
        external: true,
        context: 'sandbox',
        resolve: (moduleName) => {
            return require.resolve(moduleName, {paths: ['./']});
        },
    },
    wrapper: 'commonjs',
    sourceExtensions: ['js', 'cjs'],
});

try {
    vm.run(`
        const {Keypair} = require('@stellar/stellar-base')
        const sourceKeypair = Keypair.fromSecret(
            "SCQN3XGRO65BHNSWLSHYIR4B65AHLDUQ7YLHGIWQ4677AZFRS77TCZRB"
        );
        console.log(sourceKeypair.publicKey())
    `);
} catch (err) {
    console.error('Failed to execute script.', err);
}

We require minimal change within this pr, so it could still concat with Buffer. Thank you ~