diff --git a/include/asterisk/vector.h b/include/asterisk/vector.h
index 8f5cf8c8b03011d0315cef8d1c3619b84c135528..00d701bf0f87f7bd88dcc1be29f49781ee5e4474 100644
--- a/include/asterisk/vector.h
+++ b/include/asterisk/vector.h
@@ -637,24 +637,28 @@ int ast_vector_string_split(struct ast_vector_string *dest,
  * \return 0 on success.
  * \return Non-zero on failure.
  */
-#define AST_VECTOR_COMPACT(vec) ({ \
-	int res = 0;								\
-	do {														\
-		if ((vec)->max > (vec)->current) {						\
-			size_t new_max = (vec)->current;				\
-			typeof((vec)->elems) new_elems = ast_realloc(		\
-				(vec)->elems,									\
-				new_max * sizeof(*new_elems));					\
-			if (new_elems || (vec)->current == 0) {				\
-				(vec)->elems = new_elems;						\
-				(vec)->max = new_max;							\
-			} else {											\
-				res = -1;										\
-				break;											\
-			}													\
-		}														\
-	} while(0);													\
-	res;														\
+#define AST_VECTOR_COMPACT(vec) ({					\
+	int res = 0;							\
+	do {								\
+		size_t new_max = (vec)->current;			\
+		if (new_max == 0) {					\
+			ast_free((vec)->elems);				\
+			(vec)->elems = NULL;				\
+			(vec)->max = 0;					\
+		} else if ((vec)->max > new_max) {			\
+			typeof((vec)->elems) new_elems = ast_realloc(	\
+				(vec)->elems,				\
+				new_max * sizeof(*new_elems));		\
+			if (new_elems) {				\
+				(vec)->elems = new_elems;		\
+				(vec)->max = new_max;			\
+			} else {					\
+				res = -1;				\
+				break;					\
+			}						\
+		}							\
+	} while(0);							\
+	res;								\
 })
 
 /*!