-
Notifications
You must be signed in to change notification settings - Fork 588
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
Labels
Comments
I just tested this with go 1.18.7 and I get 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 |
Might this be related to #474 that was just fixed? Before that PR we were depending on undefined behaviour. |
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
This is my code. It is normal in version 1.18.1, but there is a problem in version 1.18.7
The result of 1.18.1 is as follows: d11e9c49e54677f584c5f8fa5e132a7d
The result of 1.18.7 is as follows: 00000000000000000000000000000000
This is "js"code:
The text was updated successfully, but these errors were encountered: