equal
deleted
inserted
replaced
1 This fix is from the community, details in the following location. |
|
2 http://lists.research.att.com/pipermail/ast-users/2013q4/004481.html |
|
3 --- |
|
4 --- a/src/cmd/ksh93/sh/streval.c 2014-01-22 10:39:11.075964500 +0100 |
|
5 +++ b/src/cmd/ksh93/sh/streval.c 2014-01-22 13:21:35.999184260 +0100 |
|
6 @@ -366,13 +366,17 @@ |
|
7 num = (Sflong_t)(sp[-1]) / (Sflong_t)(num); |
|
8 break; |
|
9 case A_LSHIFT: |
|
10 - if(tp[-1]==2) |
|
11 + if((long)num >= CHAR_BIT*sizeof(Sfulong_t)) |
|
12 + num = 0; |
|
13 + else if(tp[-1]==2) |
|
14 num = U2F((Sfulong_t)(sp[-1]) << (long)(num)); |
|
15 else |
|
16 num = (Sflong_t)(sp[-1]) << (long)(num); |
|
17 break; |
|
18 case A_RSHIFT: |
|
19 - if(tp[-1]==2) |
|
20 + if((long)num >= CHAR_BIT*sizeof(Sfulong_t)) |
|
21 + num = 0; |
|
22 + else if(tp[-1]==2) |
|
23 num = U2F((Sfulong_t)(sp[-1]) >> (long)(num)); |
|
24 else |
|
25 num = (Sflong_t)(sp[-1]) >> (long)(num); |
|