[sr-dev] git:master:0ea69b16: core: Zero terminate str copies made with (pkg|shm)_str_dup()

Alex Hermann alex at hexla.nl
Tue Oct 20 13:50:41 CEST 2020


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

Author: Alex Hermann <alex at hexla.nl>
Committer: Alex Hermann <alex at hexla.nl>
Date: 2020-10-20T10:21:00+02:00

core: Zero terminate str copies made with (pkg|shm)_str_dup()

As discussed in #2512, zero-terminating all copies is preferred as most str
usage is already with zero-terminated str.s.

---

Modified: src/core/ut.h

---

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

---

diff --git a/src/core/ut.h b/src/core/ut.h
index 6ef2e079bc..5fcb245cd8 100644
--- a/src/core/ut.h
+++ b/src/core/ut.h
@@ -748,6 +748,7 @@ static inline int strz2sint(char* _s, int* _r)
 
 /**
  * \brief Make a copy of a str structure to a str using shm_malloc
+ *        The copy will be zero-terminated
  * \param dst destination
  * \param src source
  * \return 0 on success, -1 on failure
@@ -775,7 +776,7 @@ static inline int shm_str_dup(str* dst, const str* src)
 		dst->len = src->len;
 	}
 
-	dst->s = (char*)shm_malloc(dst->len);
+	dst->s = (char*)shm_malloc(dst->len+1);
 	if (dst->s == NULL) {
 		SHM_MEM_ERROR;
 		return -1;
@@ -788,6 +789,7 @@ static inline int shm_str_dup(str* dst, const str* src)
 	}
 
 	memcpy(dst->s, src->s, dst->len);
+	dst->s[dst->len] = 0;
 
 	return 0;
 }
@@ -848,6 +850,7 @@ static inline char* shm_str2char_dup(str *src)
 
 /**
  * \brief Make a copy of a str structure using pkg_malloc
+ *        The copy will be zero-terminated
  * \param dst destination
  * \param src source
  * \return 0 on success, -1 on failure
@@ -875,7 +878,7 @@ static inline int pkg_str_dup(str* dst, const str* src)
 		dst->len = src->len;
 	}
 
-	dst->s = (char*)pkg_malloc(dst->len);
+	dst->s = (char*)pkg_malloc(dst->len+1);
 	if (dst->s == NULL) {
 		PKG_MEM_ERROR;
 		return -1;
@@ -888,6 +891,7 @@ static inline int pkg_str_dup(str* dst, const str* src)
 	}
 
 	memcpy(dst->s, src->s, dst->len);
+	dst->s[dst->len] = 0;
 
 	return 0;
 }




More information about the sr-dev mailing list