[prev in list] [next in list] [prev in thread] [next in thread] 

List:       sr-dev
Subject:    [sr-dev] git:master:cc661d77: app_lua: test if number of parameters is enough for kemi funtions
From:       Daniel-Constantin Mierla <miconda () gmail ! com>
Date:       2018-03-30 15:23:51
Message-ID: E1f1vsd-0007C2-QF () www ! kamailio ! org
[Download RAW message or body]

Module: kamailio
Branch: master
Commit: cc661d776621a5f2d4370eb364402c2a53242cc7
URL: https://github.com/kamailio/kamailio/commit/cc661d776621a5f2d4370eb364402c2a53242cc7

Author: Daniel-Constantin Mierla <miconda@gmail.com>
Committer: Daniel-Constantin Mierla <miconda@gmail.com>
Date: 2018-03-30T17:23:29+02:00

app_lua: test if number of parameters is enough for kemi funtions

---

Modified: src/modules/app_lua/app_lua_sr.c

---

Diff:  https://github.com/kamailio/kamailio/commit/cc661d776621a5f2d4370eb364402c2a53242cc7.diff
Patch: https://github.com/kamailio/kamailio/commit/cc661d776621a5f2d4370eb364402c2a53242cc7.patch

---

diff --git a/src/modules/app_lua/app_lua_sr.c b/src/modules/app_lua/app_lua_sr.c
index 64ebafae40..72d2eb0ddf 100644
--- a/src/modules/app_lua/app_lua_sr.c
+++ b/src/modules/app_lua/app_lua_sr.c
@@ -1489,9 +1489,27 @@ int sr_kemi_lua_exec_func_ex(lua_State* L, sr_kemi_t *ket, int pdelta)
 	for(i=0; i<SR_KEMI_PARAMS_MAX; i++) {
 		if(ket->ptypes[i]==SR_KEMIP_NONE) {
 			break;
-		} else if(ket->ptypes[i]==SR_KEMIP_STR) {
+		}
+		if(argc<i+pdelta+1) {
+			LM_ERR("not enough parameters for: %.*s.%.*s\n",
+					mname->len, mname->s, fname->len, fname->s);
+			return app_lua_return_false(L);
+		}
+		if(ket->ptypes[i]==SR_KEMIP_STR) {
 			vps[i].s.s = (char*)lua_tostring(L, i+pdelta+1);
-			vps[i].s.len = strlen(vps[i].s.s);
+			if(vps[i].s.s!=NULL) {
+				if(lua_isstring(L, i+pdelta+1)) {
+#if LUA_VERSION_NUM > 501
+					vps[i].s.len = lua_rawlen(L, i+pdelta+1);
+#else
+					vps[i].s.len = lua_strlen(L, i+pdelta+1);
+#endif
+				} else {
+					vps[i].s.len = strlen(vps[i].s.s);
+				}
+			} else {
+				vps[i].s.len = 0;
+			}
 			LM_DBG("param[%d] for: %.*s is str: %.*s\n", i,
 				fname->len, fname->s, vps[i].s.len, vps[i].s.s);
 		} else if(ket->ptypes[i]==SR_KEMIP_INT) {


_______________________________________________
Kamailio (SER) - Development Mailing List
sr-dev@lists.kamailio.org
https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-dev

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic