提交 68f0bd03 编写于 作者: A Alexey Milovidov

Fixed error with parsing bad arrays [#METR-21885].

上级 4c73eea3
......@@ -179,7 +179,8 @@ public:
{
auto & offsets = getOffsets();
size_t nested_n = offsets.back() - offsetAt(offsets.size() - n);
getData().popBack(nested_n);
if (nested_n)
getData().popBack(nested_n);
offsets.resize_assume_reserved(offsets.size() - n);
}
......
......@@ -162,7 +162,8 @@ public:
/** Удалить одно или несколько значений с конца.
* Используется, чтобы сделать некоторые операции exception-safe,
* когда после вставки значения сделать что-то ещё не удалось, и нужно откатить вставку.
* Если столбец пуст - поведение не определено.
* Если столбец имеет меньше n значений - поведение не определено.
* Если n == 0 - поведение не определено.
*/
virtual void popBack(size_t n) = 0;
......
......@@ -87,7 +87,8 @@ void DataTypeArray::deserializeBinary(IColumn & column, ReadBuffer & istr) const
}
catch (...)
{
nested_column.popBack(i);
if (i)
nested_column.popBack(i);
throw;
}
......@@ -248,7 +249,8 @@ static void deserializeTextImpl(IColumn & column, ReadBuffer & istr, Reader && r
}
catch (...)
{
nested_column.popBack(size);
if (size)
nested_column.popBack(size);
throw;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册