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

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

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