Bläddra i källkod

perl: check for and handle memory allocation failures

Alex Hermann 11 år sedan
förälder
incheckning
293caa403b
2 ändrade filer med 17 tillägg och 5 borttagningar
  1. 4 0
      modules/app_perl/app_perl_mod.c
  2. 13 5
      modules/app_perl/kamailioxs.xs

+ 4 - 0
modules/app_perl/app_perl_mod.c

@@ -241,6 +241,10 @@ PerlInterpreter *parser_init(void) {
 				} else {
 					LM_INFO("setting lib path: '%s'\n", entry);
 					argv[argc] = pkg_malloc(strlen(entry)+20);
+					if (!argv[argc]) {
+						LM_ERR("not enough pkg mem\n");
+						return NULL;
+					}
 					sprintf(argv[argc], "-I%s", entry);
 					modpathset_end = argc;
 					argc++;

+ 13 - 5
modules/app_perl/kamailioxs.xs

@@ -236,6 +236,10 @@ int moduleFunc(struct sip_msg *m, char *func,
 
 	if (param1) {
 		argv[0] = (char *)pkg_malloc(strlen(param1)+1);
+		if (!argv[0]) {
+			LM_ERR("not enough pkg mem\n");
+			return -1;
+		}
 		strcpy(argv[0], param1);
 		argc++;
 	} else {
@@ -244,6 +248,11 @@ int moduleFunc(struct sip_msg *m, char *func,
 
 	if (param2) {
 		argv[1] = (char *)pkg_malloc(strlen(param2)+1);
+		if (!argv[1]) {
+			LM_ERR("not enough pkg mem\n");
+			if (argv[0]) pkg_free(argv[0]);
+			return -1;
+		}
 		strcpy(argv[1], param2);
 		argc++;
 	} else {
@@ -362,25 +371,24 @@ static inline int rewrite_ruri(struct sip_msg* _m, char* _s)
  */
 char *pv_sprintf(struct sip_msg *m, char *fmt) {
 	int buf_size = 4096;
-	char out[4096];
+	static char out[4096];
 	pv_elem_t *model;
 	str s;
-	char *ret = NULL;
-
+	char *ret;
 
 	s.s = fmt; s.len = strlen(s.s);
 	if(pv_parse_format(&s, &model) < 0) {
-		LM_ERR("pv_sprintf: ERROR: wrong format[%s]!\n",
+		LM_ERR("pv_sprintf: wrong format[%s]!\n",
 			fmt);
 		return NULL;
 	}
 
 	if(pv_printf(m, model, out, &buf_size) < 0) {
+		LM_ERR("pv_printf: failed to print pv value\n");
 		ret = NULL;
 	} else {
 		ret = strdup(out);
 	}
-
 	pv_elem_free_all(model);
 
 	return ret;