There are a couple of instances of allocating memory with `malloc`, followed by copying a string to it with `strncpy` and adding an explicit assignment of `\0` to terminate the string. Replace them with `strndup`. Add an enum to name indices of output keys. Signed-off-by: Jeremy Sowden <jeremy@xxxxxxxxxx> --- filter/ulogd_filter_PWSNIFF.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/filter/ulogd_filter_PWSNIFF.c b/filter/ulogd_filter_PWSNIFF.c index 934ff0e09c4f..ef9e02115d84 100644 --- a/filter/ulogd_filter_PWSNIFF.c +++ b/filter/ulogd_filter_PWSNIFF.c @@ -35,10 +35,14 @@ #define DEBUGP(format, args...) #endif - #define PORT_POP3 110 #define PORT_FTP 21 +enum pwsniff_output_keys { + PWSNIFF_OUT_KEY_USER, + PWSNIFF_OUT_KEY_PASS, +}; + static uint16_t pwsniff_ports[] = { PORT_POP3, PORT_FTP, @@ -116,21 +120,17 @@ static int interp_pwsniff(struct ulogd_pluginstance *pi) if (len) { char *ptr; - ptr = (char *) malloc(len+1); + ptr = strndup((char *)begp, len); if (!ptr) return ULOGD_IRET_ERR; - strncpy(ptr, (char *)begp, len); - ptr[len] = '\0'; - okey_set_ptr(&ret[0], ptr); + okey_set_ptr(&ret[PWSNIFF_OUT_KEY_USER], ptr); } if (pw_len) { char *ptr; - ptr = (char *) malloc(pw_len+1); + ptr = strndup((char *)pw_begp, pw_len); if (!ptr) return ULOGD_IRET_ERR; - strncpy(ptr, (char *)pw_begp, pw_len); - ptr[pw_len] = '\0'; - okey_set_ptr(&ret[1], ptr); + okey_set_ptr(&ret[PWSNIFF_OUT_KEY_PASS], ptr); } return ULOGD_IRET_OK; } -- 2.33.0