diff --git a/src/libimp/fmt.cpp b/src/libimp/fmt.cpp
index 587b99b..dfeb228 100644
--- a/src/libimp/fmt.cpp
+++ b/src/libimp/fmt.cpp
@@ -113,6 +113,9 @@ template
int sprintf(fmt_context &ctx, span const &sfmt, A a) {
for (int sz = -1;;) {
auto sbuf = ctx.buffer(sz + 1);
+ if (sbuf.size() < (sz + 1)) {
+ return -1;
+ }
sz = std::snprintf(sbuf.data(), sbuf.size(), sfmt.data(), a);
if (sz <= 0) {
return sz;