[libcxx-commits] [libcxx] [libc++] Fix wraparound issue with -fsanitize=integer in string operator>> (PR #106263)
Louis Dionne via libcxx-commits
libcxx-commits at lists.llvm.org
Tue Aug 27 12:02:59 PDT 2024
================
@@ -1211,12 +1211,12 @@ operator>>(basic_istream<_CharT, _Traits>& __is, basic_string<_CharT, _Traits, _
try {
#endif
__str.clear();
- streamsize __n = __is.width();
- if (__n <= 0)
- __n = __str.max_size();
- if (__n <= 0)
- __n = numeric_limits<streamsize>::max();
- streamsize __c = 0;
+ using _Size = typename basic_string<_CharT, _Traits, _Allocator>::size_type;
+ static_assert(numeric_limits<_Size>::max() >= numeric_limits<streamsize>::max(),
----------------
ldionne wrote:
The other alternative would be to use `streamsize` for the counter and do something like:
```
streamsize const __width = __is.width();
streamsize const __n = __width <= 0 ? std::clamp(__str.max_size(), 0, numeric_limits<streamsize>::max()) : __width;
```
WDYT?
https://github.com/llvm/llvm-project/pull/106263
More information about the libcxx-commits
mailing list