-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA256 > > The bug is a simple typo in the new exprtok.h - it seems to have slipped > > in > > while refactoring the operator list to this new header file. > > > > Attached is a patch that fixes the issue. I have also gone and verified > > that the same type of mistake didn't happen to other operators. > > Attached is a test case for all expr operators as well.
As quickly discussed between door and fish tang, I extended the tests to also test lksh (which does not have rotation operators). - -nik - -- PGP-Fingerprint: 3C9D 54A4 7575 C026 FB17 FD26 B79A 3C16 A0C4 F296 Dominik George · Mobil: +49-1520-1981389 Teckids e.V. · FrOSCon e.V. · OpenRheinRuhr e.V. Fellowship of the FSFE · Piratenpartei Deutschland Opencaching Deutschland e.V. · Debian Contributor LPIC-3 Linux Enterprise Professional (Security) -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQJOBAEBCAA4BQJXrespMRpodHRwczovL3d3dy5kb21pbmlrLWdlb3JnZS5kZS9n cGctcG9saWN5LnR4dC5hc2MACgkQt5o8FqDE8pYjDxAAiP9tQ564FwTXEWAhKZLc 7pDXH94vPYOsA1+zMupO8AMskvjAJAHV4mSJogczFm4KFiXrLBYSbXmeBBn0EVP+ X16OUWxEmODB8otN/i75hjBG2ph0CAoyxAkE+nhpD37QwAa6GG5lwzFsOQ37hK/K mLEyMN4AKGi/doUpB8ScP9u0MD+7qQyU3DAeOLLhkR8KAp4mfcevztn970RZR21s QnLbyDyZCvK/8KExGeVwUd8k2RnjXaRB6/2nuuaL9yMSWqyXoUx3u6LMR/Zs36zr OFIQDO00z2pCigo5HKskTzyAi603Fg/VsOL3DvECcvuSgkVS2ogY2gThOCVn4CIS sOjKCdkqfgC94Dy3eW9KwKRxg7LgXSbSe/PiZmBx5UdW1poyKPVdlSW3W856yx1i IdmVYsQXnAaUZkFqxuoRUhtmEGCP6XYuzne6eqz5onFBmH5QcZ4KcKb8lquilN8H 3Kspdh/9N6rpuowo33D6sbtGBCxLOAvAtGBe2AqPm0IqP9xK9R0uqe4Zg6A1RGxk y6PkcltoekIWbnpnFssXXP1VGXyJk5/+7AxgszU14owRQQZ7p2maq9RkD0gjlCYe UW0hTASOYd7bPhXY/BFDxUs/CEACcr9PfiwEzxH0/ENhDZAmEWBpQFTPRkmi4mXv yAh5O3RkLg7BRJkqMTCs2bQ= =iFuQ -----END PGP SIGNATURE-----
--- check.t.old 2016-08-12 16:01:43.306225160 +0200 +++ check.t 2016-08-12 17:22:38.138575000 +0200 @@ -6423,6 +6423,173 @@ stdin: for s in s; do break; done; print -s s --- +name: regression-68 +description: + Check that all expr operators work as expected +category: shell:legacy-no +stdin: + echo $(( a = 5 )) + echo $(( a++ )) + echo $(( a-- )) + echo $(( a == 5 )) $(( a == 6 )) + echo $(( a != 6 )) $(( a != 5 )) + echo $(( a *= 3 )) + echo $(( a /= 5 )) + echo $(( a %= 2 )) + echo $(( a += 9 )) + echo $(( a -= 5 )) + echo $(( a ^<= 1 )) + echo $(( a ^>= 2 )) + echo $(( a << 1 )) + echo $(( a >> 1 )) + echo $(( a &= 4 )) + echo $(( a ^= a )) + echo $(( a |= 5 )) + echo $(( 5 ^< 1 )) + echo $(( 5 ^> 1 )) + echo $(( 5 << 1 )) + echo $(( 5 >> 1 )) + echo $(( 5 <= 3 )) $(( 5 <= 2 )) $(( 5 <= 1 )) + echo $(( 5 >= 1 )) $(( 5 >= 2 )) $(( 5 >= 3 )) + echo $(( 5 < 3 )) $(( 5 < 2 )) $(( 5 < 1 )) + echo $(( 5 > 1 )) $(( 5 > 2 )) $(( 5 > 3 )) + echo $(( 1 && 1 )) $(( 1 && 0 )) $(( 0 && 1 )) $(( 0 && 0 )) + echo $(( 1 || 1 )) $(( 1 || 0 )) $(( 0 || 1 )) $(( 0 || 0 )) + echo $(( 5 * 3 )) + echo $(( 6 / 2 )) + echo $(( 5 % 5 )) $(( 5 % 4 )) $(( 5 % 1 )) $(( 5 % -1 )) $(( 5 % -2 )) + echo $(( 5 + 2 )) $(( 5 + 0 )) $(( 5 + -2 )) + echo $(( 5 - 2 )) $(( 5 - 0 )) $(( 5 - -2 )) + echo $(( 6 & 4 )) $(( 6 & 8 )) + echo $(( 4 ^ 2 )) $(( 4 ^ 4 )) + echo $(( 4 | 2 )) $(( 4 | 4 )) $(( 4 | 0 )) + echo $(( 1 ? 1 : 0 )) $(( 0 ? 1 : 0 )) + echo $(( 5, 2, 3 )) + echo $(( ~0 )) $(( ~1 )) $(( ~~1 )) + echo $(( !0 )) $(( !1 )) $(( !!1 )) + echo $(( (5) )) +expected-stdout: + 5 + 6 + 5 + 1 0 + 1 0 + 15 + 3 + 1 + 10 + 5 + 10 + -2147483646 + 4 + 2 + 6 + 0 + 5 + 10 + -2147483646 + 10 + 2 + 1 1 0 + 1 1 0 + 1 0 0 + 1 0 0 + 1 0 0 0 + 1 1 1 0 + 15 + 3 + 0 1 0 0 1 + 7 5 3 + 3 5 7 + 4 0 + 6 0 + 6 0 0 + 1 0 + 3 + -1 -2 1 + 1 0 1 + 5 +--- +name: regression-68-legacy +description: + Check that all expr operators work as expected + lksh does not have the rotation operators ^<, ^>, ^<= and ^>= +category: shell:legacy-yes +stdin: + echo $(( a = 5 )) + echo $(( a++ )) + echo $(( a-- )) + echo $(( a == 5 )) $(( a == 6 )) + echo $(( a != 6 )) $(( a != 5 )) + echo $(( a *= 3 )) + echo $(( a /= 5 )) + echo $(( a %= 2 )) + echo $(( a += 9 )) + echo $(( a -= 5 )) + echo $(( a << 1 )) + echo $(( a >> 1 )) + echo $(( a &= 4 )) + echo $(( a ^= a )) + echo $(( a |= 5 )) + echo $(( 5 << 1 )) + echo $(( 5 >> 1 )) + echo $(( 5 <= 3 )) $(( 5 <= 2 )) $(( 5 <= 1 )) + echo $(( 5 >= 1 )) $(( 5 >= 2 )) $(( 5 >= 3 )) + echo $(( 5 < 3 )) $(( 5 < 2 )) $(( 5 < 1 )) + echo $(( 5 > 1 )) $(( 5 > 2 )) $(( 5 > 3 )) + echo $(( 1 && 1 )) $(( 1 && 0 )) $(( 0 && 1 )) $(( 0 && 0 )) + echo $(( 1 || 1 )) $(( 1 || 0 )) $(( 0 || 1 )) $(( 0 || 0 )) + echo $(( 5 * 3 )) + echo $(( 6 / 2 )) + echo $(( 5 % 5 )) $(( 5 % 4 )) $(( 5 % 1 )) $(( 5 % -1 )) $(( 5 % -2 )) + echo $(( 5 + 2 )) $(( 5 + 0 )) $(( 5 + -2 )) + echo $(( 5 - 2 )) $(( 5 - 0 )) $(( 5 - -2 )) + echo $(( 6 & 4 )) $(( 6 & 8 )) + echo $(( 4 ^ 2 )) $(( 4 ^ 4 )) + echo $(( 4 | 2 )) $(( 4 | 4 )) $(( 4 | 0 )) + echo $(( 1 ? 1 : 0 )) $(( 0 ? 1 : 0 )) + echo $(( 5, 2, 3 )) + echo $(( ~0 )) $(( ~1 )) $(( ~~1 )) + echo $(( !0 )) $(( !1 )) $(( !!1 )) + echo $(( (5) )) +expected-stdout: + 5 + 6 + 5 + 1 0 + 1 0 + 15 + 3 + 1 + 10 + 5 + 4 + 2 + 6 + 0 + 5 + 10 + 2 + 1 1 0 + 1 1 0 + 1 0 0 + 1 0 0 + 1 0 0 0 + 1 1 1 0 + 15 + 3 + 0 1 0 0 1 + 7 5 3 + 3 5 7 + 4 0 + 6 0 + 6 0 0 + 1 0 + 3 + -1 -2 1 + 1 0 1 + 5 +--- name: readonly-0 description: Ensure readonly is honoured for assignments and unset
