I am not a C developer so I have to guess here.
For me it looks like the `static` address of `buff` is returned by `ip_addr2a`.
```c char *ip_addr2a(struct ip_addr *ip) { static char buff[IP_ADDR_MAX_STR_SIZE]; // ... return buff; } ```
-- https://github.com/kamailio/kamailio/blob/1535031a6c992c23270050793b23d290a6...
If that's the case, I think every user of that function should copy the value from that address instead of remembering the address. Otherwise it is always the same address for every call of `ip_addr2a` and subsequent calls overwrite the value of the previous call.
Unfortunately, the sipcapture module uses the returned value directly: ```c si->address_str.s = ip_addr2a(&si->address); ``` -- https://github.com/kamailio/kamailio/blob/1535031a6c992c23270050793b23d290a6...
I tested with the following code and I think it confirms my theory because `foo` changes to "bar".
```c #include <stdio.h> #include <string.h>
char *a(char* in);
int main() { char *foo = a("foo"); printf("foo %08x -> %08x = %s\n", &foo, foo, foo);
char *bar = a("bar"); printf("foo %08x -> %08x = %s\n", &foo, foo, foo); printf("bar %08x -> %08x = %s\n", &bar, bar, bar); }
char *a(char* in) { static char out[10]; strcpy(out, in); return out; } ```
Output: ```plain foo 0c3399d8 -> b37ba018 = foo foo 0c3399d8 -> b37ba018 = bar bar 0c3399e0 -> b37ba018 = bar ```
However, I can't explain why this should be any different in previous kamailio versions.