mirror of
https://github.com/fmtlib/fmt.git
synced 2026-10-29 02:17:28 +08:00
Don't truncate output size to int in fmt_vformat and vfprintf
This commit is contained in:
parent
fdf31252e6
commit
5564ba3f45
@ -627,7 +627,8 @@ auto vfprintf(std::FILE* f, basic_string_view<Char> fmt,
|
||||
auto buf = basic_memory_buffer<Char>();
|
||||
detail::vprintf(buf, fmt, args);
|
||||
size_t size = buf.size();
|
||||
return std::fwrite(buf.data(), sizeof(Char), size, f) < size
|
||||
return std::fwrite(buf.data(), sizeof(Char), size, f) < size ||
|
||||
size > detail::to_unsigned(detail::max_value<int>())
|
||||
? -1
|
||||
: static_cast<int>(size);
|
||||
}
|
||||
|
||||
@ -8,6 +8,7 @@
|
||||
#include "fmt/fmt-c.h"
|
||||
|
||||
#include <fmt/core.h>
|
||||
#include <limits.h> // INT_MAX
|
||||
|
||||
constexpr size_t max_c_format_args = 16;
|
||||
|
||||
@ -45,6 +46,7 @@ extern "C" int fmt_vformat(char* buffer, size_t size, const char* fmt,
|
||||
auto result = fmt::vformat_to_n(
|
||||
buffer, size, fmt,
|
||||
fmt::format_args(format_args, static_cast<int>(num_args)));
|
||||
if (result.size > INT_MAX) return fmt_error;
|
||||
return static_cast<int>(result.size);
|
||||
}
|
||||
FMT_CATCH(...) {}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user