Fossil SCM
Do not allow integer left-shift overflow in TH1, because gcc 14.2.0 hates that. [forum:/info/6c1653220d4e12ec|Forum post 6c1653220].
Commit
c66b19670f0250f48378bde6875868523eb1d4b4814db4f96ec86a5ed020955f
Parent
3af3ffdf443e77e…
1 file changed
+5
-2
M
src/th.c
+5
-2
| --- src/th.c | ||
| +++ src/th.c | ||
| @@ -2160,12 +2160,15 @@ | ||
| 2160 | 2160 | } |
| 2161 | 2161 | iRes = iLeft%iRight; |
| 2162 | 2162 | break; |
| 2163 | 2163 | case OP_ADD: iRes = iLeft+iRight; break; |
| 2164 | 2164 | case OP_SUBTRACT: iRes = iLeft-iRight; break; |
| 2165 | - case OP_LEFTSHIFT: iRes = iLeft<<iRight; break; | |
| 2166 | - case OP_RIGHTSHIFT: iRes = iLeft>>iRight; break; | |
| 2165 | + case OP_LEFTSHIFT: { | |
| 2166 | + iRes = (int)(((unsigned int)iLeft)<<(iRight&0x1f)); | |
| 2167 | + break; | |
| 2168 | + } | |
| 2169 | + case OP_RIGHTSHIFT: iRes = iLeft>>(iRight&0x1f); break; | |
| 2167 | 2170 | case OP_LT: iRes = iLeft<iRight; break; |
| 2168 | 2171 | case OP_GT: iRes = iLeft>iRight; break; |
| 2169 | 2172 | case OP_LE: iRes = iLeft<=iRight; break; |
| 2170 | 2173 | case OP_GE: iRes = iLeft>=iRight; break; |
| 2171 | 2174 | case OP_EQ: iRes = iLeft==iRight; break; |
| 2172 | 2175 |
| --- src/th.c | |
| +++ src/th.c | |
| @@ -2160,12 +2160,15 @@ | |
| 2160 | } |
| 2161 | iRes = iLeft%iRight; |
| 2162 | break; |
| 2163 | case OP_ADD: iRes = iLeft+iRight; break; |
| 2164 | case OP_SUBTRACT: iRes = iLeft-iRight; break; |
| 2165 | case OP_LEFTSHIFT: iRes = iLeft<<iRight; break; |
| 2166 | case OP_RIGHTSHIFT: iRes = iLeft>>iRight; break; |
| 2167 | case OP_LT: iRes = iLeft<iRight; break; |
| 2168 | case OP_GT: iRes = iLeft>iRight; break; |
| 2169 | case OP_LE: iRes = iLeft<=iRight; break; |
| 2170 | case OP_GE: iRes = iLeft>=iRight; break; |
| 2171 | case OP_EQ: iRes = iLeft==iRight; break; |
| 2172 |
| --- src/th.c | |
| +++ src/th.c | |
| @@ -2160,12 +2160,15 @@ | |
| 2160 | } |
| 2161 | iRes = iLeft%iRight; |
| 2162 | break; |
| 2163 | case OP_ADD: iRes = iLeft+iRight; break; |
| 2164 | case OP_SUBTRACT: iRes = iLeft-iRight; break; |
| 2165 | case OP_LEFTSHIFT: { |
| 2166 | iRes = (int)(((unsigned int)iLeft)<<(iRight&0x1f)); |
| 2167 | break; |
| 2168 | } |
| 2169 | case OP_RIGHTSHIFT: iRes = iLeft>>(iRight&0x1f); break; |
| 2170 | case OP_LT: iRes = iLeft<iRight; break; |
| 2171 | case OP_GT: iRes = iLeft>iRight; break; |
| 2172 | case OP_LE: iRes = iLeft<=iRight; break; |
| 2173 | case OP_GE: iRes = iLeft>=iRight; break; |
| 2174 | case OP_EQ: iRes = iLeft==iRight; break; |
| 2175 |