Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Errors caused by different go versions #446

Open
17337162621254271304 opened this issue Nov 24, 2022 · 3 comments
Open

Errors caused by different go versions #446

17337162621254271304 opened this issue Nov 24, 2022 · 3 comments

Comments

@17337162621254271304
Copy link

17337162621254271304 commented Nov 24, 2022

This is my code. It is normal in version 1.18.1, but there is a problem in version 1.18.7

vm := otto.New()
_, err := vm.Run(js)
key:="488,853,642"
k, err := vm.Call("func_get_k", nil, key, 32)

The result of 1.18.1 is as follows: d11e9c49e54677f584c5f8fa5e132a7d
The result of 1.18.7 is as follows: 00000000000000000000000000000000

This is "js"code:

function func_get_k(string, bit) {
    function func_get_k_RotateLeft(lValue, iShiftBits) {
        return (lValue << iShiftBits) | (lValue >>> (32 - iShiftBits));
    }

    function func_get_k_mGr51T5WIX(lX, lY) {
        var lX4, lY4, lX8, lY8, lResult;
        lX8 = (lX & 0x80000000);
        lY8 = (lY & 0x80000000);
        lX4 = (lX & 0x40000000);
        lY4 = (lY & 0x40000000);
        lResult = (lX & 0x3FFFFFFF) + (lY & 0x3FFFFFFF);
        if (lX4 & lY4) {
            return (lResult ^ 0x80000000 ^ lX8 ^ lY8);
        }
        if (lX4 | lY4) {
            if (lResult & 0x40000000) {
                return (lResult ^ 0xC0000000 ^ lX8 ^ lY8);
            } else {
                return (lResult ^ 0x40000000 ^ lX8 ^ lY8);
            }
        } else {
            return (lResult ^ lX8 ^ lY8);
        }
    }

    function func_get_k_F(x, y, z) {
        return (x & y) | ((~x) & z);
    }

    function func_get_k_G(x, y, z) {
        return (x & z) | (y & (~z));
    }

    function func_get_k_H(x, y, z) {
        return (x ^ y ^ z);
    }

    function func_get_k_I(x, y, z) {
        return (y ^ (x | (~z)));
    }

    function func_get_k_FF(a, b, c, d, x, s, ac) {
        a = func_get_k_mGr51T5WIX(a, func_get_k_mGr51T5WIX(func_get_k_mGr51T5WIX(func_get_k_F(b, c, d), x), ac));
        return func_get_k_mGr51T5WIX(func_get_k_RotateLeft(a, s), b);
    };

    function func_get_k_GG(a, b, c, d, x, s, ac) {
        a = func_get_k_mGr51T5WIX(a, func_get_k_mGr51T5WIX(func_get_k_mGr51T5WIX(func_get_k_G(b, c, d), x), ac));
        return func_get_k_mGr51T5WIX(func_get_k_RotateLeft(a, s), b);
    };

    function func_get_k_HH(a, b, c, d, x, s, ac) {
        a = func_get_k_mGr51T5WIX(a, func_get_k_mGr51T5WIX(func_get_k_mGr51T5WIX(func_get_k_H(b, c, d), x), ac));
        return func_get_k_mGr51T5WIX(func_get_k_RotateLeft(a, s), b);
    };

    function func_get_k_II(a, b, c, d, x, s, ac) {
        a = func_get_k_mGr51T5WIX(a, func_get_k_mGr51T5WIX(func_get_k_mGr51T5WIX(func_get_k_I(b, c, d), x), ac));
        return func_get_k_mGr51T5WIX(func_get_k_RotateLeft(a, s), b);
    };

    function func_get_k_ConvertToWordArray(string) {
        var lWordCount;
        var lMessageLength = string.length;
        var lNumberOfWords_temp1 = lMessageLength + 8;
        var lNumberOfWords_temp2 = (lNumberOfWords_temp1 - (lNumberOfWords_temp1 % 64)) / 64;
        var lNumberOfWords = (lNumberOfWords_temp2 + 1) * 16;
        var lWordArray = Array(lNumberOfWords - 1);
        var lBytePosition = 0;
        var lByteCount = 0;
        while (lByteCount < lMessageLength) {
            lWordCount = (lByteCount - (lByteCount % 4)) / 4;
            lBytePosition = (lByteCount % 4) * 8;
            lWordArray[lWordCount] = (lWordArray[lWordCount] | (string.charCodeAt(lByteCount) << lBytePosition));
            lByteCount++;
        }
        lWordCount = (lByteCount - (lByteCount % 4)) / 4;
        lBytePosition = (lByteCount % 4) * 8;
        lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80 << lBytePosition);
        lWordArray[lNumberOfWords - 2] = lMessageLength << 3;
        lWordArray[lNumberOfWords - 1] = lMessageLength >>> 29;
        return lWordArray;
    };

    function func_get_k_WordToHex(lValue) {
        var WordToHexValue = "", WordToHexValue_temp = "", lByte, lCount;
        for (lCount = 0; lCount <= 3; lCount++) {
            lByte = (lValue >>> (lCount * 8)) & 255;
            WordToHexValue_temp = "0" + lByte.toString(16);
            WordToHexValue = WordToHexValue + WordToHexValue_temp.substr(WordToHexValue_temp.length - 2, 2);
        }
        return WordToHexValue;
    };

    function func_get_k_FcCSRiu0tp(string) {
        string = string.replace(/\r\n/g, "\n");
        var utftext = "";
        for (var n = 0; n < string.length; n++) {
            var c = string.charCodeAt(n);
            if (c < 128) {
                utftext += String.fromCharCode(c);
            } else if ((c > 127) && (c < 2048)) {
                utftext += String.fromCharCode((c >> 6) | 192);
                utftext += String.fromCharCode((c & 63) | 128);
            } else {
                utftext += String.fromCharCode((c >> 12) | 224);
                utftext += String.fromCharCode(((c >> 6) & 63) | 128);
                utftext += String.fromCharCode((c & 63) | 128);
            }
        }
        return utftext;
    };
    var x = Array();
    var k, AA, BB, CC, DD, a, b, c, d;
    var S11 = 7, S12 = 12, S13 = 17, S14 = 22;
    var S21 = 5, S22 = 9, S23 = 14, S24 = 20;
    var S31 = 4, S32 = 11, S33 = 16, S34 = 23;
    var S41 = 6, S42 = 10, S43 = 15, S44 = 21;
    string = func_get_k_FcCSRiu0tp(string);
    x = func_get_k_ConvertToWordArray(string);
    a = 0x67452301;
    b = 0xEFCDAB89;
    c = 0x98BADCFE;
    d = 0x10325476;
    for (k = 0; k < x.length; k += 16) {
        AA = a;
        BB = b;
        CC = c;
        DD = d;
        a = func_get_k_FF(a, b, c, d, x[k + 0], S11, 0xD76AA478);
        d = func_get_k_FF(d, a, b, c, x[k + 1], S12, 0xE8C7B756);
        c = func_get_k_FF(c, d, a, b, x[k + 2], S13, 0x242070DB);
        b = func_get_k_FF(b, c, d, a, x[k + 3], S14, 0xC1BDCEEE);
        a = func_get_k_FF(a, b, c, d, x[k + 4], S11, 0xF57C0FAF);
        d = func_get_k_FF(d, a, b, c, x[k + 5], S12, 0x4787C62A);
        c = func_get_k_FF(c, d, a, b, x[k + 6], S13, 0xA8304613);
        b = func_get_k_FF(b, c, d, a, x[k + 7], S14, 0xFD469501);
        a = func_get_k_FF(a, b, c, d, x[k + 8], S11, 0x698098D8);
        d = func_get_k_FF(d, a, b, c, x[k + 9], S12, 0x8B44F7AF);
        c = func_get_k_FF(c, d, a, b, x[k + 10], S13, 0xFFFF5BB1);
        b = func_get_k_FF(b, c, d, a, x[k + 11], S14, 0x895CD7BE);
        a = func_get_k_FF(a, b, c, d, x[k + 12], S11, 0x6B901122);
        d = func_get_k_FF(d, a, b, c, x[k + 13], S12, 0xFD987193);
        c = func_get_k_FF(c, d, a, b, x[k + 14], S13, 0xA679438E);
        b = func_get_k_FF(b, c, d, a, x[k + 15], S14, 0x49B40821);
        a = func_get_k_GG(a, b, c, d, x[k + 1], S21, 0xF61E2562);
        d = func_get_k_GG(d, a, b, c, x[k + 6], S22, 0xC040B340);
        c = func_get_k_GG(c, d, a, b, x[k + 11], S23, 0x265E5A51);
        b = func_get_k_GG(b, c, d, a, x[k + 0], S24, 0xE9B6C7AA);
        a = func_get_k_GG(a, b, c, d, x[k + 5], S21, 0xD62F105D);
        d = func_get_k_GG(d, a, b, c, x[k + 10], S22, 0x2441453);
        c = func_get_k_GG(c, d, a, b, x[k + 15], S23, 0xD8A1E681);
        b = func_get_k_GG(b, c, d, a, x[k + 4], S24, 0xE7D3FBC8);
        a = func_get_k_GG(a, b, c, d, x[k + 9], S21, 0x21E1CDE6);
        d = func_get_k_GG(d, a, b, c, x[k + 14], S22, 0xC33707D6);
        c = func_get_k_GG(c, d, a, b, x[k + 3], S23, 0xF4D50D87);
        b = func_get_k_GG(b, c, d, a, x[k + 8], S24, 0x455A14ED);
        a = func_get_k_GG(a, b, c, d, x[k + 13], S21, 0xA9E3E905);
        d = func_get_k_GG(d, a, b, c, x[k + 2], S22, 0xFCEFA3F8);
        c = func_get_k_GG(c, d, a, b, x[k + 7], S23, 0x676F02D9);
        b = func_get_k_GG(b, c, d, a, x[k + 12], S24, 0x8D2A4C8A);
        a = func_get_k_HH(a, b, c, d, x[k + 5], S31, 0xFFFA3942);
        d = func_get_k_HH(d, a, b, c, x[k + 8], S32, 0x8771F681);
        c = func_get_k_HH(c, d, a, b, x[k + 11], S33, 0x6D9D6122);
        b = func_get_k_HH(b, c, d, a, x[k + 14], S34, 0xFDE5380C);
        a = func_get_k_HH(a, b, c, d, x[k + 1], S31, 0xA4BEEA44);
        d = func_get_k_HH(d, a, b, c, x[k + 4], S32, 0x4BDECFA9);
        c = func_get_k_HH(c, d, a, b, x[k + 7], S33, 0xF6BB4B60);
        b = func_get_k_HH(b, c, d, a, x[k + 10], S34, 0xBEBFBC70);
        a = func_get_k_HH(a, b, c, d, x[k + 13], S31, 0x289B7EC6);
        d = func_get_k_HH(d, a, b, c, x[k + 0], S32, 0xEAA127FA);
        c = func_get_k_HH(c, d, a, b, x[k + 3], S33, 0xD4EF3085);
        b = func_get_k_HH(b, c, d, a, x[k + 6], S34, 0x4881D05);
        a = func_get_k_HH(a, b, c, d, x[k + 9], S31, 0xD9D4D039);
        d = func_get_k_HH(d, a, b, c, x[k + 12], S32, 0xE6DB99E5);
        c = func_get_k_HH(c, d, a, b, x[k + 15], S33, 0x1FA27CF8);
        b = func_get_k_HH(b, c, d, a, x[k + 2], S34, 0xC4AC5665);
        a = func_get_k_II(a, b, c, d, x[k + 0], S41, 0xF4292244);
        d = func_get_k_II(d, a, b, c, x[k + 7], S42, 0x432AFF97);
        c = func_get_k_II(c, d, a, b, x[k + 14], S43, 0xAB9423A7);
        b = func_get_k_II(b, c, d, a, x[k + 5], S44, 0xFC93A039);
        a = func_get_k_II(a, b, c, d, x[k + 12], S41, 0x655B59C3);
        d = func_get_k_II(d, a, b, c, x[k + 3], S42, 0x8F0CCC92);
        c = func_get_k_II(c, d, a, b, x[k + 10], S43, 0xFFEFF47D);
        b = func_get_k_II(b, c, d, a, x[k + 1], S44, 0x85845DD1);
        a = func_get_k_II(a, b, c, d, x[k + 8], S41, 0x6FA87E4F);
        d = func_get_k_II(d, a, b, c, x[k + 15], S42, 0xFE2CE6E0);
        c = func_get_k_II(c, d, a, b, x[k + 6], S43, 0xA3014314);
        b = func_get_k_II(b, c, d, a, x[k + 13], S44, 0x4E0811A1);
        a = func_get_k_II(a, b, c, d, x[k + 4], S41, 0xF7537E82);
        d = func_get_k_II(d, a, b, c, x[k + 11], S42, 0xBD3AF235);
        c = func_get_k_II(c, d, a, b, x[k + 2], S43, 0x2AD7D2BB);
        b = func_get_k_II(b, c, d, a, x[k + 9], S44, 0xEB86D391);
        a = func_get_k_mGr51T5WIX(a, AA);
        b = func_get_k_mGr51T5WIX(b, BB);
        c = func_get_k_mGr51T5WIX(c, CC);
        d = func_get_k_mGr51T5WIX(d, DD);
    }
    if (bit == 32) {
        return (func_get_k_WordToHex(a) + func_get_k_WordToHex(b) + func_get_k_WordToHex(c) + func_get_k_WordToHex(d)).toLowerCase();
    }
    return (func_get_k_WordToHex(b) + func_get_k_WordToHex(c)).toLowerCase();
}
@stevenh
Copy link
Collaborator

