[sr-dev] git:master: cfg framework: accept 0 int value within a group instance

Miklos Tirpak miklos at iptel.org
Thu Feb 10 14:54:13 CET 2011


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

Author: Miklos Tirpak <miklos at iptel.org>
Committer: Miklos Tirpak <miklos at iptel.org>
Date:   Thu Feb 10 14:50:33 2011 +0100

cfg framework: accept 0 int value within a group instance

- The parameter verification of new_add_var() was wrong, it did not
accept NULL values which can be the case with integer 0.

- char* NULL and str {NULL, 0} are also valid values

---

 cfg/cfg_struct.c |   36 ++++++++++++++++++++++--------------
 1 files changed, 22 insertions(+), 14 deletions(-)

diff --git a/cfg/cfg_struct.c b/cfg/cfg_struct.c
index 6e93379..4e247cd 100644
--- a/cfg/cfg_struct.c
+++ b/cfg/cfg_struct.c
@@ -876,8 +876,8 @@ int new_add_var(str *group_name, unsigned int group_id, str *var_name,
 	cfg_add_var_t	*add_var = NULL, **add_var_p;
 	int		len;
 
-	if (type && (!var_name || !val)) {
-		LOG(L_ERR, "ERROR: new_add_var(): Missing variable/value specification\n");
+	if (type && !var_name) {
+		LOG(L_ERR, "ERROR: new_add_var(): Missing variable specification\n");
 		goto error;
 	}
 	if (type)
@@ -929,24 +929,32 @@ int new_add_var(str *group_name, unsigned int group_id, str *var_name,
 
 		case CFG_VAR_STR:
 			len = ((str *)val)->len;
-			add_var->val.s.s = (char *)pkg_malloc(sizeof(char) * len);
-			if (!add_var->val.s.s) {
-				LOG(L_ERR, "ERROR: new_add_var(): Not enough memory\n");
-				goto error;
+			if (len) {
+				add_var->val.s.s = (char *)pkg_malloc(sizeof(char) * len);
+				if (!add_var->val.s.s) {
+					LOG(L_ERR, "ERROR: new_add_var(): Not enough memory\n");
+					goto error;
+				}
+				memcpy(add_var->val.s.s, ((str *)val)->s, len);
+			} else {
+				add_var->val.s.s = NULL;
 			}
 			add_var->val.s.len = len;
-			memcpy(add_var->val.s.s, ((str *)val)->s, len);
 			break;
 
 		case CFG_VAR_STRING:
-			len = strlen((char *)val);
-			add_var->val.ch = (char *)pkg_malloc(sizeof(char) * (len + 1));
-			if (!add_var->val.ch) {
-				LOG(L_ERR, "ERROR: new_add_var(): Not enough memory\n");
-				goto error;
+			if (val) {
+				len = strlen((char *)val);
+				add_var->val.ch = (char *)pkg_malloc(sizeof(char) * (len + 1));
+				if (!add_var->val.ch) {
+					LOG(L_ERR, "ERROR: new_add_var(): Not enough memory\n");
+					goto error;
+				}
+				memcpy(add_var->val.ch, (char *)val, len);
+				add_var->val.ch[len] = '\0';
+			} else {
+				add_var->val.ch = NULL;
 			}
-			memcpy(add_var->val.ch, (char *)val, len);
-			add_var->val.ch[len] = '\0';
 			break;
 
 		default:




More information about the sr-dev mailing list