This fix is from the community, details in the following location.
---
--- a/src/cmd/ksh93/sh/streval.c 2014-01-22 10:39:11.075964500 +0100
+++ b/src/cmd/ksh93/sh/streval.c 2014-01-22 13:21:35.999184260 +0100
@@ -366,13 +366,17 @@
num = (Sflong_t)(sp[-1]) / (Sflong_t)(num);
break;
case A_LSHIFT:
- if(tp[-1]==2)
+ if((long)num >= CHAR_BIT*sizeof(Sfulong_t))
+ num = 0;
+ else if(tp[-1]==2)
num = U2F((Sfulong_t)(sp[-1]) << (long)(num));
else
num = (Sflong_t)(sp[-1]) << (long)(num);
break;
case A_RSHIFT:
- if(tp[-1]==2)
+ if((long)num >= CHAR_BIT*sizeof(Sfulong_t))
+ num = 0;
+ else if(tp[-1]==2)
num = U2F((Sfulong_t)(sp[-1]) >> (long)(num));
else
num = (Sflong_t)(sp[-1]) >> (long)(num);