]> git.feebdaed.xyz Git - 0xmirror/mongoose.git/commitdiff
close connection on OOM when printing
authorSergio R. Caprile <scaprile@cesanta.com>
Wed, 29 Oct 2025 18:41:00 +0000 (15:41 -0300)
committerSergio R. Caprile <scaprile@cesanta.com>
Wed, 29 Oct 2025 18:41:00 +0000 (15:41 -0300)
mongoose.c
src/net.c

index f860ab3b07721105c00c72308527a8161aca88c4..aaff20d6fc65969dade070f041fb370778dfd346 100644 (file)
@@ -3866,8 +3866,14 @@ struct mg_connection *mg_mqtt_listen(struct mg_mgr *mgr, const char *url,
 
 size_t mg_vprintf(struct mg_connection *c, const char *fmt, va_list *ap) {
   size_t old = c->send.len;
-  mg_vxprintf(mg_pfn_iobuf, &c->send, fmt, ap);
-  return c->send.len - old;
+  size_t expected = mg_vxprintf(mg_pfn_iobuf, &c->send, fmt, ap);
+  size_t actual = c->send.len - old;
+  if (actual != expected) {
+    mg_error(c, "OOM");
+    c->send.len = old;
+    actual = 0;
+  }
+  return actual;
 }
 
 size_t mg_printf(struct mg_connection *c, const char *fmt, ...) {
index ce7db6031c93c315a8f1341aae7846ae9171dcf2..4d6bfeeb4dab1c6bb22a6a8b66596957a89c68c3 100644 (file)
--- a/src/net.c
+++ b/src/net.c
@@ -9,8 +9,14 @@
 
 size_t mg_vprintf(struct mg_connection *c, const char *fmt, va_list *ap) {
   size_t old = c->send.len;
-  mg_vxprintf(mg_pfn_iobuf, &c->send, fmt, ap);
-  return c->send.len - old;
+  size_t expected = mg_vxprintf(mg_pfn_iobuf, &c->send, fmt, ap);
+  size_t actual = c->send.len - old;
+  if (actual != expected) {
+    mg_error(c, "OOM");
+    c->send.len = old;
+    actual = 0;
+  }
+  return actual;
 }
 
 size_t mg_printf(struct mg_connection *c, const char *fmt, ...) {