stevenh commented Nov 25, 2022

I just tested this with go 1.18.7 and I get d11e9c49e54677f584c5f8fa5e132a7d.

Here's the test I used:

package otto

import (
        "fmt"
        "testing"

        "github.com/stretchr/testify/require"
)

var issue446JS = `function func_get_k(string, bit) {
    function func_get_k_RotateLeft(lValue, iShiftBits) {
        return (lValue << iShiftBits) | (lValue >>> (32 - iShiftBits));
    }

    function func_get_k_mGr51T5WIX(lX, lY) {
        var lX4, lY4, lX8, lY8, lResult;
        lX8 = (lX & 0x80000000);
        lY8 = (lY & 0x80000000);
        lX4 = (lX & 0x40000000);
        lY4 = (lY & 0x40000000);
        lResult = (lX & 0x3FFFFFFF) + (lY & 0x3FFFFFFF);
        if (lX4 & lY4) {
            return (lResult ^ 0x80000000 ^ lX8 ^ lY8);
        }
        if (lX4 | lY4) {
            if (lResult & 0x40000000) {
                return (lResult ^ 0xC0000000 ^ lX8 ^ lY8);
            } else {
                return (lResult ^ 0x40000000 ^ lX8 ^ lY8);
            }
        } else {
            return (lResult ^ lX8 ^ lY8);
        }
    }

    function func_get_k_F(x, y, z) {
        return (x & y) | ((~x) & z);
    }

    function func_get_k_G(x, y, z) {
        return (x & z) | (y & (~z));
    }

    function func_get_k_H(x, y, z) {
        return (x ^ y ^ z);
    }

    function func_get_k_I(x, y, z) {
        return (y ^ (x | (~z)));
    }

    function func_get_k_FF(a, b, c, d, x, s, ac) {
        a = func_get_k_mGr51T5WIX(a, func_get_k_mGr51T5WIX(func_get_k_mGr51T5WIX(func_get_k_F(b, c, d), x), ac));
        return func_get_k_mGr51T5WIX(func_get_k_RotateLeft(a, s), b);
    };

    function func_get_k_GG(a, b, c, d, x, s, ac) {
        a = func_get_k_mGr51T5WIX(a, func_get_k_mGr51T5WIX(func_get_k_mGr51T5WIX(func_get_k_G(b, c, d), x), ac));
        return func_get_k_mGr51T5WIX(func_get_k_RotateLeft(a, s), b);
    };

    function func_get_k_HH(a, b, c, d, x, s, ac) {
        a = func_get_k_mGr51T5WIX(a, func_get_k_mGr51T5WIX(func_get_k_mGr51T5WIX(func_get_k_H(b, c, d), x), ac));
        return func_get_k_mGr51T5WIX(func_get_k_RotateLeft(a, s), b);
    };

    function func_get_k_II(a, b, c, d, x, s, ac) {
        a = func_get_k_mGr51T5WIX(a, func_get_k_mGr51T5WIX(func_get_k_mGr51T5WIX(func_get_k_I(b, c, d), x), ac));
        return func_get_k_mGr51T5WIX(func_get_k_RotateLeft(a, s), b);
    };

    function func_get_k_ConvertToWordArray(string) {
        var lWordCount;
        var lMessageLength = string.length;
        var lNumberOfWords_temp1 = lMessageLength + 8;
        var lNumberOfWords_temp2 = (lNumberOfWords_temp1 - (lNumberOfWords_temp1 % 64)) / 64;
        var lNumberOfWords = (lNumberOfWords_temp2 + 1) * 16;
        var lWordArray = Array(lNumberOfWords - 1);
        var lBytePosition = 0;
        var lByteCount = 0;
        while (lByteCount < lMessageLength) {
            lWordCount = (lByteCount - (lByteCount % 4)) / 4;
            lBytePosition = (lByteCount % 4) * 8;
            lWordArray[lWordCount] = (lWordArray[lWordCount] | (string.charCodeAt(lByteCount) << lBytePosition));
            lByteCount++;
        }
        lWordCount = (lByteCount - (lByteCount % 4)) / 4;
        lBytePosition = (lByteCount % 4) * 8;
        lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80 << lBytePosition);
        lWordArray[lNumberOfWords - 2] = lMessageLength << 3;
        lWordArray[lNumberOfWords - 1] = lMessageLength >>> 29;
        return lWordArray;
    };

    function func_get_k_WordToHex(lValue) {
        var WordToHexValue = "", WordToHexValue_temp = "", lByte, lCount;
        for (lCount = 0; lCount <= 3; lCount++) {
            lByte = (lValue >>> (lCount * 8)) & 255;
            WordToHexValue_temp = "0" + lByte.toString(16);
            WordToHexValue = WordToHexValue + WordToHexValue_temp.substr(WordToHexValue_temp.length - 2, 2);
        }
        return WordToHexValue;
    };

    function func_get_k_FcCSRiu0tp(string) {
        string = string.replace(/\r\n/g, "\n");
        var utftext = "";
        for (var n = 0; n < string.length; n++) {
            var c = string.charCodeAt(n);
            if (c < 128) {
                utftext += String.fromCharCode(c);
            } else if ((c > 127) && (c < 2048)) {
                utftext += String.fromCharCode((c >> 6) | 192);
                utftext += String.fromCharCode((c & 63) | 128);
            } else {
                utftext += String.fromCharCode((c >> 12) | 224);
                utftext += String.fromCharCode(((c >> 6) & 63) | 128);
                utftext += String.fromCharCode((c & 63) | 128);
            }
        }
        return utftext;
    };
    var x = Array();
    var k, AA, BB, CC, DD, a, b, c, d;
    var S11 = 7, S12 = 12, S13 = 17, S14 = 22;
    var S21 = 5, S22 = 9, S23 = 14, S24 = 20;
    var S31 = 4, S32 = 11, S33 = 16, S34 = 23;
    var S41 = 6, S42 = 10, S43 = 15, S44 = 21;
    string = func_get_k_FcCSRiu0tp(string);
    x = func_get_k_ConvertToWordArray(string);
    a = 0x67452301;
    b = 0xEFCDAB89;
    c = 0x98BADCFE;
    d = 0x10325476;
    for (k = 0; k < x.length; k += 16) {
        AA = a;
        BB = b;
        CC = c;
        DD = d;
        a = func_get_k_FF(a, b, c, d, x[k + 0], S11, 0xD76AA478);
        d = func_get_k_FF(d, a, b, c, x[k + 1], S12, 0xE8C7B756);
        c = func_get_k_FF(c, d, a, b, x[k + 2], S13, 0x242070DB);
        b = func_get_k_FF(b, c, d, a, x[k + 3], S14, 0xC1BDCEEE);
        a = func_get_k_FF(a, b, c, d, x[k + 4], S11, 0xF57C0FAF);
        d = func_get_k_FF(d, a, b, c, x[k + 5], S12, 0x4787C62A);
        c = func_get_k_FF(c, d, a, b, x[k + 6], S13, 0xA8304613);
        b = func_get_k_FF(b, c, d, a, x[k + 7], S14, 0xFD469501);
        a = func_get_k_FF(a, b, c, d, x[k + 8], S11, 0x698098D8);
        d = func_get_k_FF(d, a, b, c, x[k + 9], S12, 0x8B44F7AF);
        c = func_get_k_FF(c, d, a, b, x[k + 10], S13, 0xFFFF5BB1);
        b = func_get_k_FF(b, c, d, a, x[k + 11], S14, 0x895CD7BE);
        a = func_get_k_FF(a, b, c, d, x[k + 12], S11, 0x6B901122);
        d = func_get_k_FF(d, a, b, c, x[k + 13], S12, 0xFD987193);
        c = func_get_k_FF(c, d, a, b, x[k + 14], S13, 0xA679438E);
        b = func_get_k_FF(b, c, d, a, x[k + 15], S14, 0x49B40821);
        a = func_get_k_GG(a, b, c, d, x[k + 1], S21, 0xF61E2562);
        d = func_get_k_GG(d, a, b, c, x[k + 6], S22, 0xC040B340);
        c = func_get_k_GG(c, d, a, b, x[k + 11], S23, 0x265E5A51);
        b = func_get_k_GG(b, c, d, a, x[k + 0], S24, 0xE9B6C7AA);
        a = func_get_k_GG(a, b, c, d, x[k + 5], S21, 0xD62F105D);
        d = func_get_k_GG(d, a, b, c, x[k + 10], S22, 0x2441453);
        c = func_get_k_GG(c, d, a, b, x[k + 15], S23, 0xD8A1E681);
        b = func_get_k_GG(b, c, d, a, x[k + 4], S24, 0xE7D3FBC8);
        a = func_get_k_GG(a, b, c, d, x[k + 9], S21, 0x21E1CDE6);
        d = func_get_k_GG(d, a, b, c, x[k + 14], S22, 0xC33707D6);
        c = func_get_k_GG(c, d, a, b, x[k + 3], S23, 0xF4D50D87);
        b = func_get_k_GG(b, c, d, a, x[k + 8], S24, 0x455A14ED);
        a = func_get_k_GG(a, b, c, d, x[k + 13], S21, 0xA9E3E905);
        d = func_get_k_GG(d, a, b, c, x[k + 2], S22, 0xFCEFA3F8);
        c = func_get_k_GG(c, d, a, b, x[k + 7], S23, 0x676F02D9);
        b = func_get_k_GG(b, c, d, a, x[k + 12], S24, 0x8D2A4C8A);
        a = func_get_k_HH(a, b, c, d, x[k + 5], S31, 0xFFFA3942);
        d = func_get_k_HH(d, a, b, c, x[k + 8], S32, 0x8771F681);
        c = func_get_k_HH(c, d, a, b, x[k + 11], S33, 0x6D9D6122);
        b = func_get_k_HH(b, c, d, a, x[k + 14], S34, 0xFDE5380C);
        a = func_get_k_HH(a, b, c, d, x[k + 1], S31, 0xA4BEEA44);
        d = func_get_k_HH(d, a, b, c, x[k + 4], S32, 0x4BDECFA9);
        c = func_get_k_HH(c, d, a, b, x[k + 7], S33, 0xF6BB4B60);
        b = func_get_k_HH(b, c, d, a, x[k + 10], S34, 0xBEBFBC70);
        a = func_get_k_HH(a, b, c, d, x[k + 13], S31, 0x289B7EC6);
        d = func_get_k_HH(d, a, b, c, x[k + 0], S32, 0xEAA127FA);
        c = func_get_k_HH(c, d, a, b, x[k + 3], S33, 0xD4EF3085);
        b = func_get_k_HH(b, c, d, a, x[k + 6], S34, 0x4881D05);
        a = func_get_k_HH(a, b, c, d, x[k + 9], S31, 0xD9D4D039);
        d = func_get_k_HH(d, a, b, c, x[k + 12], S32, 0xE6DB99E5);
        c = func_get_k_HH(c, d, a, b, x[k + 15], S33, 0x1FA27CF8);
        b = func_get_k_HH(b, c, d, a, x[k + 2], S34, 0xC4AC5665);
        a = func_get_k_II(a, b, c, d, x[k + 0], S41, 0xF4292244);
        d = func_get_k_II(d, a, b, c, x[k + 7], S42, 0x432AFF97);
        c = func_get_k_II(c, d, a, b, x[k + 14], S43, 0xAB9423A7);
        b = func_get_k_II(b, c, d, a, x[k + 5], S44, 0xFC93A039);
        a = func_get_k_II(a, b, c, d, x[k + 12], S41, 0x655B59C3);
        d = func_get_k_II(d, a, b, c, x[k + 3], S42, 0x8F0CCC92);
        c = func_get_k_II(c, d, a, b, x[k + 10], S43, 0xFFEFF47D);
        b = func_get_k_II(b, c, d, a, x[k + 1], S44, 0x85845DD1);
        a = func_get_k_II(a, b, c, d, x[k + 8], S41, 0x6FA87E4F);
        d = func_get_k_II(d, a, b, c, x[k + 15], S42, 0xFE2CE6E0);
        c = func_get_k_II(c, d, a, b, x[k + 6], S43, 0xA3014314);
        b = func_get_k_II(b, c, d, a, x[k + 13], S44, 0x4E0811A1);
        a = func_get_k_II(a, b, c, d, x[k + 4], S41, 0xF7537E82);
        d = func_get_k_II(d, a, b, c, x[k + 11], S42, 0xBD3AF235);
        c = func_get_k_II(c, d, a, b, x[k + 2], S43, 0x2AD7D2BB);
        b = func_get_k_II(b, c, d, a, x[k + 9], S44, 0xEB86D391);
        a = func_get_k_mGr51T5WIX(a, AA);
        b = func_get_k_mGr51T5WIX(b, BB);
        c = func_get_k_mGr51T5WIX(c, CC);
        d = func_get_k_mGr51T5WIX(d, DD);
    }
    if (bit == 32) {
        return (func_get_k_WordToHex(a) + func_get_k_WordToHex(b) + func_get_k_WordToHex(c) + func_get_k_WordToHex(d)).toLowerCase();
    }
    return (func_get_k_WordToHex(b) + func_get_k_WordToHex(c)).toLowerCase();
}`

func TestIssue446(t *testing.T) {
        vm := New()
        _, err := vm.Run(issue446JS)
        require.NoError(t, err)

        key := "488,853,642"
        k, err := vm.Call("func_get_k", nil, key, 32)
        require.NoError(t, err)
        require.Equal(t, "d11e9c49e54677f584c5f8fa5e132a7d", out.String())
}
go1.18.7 test -run=TestIssue446 -v
=== RUN   TestIssue446
--- PASS: TestIssue446 (0.01s)
PASS
ok      github.com/robertkrimen/otto    0.012s

@andig
Copy link
Contributor

andig commented Dec 6, 2022

Might this be related to #474 that was just fixed? Before that PR we were depending on undefined behaviour.

@stevenh
Copy link
Collaborator

stevenh commented Dec 6, 2022

Could well be, hopefully the reporter will check.

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

No branches or pull requests

3 participants