From f641d046fa8053a715fdfe70b570156ac4b6a953 Mon Sep 17 00:00:00 2001
From: Warren Dukes <warren.dukes@gmail.com>
Date: Wed, 31 Mar 2004 16:15:09 +0000
Subject: cleanup reading from interface, when argArrayLength returned by
 buffer2array is 0, we weren't dealing with this well at all!

git-svn-id: https://svn.musicpd.org/mpd/trunk@559 09075e82-0dd4-0310-85a5-a0d7c8717e4f
---
 src/buffer2array.c |  8 ++++++++
 src/interface.c    | 14 +++++++++++---
 2 files changed, 19 insertions(+), 3 deletions(-)

(limited to 'src')

diff --git a/src/buffer2array.c b/src/buffer2array.c
index 40247bde7..9ee67f17c 100644
--- a/src/buffer2array.c
+++ b/src/buffer2array.c
@@ -61,6 +61,12 @@ int buffer2array(char * origBuffer, char *** array) {
 	}
 	markArray[bufferLength] = '\0';
 
+	if(!count) {
+		free(buffer);
+		free(markArray);
+		return count;
+	}
+
 	beginArray = malloc(sizeof(int)*count);
 	(*array) = malloc(sizeof(char *)*count);
 
@@ -107,6 +113,8 @@ int buffer2array(char * origBuffer, char *** array) {
 void freeArgArray(char ** array, int argArrayLength) {
 	int i;
 
+	if(argArrayLength==0) return;
+
 	for(i=0;i<argArrayLength;i++) {
 		free(array[i]);
 	}
diff --git a/src/interface.c b/src/interface.c
index b1f016bc3..2ef2fafe6 100644
--- a/src/interface.c
+++ b/src/interface.c
@@ -229,7 +229,8 @@ int interfaceReadInput(Interface * interface) {
 			argArrayLength = buffer2array(interface->buffer,&argArray);
 
 			if(interface->commandList) {
-				if(strcmp(argArray[0],INTERFACE_LIST_MODE_END)==0) {
+				if(argArrayLength==0);
+				else if(strcmp(argArray[0],INTERFACE_LIST_MODE_END)==0) {
 					ListNode * node = interface->commandList->firstNode;
 					ret = 0;
 
@@ -273,14 +274,21 @@ int interfaceReadInput(Interface * interface) {
 				}
 			}
 			else {
-				if(strcmp(argArray[0],INTERFACE_LIST_MODE_BEGIN)==0) {
+				if(argArrayLength &&
+						strcmp(argArray[0],
+						INTERFACE_LIST_MODE_BEGIN)==0) 
+				{
 					interface->commandList = makeList(free);
 					interface->commandListSize = 
 						sizeof(List);
 					ret = 1;
 				}
 				else {
-					if(strcmp(argArray[0],INTERFACE_LIST_MODE_END)==0) {
+					if(argArrayLength==0) ret = 0;
+					else if(strcmp(argArray[0],
+							INTERFACE_LIST_MODE_END)
+							==0) 
+					{
 						myfprintf(interface->fp,"%s not in command list mode\n",COMMAND_RESPOND_ERROR);
 						ret = -1;
 					}
-- 
cgit v1.2.3