diff --git a/mongoose.c b/mongoose.c
index 92e45482feefb73cb9514068fccd3da185390e80..8df21bbbc7872ac4ee52782e8ad261d6e4eb5813 100644
--- a/mongoose.c
+++ b/mongoose.c
@@ -143,11 +143,14 @@ void mbuf_free(struct mbuf *mbuf) {
 }
 
 void mbuf_resize(struct mbuf *a, size_t new_size) {
-  char *p;
-  if ((new_size > a->size || (new_size < a->size && new_size >= a->len)) &&
-      (p = (char *) MBUF_REALLOC(a->buf, new_size)) != NULL) {
-    a->size = new_size;
-    a->buf = p;
+  if (new_size > a->size || (new_size < a->size && new_size >= a->len)) {
+    a->buf = (char *) MBUF_REALLOC(a->buf, new_size);
+    /*
+     * In case realloc fails, there's not much we can do except set size to 0.
+     * Note that NULL is a valid return value from realloc when size == 0, but
+     * that is covered too.
+     */
+    a->size = (a->buf != NULL ? new_size : 0);
   }
 }