I noticed a -Wmaybe-uninitialized warning for this function, which turns
out to be correct. If the caller passes a valid std::ios_base::seekdir
value then there's no problem, but if they pass std::seekdir(999) then
we don't initialize the __base variable before adding it to __off.
Rather than initialize it to an arbitrary value, we should return an
error.
Also add [[unlikely]] attributes to the paths that return an error.
libstdc++-v3/ChangeLog:
* include/std/spanstream (basic_spanbuf::seekoff): Return an
error for invalid seekdir values.
}
else
{
- off_type __base;
+ off_type __base{};
__which &= (ios_base::in|ios_base::out);
if (__which == ios_base::out)
}
else if (__way == ios_base::end)
__base = _M_buf.size();
+ else /* way is not ios::beg, ios::cur, or ios::end */ [[unlikely]]
+ return __ret;
- if (__builtin_add_overflow(__base, __off, &__off))
+ if (__builtin_add_overflow(__base, __off, &__off)) [[unlikely]]
return __ret;
- if (__off < 0 || __off > _M_buf.size())
+ if (__off < 0 || __off > _M_buf.size()) [[unlikely]]
return __ret;
if (__which & ios_base::in)