From b24aa9849df99759e5485e5663bc2854c7b3c44b Mon Sep 17 00:00:00 2001 From: Sebastian Reimers Date: Sat, 15 Apr 2023 10:41:12 +0200 Subject: [PATCH] add safe mbuf_printf --- include/re_mbuf.h | 12 +++++++++++- src/mbuf/mbuf.c | 23 ++++++++++++++++++++++- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/include/re_mbuf.h b/include/re_mbuf.h index c6bf558dc..bb4f83b6d 100644 --- a/include/re_mbuf.h +++ b/include/re_mbuf.h @@ -74,7 +74,17 @@ uint64_t mbuf_read_u64(struct mbuf *mb); int mbuf_read_str(struct mbuf *mb, char *str, size_t size); int mbuf_strdup(struct mbuf *mb, char **strp, size_t len); int mbuf_vprintf(struct mbuf *mb, const char *fmt, va_list ap); -int mbuf_printf(struct mbuf *mb, const char *fmt, ...); + +#ifdef HAVE_RE_ARG +#define mbuf_printf(mb, fmt, ...) \ + _mbuf_printf_s((mb), (fmt), RE_VA_ARGS(__VA_ARGS__)) +#else +#define mbuf_printf _mbuf_printf +#endif + +int _mbuf_printf(struct mbuf *mb, const char *fmt, ...); +int _mbuf_printf_s(struct mbuf *mb, const char *fmt, ...); + int mbuf_write_pl_skip(struct mbuf *mb, const struct pl *pl, const struct pl *skip); int mbuf_fill(struct mbuf *mb, uint8_t c, size_t n); diff --git a/src/mbuf/mbuf.c b/src/mbuf/mbuf.c index b1f81de56..3293dfae5 100644 --- a/src/mbuf/mbuf.c +++ b/src/mbuf/mbuf.c @@ -531,7 +531,7 @@ int mbuf_vprintf(struct mbuf *mb, const char *fmt, va_list ap) * * @return 0 if success, otherwise errorcode */ -int mbuf_printf(struct mbuf *mb, const char *fmt, ...) +int _mbuf_printf(struct mbuf *mb, const char *fmt, ...) { int err = 0; va_list ap; @@ -544,6 +544,27 @@ int mbuf_printf(struct mbuf *mb, const char *fmt, ...) } +/** + * Print a safe formatted string to a memory buffer + * + * @param mb Memory buffer + * @param fmt Formatted string + * + * @return 0 if success, otherwise errorcode + */ +int _mbuf_printf_s(struct mbuf *mb, const char *fmt, ...) +{ + int err = 0; + va_list ap; + + va_start(ap, fmt); + err = re_vhprintf_s(fmt, ap, vprintf_handler, mb); + va_end(ap); + + return err; +} + + /** * Write a pointer-length string to a memory buffer, excluding a section *