diff --git a/src/otr/otr.c b/src/otr/otr.c index 765bc048..9f0192e1 100644 --- a/src/otr/otr.c +++ b/src/otr/otr.c @@ -621,8 +621,10 @@ static enum otr_msg_status enqueue_otr_fragment(const char *msg, struct otr_peer opc->msg_size += msg_len + 1; } - /* Copy msg to full message since we already have a part pending. */ - strncpy(opc->full_msg + opc->msg_len, msg, msg_len); + /* Copy msg to full message since we already have a part pending. Note + * that we do not copy `msg`'s trailing nul byte because we explicit + * set opc->full_msg[opc->msg_len] to nul afterwards. */ + memcpy(opc->full_msg + opc->msg_len, msg, msg_len); opc->msg_len += msg_len; opc->full_msg[opc->msg_len] = '\0'; @@ -664,7 +666,7 @@ static enum otr_msg_status enqueue_otr_fragment(const char *msg, struct otr_peer return ret; } /* Copy full message with NULL terminated byte. */ - strncpy(opc->full_msg, msg, msg_len); + memcpy(opc->full_msg, msg, msg_len); opc->msg_len += msg_len; opc->msg_size += ((msg_len * 2) + 1); opc->full_msg[opc->msg_len] = '\0';