From 251304751235dfd09543b39af940908fe7d7421d Mon Sep 17 00:00:00 2001 From: Dan Gohman Date: Fri, 29 Dec 2023 13:25:16 -0800 Subject: [PATCH] Handle errors consistently in `vsprintf` and `vsnprintf`. (#107) --- c-scape/src/stdio.rs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/c-scape/src/stdio.rs b/c-scape/src/stdio.rs index 655fb93..87fe73e 100644 --- a/c-scape/src/stdio.rs +++ b/c-scape/src/stdio.rs @@ -724,6 +724,9 @@ unsafe extern "C" fn vsprintf( let mut out = String::new(); let num_bytes = format(fmt, va_list, output::fmt_write(&mut out)); + if num_bytes < 0 { + return num_bytes; + } debug_assert_eq!(out.len(), num_bytes as usize); let copy_len = num_bytes as usize + 1; @@ -758,6 +761,9 @@ unsafe extern "C" fn vsnprintf( let mut out = String::new(); let num_bytes = format(fmt, va_list, output::fmt_write(&mut out)); + if num_bytes < 0 { + return num_bytes; + } debug_assert_eq!(out.len(), num_bytes as usize); let copy_len = min(num_bytes as usize + 1, len); @@ -787,6 +793,7 @@ unsafe extern "C" fn vdprintf(fd: c_int, fmt: *const c_char, va_list: VaList<'_, if num_bytes < 0 { return num_bytes; } + debug_assert_eq!(out.len(), num_bytes as usize); let bytes = out.into_bytes(); let mut remaining = &bytes[..];