Bug 1717448 - Patch {fmt} to avoid crashing when printing nullptr strings, and attempting to print to an invalid FILE*. r=nika
This brings `{fmt}` closer to our printf.
Differential Revision: https://phabricator.services.mozilla.com/D217722
This commit is contained in:
5
third_party/fmt/include/fmt/format.h
vendored
5
third_party/fmt/include/fmt/format.h
vendored
@@ -2299,7 +2299,7 @@ FMT_CONSTEXPR auto write(OutputIt out, const Char* s, const format_specs& specs,
|
||||
locale_ref) -> OutputIt {
|
||||
if (specs.type() == presentation_type::pointer)
|
||||
return write_ptr<Char>(out, bit_cast<uintptr_t>(s), &specs);
|
||||
if (!s) report_error("string pointer is null");
|
||||
if (!s) return write_bytes<Char>(out, "(null)", specs);
|
||||
return write<Char>(out, basic_string_view<Char>(s), specs, {});
|
||||
}
|
||||
|
||||
@@ -3578,8 +3578,7 @@ FMT_CONSTEXPR auto write(OutputIt out, Char value) -> OutputIt {
|
||||
template <typename Char, typename OutputIt>
|
||||
FMT_CONSTEXPR20 auto write(OutputIt out, const Char* value) -> OutputIt {
|
||||
if (value) return write(out, basic_string_view<Char>(value));
|
||||
report_error("string pointer is null");
|
||||
return out;
|
||||
return write_bytes<Char>(out, "(null)");
|
||||
}
|
||||
|
||||
template <typename Char, typename OutputIt, typename T,
|
||||
|
||||
2
third_party/fmt/moz.yaml
vendored
2
third_party/fmt/moz.yaml
vendored
@@ -19,6 +19,8 @@ vendoring:
|
||||
url: https://github.com/fmtlib/fmt
|
||||
source-hosting: github
|
||||
tracking: commit
|
||||
patches:
|
||||
- print-null-string.patch
|
||||
|
||||
exclude:
|
||||
- test
|
||||
|
||||
42
third_party/fmt/print-null-string.patch
vendored
Normal file
42
third_party/fmt/print-null-string.patch
vendored
Normal file
@@ -0,0 +1,42 @@
|
||||
diff --git a/include/fmt/format.h b/include/fmt/format.h
|
||||
--- a/include/fmt/format.h
|
||||
+++ b/include/fmt/format.h
|
||||
@@ -2294,17 +2294,17 @@ FMT_CONSTEXPR auto write(OutputIt out, b
|
||||
const format_specs& specs, locale_ref) -> OutputIt {
|
||||
return write<Char>(out, s, specs);
|
||||
}
|
||||
template <typename Char, typename OutputIt>
|
||||
FMT_CONSTEXPR auto write(OutputIt out, const Char* s, const format_specs& specs,
|
||||
locale_ref) -> OutputIt {
|
||||
if (specs.type() == presentation_type::pointer)
|
||||
return write_ptr<Char>(out, bit_cast<uintptr_t>(s), &specs);
|
||||
- if (!s) report_error("string pointer is null");
|
||||
+ if (!s) return write_bytes<Char>(out, "(null)", specs);
|
||||
return write<Char>(out, basic_string_view<Char>(s), specs, {});
|
||||
}
|
||||
|
||||
template <typename Char, typename OutputIt, typename T,
|
||||
FMT_ENABLE_IF(is_integral<T>::value &&
|
||||
!std::is_same<T, bool>::value &&
|
||||
!std::is_same<T, Char>::value)>
|
||||
FMT_CONSTEXPR auto write(OutputIt out, T value) -> OutputIt {
|
||||
@@ -3573,18 +3573,17 @@ FMT_CONSTEXPR auto write(OutputIt out, C
|
||||
auto it = reserve(out, 1);
|
||||
*it++ = value;
|
||||
return base_iterator(out, it);
|
||||
}
|
||||
|
||||
template <typename Char, typename OutputIt>
|
||||
FMT_CONSTEXPR20 auto write(OutputIt out, const Char* value) -> OutputIt {
|
||||
if (value) return write(out, basic_string_view<Char>(value));
|
||||
- report_error("string pointer is null");
|
||||
- return out;
|
||||
+ return write_bytes<Char>(out, "(null)");
|
||||
}
|
||||
|
||||
template <typename Char, typename OutputIt, typename T,
|
||||
FMT_ENABLE_IF(std::is_same<T, void>::value)>
|
||||
auto write(OutputIt out, const T* value, const format_specs& specs = {},
|
||||
locale_ref = {}) -> OutputIt {
|
||||
return write_ptr<Char>(out, bit_cast<uintptr_t>(value), &specs);
|
||||
}
|
||||
Reference in New Issue
Block a user