提交 ae1b748b 编写于 作者: A Alexey Milovidov

Fixed global variable buffer read overflow [#CLICKHOUSE-4191]

上级 aec8c149
......@@ -247,6 +247,8 @@ public:
time_t res = t - lut[index].date;
/// NOTE We doesn't support cases when time change result in switching to previous day.
/// Data is cleaned to avoid these cases, so no underflow occurs here.
if (res >= lut[index].time_at_offset_change)
res += lut[index].amount_of_offset_change;
......
......@@ -116,6 +116,15 @@ DateLUTImpl::DateLUTImpl(const std::string & time_zone_)
/* std::cerr << lut[i - 1].year << "-" << int(lut[i - 1].month) << "-" << int(lut[i - 1].day_of_month)
<< " offset was changed at " << lut[i - 1].time_at_offset_change << " for " << lut[i - 1].amount_of_offset_change << " seconds.\n";*/
/** We doesn't support cases when time change results in switching to previous day.
* As an example, it was a case in Moscow at years 1981..1983 on October 1:
* clock was adjusted one hour backwards exactly at midnight (that was lead to extra hour 23 of Sep 30th).
* We must clean data (and we will make it slightly incorrect) to avoid these cases.
* (In previous example, it will lead to extra hour 0 of Sep 30 instead.)
*/
if (static_cast<int>(lut[i - 1].time_at_offset_change) + static_cast<int>(lut[i - 1].amount_of_offset_change) < 0)
lut[i - 1].time_at_offset_change = -lut[i - 1].amount_of_offset_change;
}
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册