[sr-dev] git:master: app_java: allocate enough space to store terminating NULL pointer in split

Daniel-Constantin Mierla miconda at gmail.com
Thu Sep 11 17:48:44 CEST 2014


Module: sip-router
Branch: master
Commit: a13e3b46dba4470deb748eec3b700386f453f6f9
URL:    http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=a13e3b46dba4470deb748eec3b700386f453f6f9

Author: Daniel-Constantin Mierla <miconda at gmail.com>
Committer: Daniel-Constantin Mierla <miconda at gmail.com>
Date:   Thu Sep 11 17:46:52 2014 +0200

app_java: allocate enough space to store terminating NULL pointer in split

- on a report by Tom Johnson

---

 modules/app_java/utils.c |   70 +++++++++++++++++++++++-----------------------
 1 files changed, 35 insertions(+), 35 deletions(-)

diff --git a/modules/app_java/utils.c b/modules/app_java/utils.c
index f39c053..b2ff2a3 100644
--- a/modules/app_java/utils.c
+++ b/modules/app_java/utils.c
@@ -41,49 +41,49 @@
 
 char **split(char *str, char *sep)
 {
-    char **buf = NULL;
-    char *token = NULL;
-    char *saveptr = NULL;
-    int i;
+	char **buf = NULL;
+	char *token = NULL;
+	char *saveptr = NULL;
+	int i;
 
-    buf = (char **)pkg_malloc(sizeof(char *));
-    if (!buf)
-    {
-	LM_ERR("%s: pkg_malloc() has failed. Not enough memory!\n", APP_NAME);
-	return NULL;
-    }
-    memset(&buf, 0, sizeof(char *));
+	buf = (char **)pkg_malloc(sizeof(char *));
+	if (!buf)
+	{
+		LM_ERR("%s: pkg_malloc() has failed. Not enough memory!\n", APP_NAME);
+		return NULL;
+	}
+	memset(&buf, 0, sizeof(char *));
 
-    if (str == NULL)
-	return buf;
+	if (str == NULL)
+		return buf;
 
-    if (strncmp(str, sep, strlen(sep)) <= 0)
-    {
-	// string doesn't contains a separator
-	buf[0] = strdup(str);
-	return buf;
-    }
+	if (strncmp(str, sep, strlen(sep)) <= 0)
+	{
+		// string doesn't contains a separator
+		buf[0] = strdup(str);
+		return buf;
+	}
 
-    token = strdup(str);
-    for (i=0; token != NULL; token = saveptr, i++)
-    {
-        token = strtok_r(token, (const char *)sep, &saveptr);
+	token = strdup(str);
+	for (i=0; token != NULL; token = saveptr, i++)
+	{
+		token = strtok_r(token, (const char *)sep, &saveptr);
 
-        if (token == NULL || !strcmp(token, ""))
-            break;
+		if (token == NULL || !strcmp(token, ""))
+			break;
 
-	buf = (char **)pkg_realloc(buf, (i+1) * sizeof(char *));
-	if (!buf)
-	{
-	    LM_ERR("%s: pkg_realloc() has failed. Not enough memory!\n", APP_NAME);
-	    return NULL;
+		buf = (char **)pkg_realloc(buf, (i+2) * sizeof(char *));
+		if (!buf)
+		{
+			LM_ERR("%s: pkg_realloc() has failed. Not enough memory!\n", APP_NAME);
+			return NULL;
+		}
+		buf[i] = strdup(token);
 	}
-        buf[i] = strdup(token);
-    }
-    buf[i] = NULL;
+	buf[i] = NULL;
 
-    free(token);
+	free(token);
 
-    return buf;
+	return buf;
 }
 




More information about the sr-dev mailing list