Commit 35ba36d1 authored by Mattias Jonsson's avatar Mattias Jonsson

Post fix patch for bug#20577 and bug#46362.

On 64-bits machines the calculation gets the wrong types and results
in very large numbers. Fixed by explicitly cast month to (int)
parent a88c86f6
...@@ -775,11 +775,12 @@ long calc_daynr(uint year,uint month,uint day) ...@@ -775,11 +775,12 @@ long calc_daynr(uint year,uint month,uint day)
if (y == 0 && month == 0 && day == 0) if (y == 0 && month == 0 && day == 0)
DBUG_RETURN(0); /* Skip errors */ DBUG_RETURN(0); /* Skip errors */
delsum= (long) (365L * y+ 31*(month-1) +day); /* Cast to int to be able to handle month == 0 */
delsum= (long) (365 * y + 31 *((int) month - 1) + (int) day);
if (month <= 2) if (month <= 2)
y--; y--;
else else
delsum-= (long) (month*4+23)/10; delsum-= (long) ((int) month * 4 + 23) / 10;
temp=(int) ((y/100+1)*3)/4; temp=(int) ((y/100+1)*3)/4;
DBUG_PRINT("exit",("year: %d month: %d day: %d -> daynr: %ld", DBUG_PRINT("exit",("year: %d month: %d day: %d -> daynr: %ld",
y+(month <= 2),month,day,delsum+y/4-temp)); y+(month <= 2),month,day,delsum+y/4-temp));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment