@@ -183,7 +183,7 @@ void witness::assign_data(reader& source, bool prefix) NOEXCEPT
183183 break ;
184184
185185 stack_.emplace_back (POINTER (data_chunk, allocator, bytes));
186- size_ = element_size (size_, stack_.back ());
186+ size_ = ceilinged_add (size_, element_size ( stack_.back () ));
187187 }
188188 }
189189 else
@@ -197,7 +197,7 @@ void witness::assign_data(reader& source, bool prefix) NOEXCEPT
197197 break ;
198198
199199 stack_.emplace_back (POINTER (data_chunk, allocator, bytes));
200- size_ = element_size (size_, stack_.back ());
200+ size_ = ceilinged_add (size_, element_size ( stack_.back () ));
201201 }
202202 }
203203
@@ -300,15 +300,19 @@ const chunk_cptrs& witness::stack() const NOEXCEPT
300300// static/private
301301size_t witness::serialized_size (const chunk_cptrs& stack) NOEXCEPT
302302{
303- return std::accumulate (stack.begin (), stack.end (), zero, element_size);
303+ return std::accumulate (stack.begin (), stack.end (), zero,
304+ [](size_t total, const chunk_cptr& element) NOEXCEPT
305+ {
306+ return ceilinged_add (total, element_size (element));
307+ });
304308}
305309
306310size_t witness::serialized_size (bool prefix) const NOEXCEPT
307311{
308312 // Witness prefix is an element count, not byte length (unlike script).
309313 // An empty stack is not a valid witnessed tx (no inputs) but a consistent
310314 // serialization is used independently by database so zero stack allowed.
311- return prefix ? ceilinged_add (size_, variable_size (stack_.size ())) : size_;
315+ return prefix ? ceilinged_add (variable_size (stack_.size ()), size_ ) : size_;
312316}
313317
314318// Utilities.
0 commit comments