Considering the following _fallback case_ :
- alloc dst->s = pointer sizeof(void\*)
- dst->len = 0
- return **0**
After skimming the code a little more I came to this for the above case(i.e. src->s is
NULL):
- either make dst->s = NULL; dst->len = 0 and return **-1**; this will be caught by
shm_str_dup() != 0 and prevent shm_free() a NULL pointer, even though memory managers
checks for this and gives L_WARN
- or keep the fallback case; further uses of the dst should be done based on the
dst->len (i.e. cmp_str() or LM_ERR("%.*s"))
I'd go for the second option. What do you think?
Also I've seen that the memory manager allocate and 'unsigned int'. So, if
shm/pkg_str_dup() is called with src->len < 0 it will probably fail (depending on
the negative value). In this case, I'd also force the fallback case.
---
Reply to this email directly or view it on GitHub:
https://github.com/kamailio/kamailio/pull/401#issuecomment-157984715