diff --git a/src/switch_xml.c b/src/switch_xml.c
index 4cf4bb3ad9..43ffabfcc7 100644
--- a/src/switch_xml.c
+++ b/src/switch_xml.c
@@ -1254,6 +1254,11 @@ static char *expand_vars(char *buf, char *ebuf, switch_size_t elen, switch_size_
 
 		*wp++ = *rp++;
 	}
+
+	if (wp == ep) {
+		return NULL;
+	}
+
 	*wp++ = '\0';
 	*newlen = strlen(ebuf);
 
@@ -1394,11 +1399,16 @@ static int preprocess(const char *cwd, const char *file, FILE *write_fd, int rle
 			break;
 		}
 
-		eblen = len *2;
+		eblen = len * 2;
 		ebuf = malloc(eblen);
 		memset(ebuf, 0, eblen);
 
-		bp = expand_vars(buf, ebuf, eblen, &cur, &err);
+		while (!(bp = expand_vars(buf, ebuf, eblen, &cur, &err))) {
+			eblen *= 2;
+			ebuf = realloc(ebuf, eblen);
+			memset(ebuf, 0, eblen);
+		}
+
 		line++;
 
 		if (err) {