From: Guus Sliepen Date: Fri, 31 Oct 2014 16:42:06 +0000 (+0100) Subject: Fix free_connection() moving the wrong memory. X-Git-Url: http://git.meshlink.io/?p=utcp;a=commitdiff_plain;h=8d8944f2e16b8d11e54cb79e1d45023e84aed37f;hp=52eeda5e47e8a081cd2f94b78536c6376592a526 Fix free_connection() moving the wrong memory. --- diff --git a/utcp.c b/utcp.c index 3206cd7..e64eb24 100644 --- a/utcp.c +++ b/utcp.c @@ -117,9 +117,12 @@ static int32_t seqdiff(uint32_t a, uint32_t b) { // This gives O(log(N)) lookup time, O(N log(N)) insertion time and O(N) deletion time. static int compare(const void *va, const void *vb) { + assert(va && vb); + const struct utcp_connection *a = *(struct utcp_connection **)va; const struct utcp_connection *b = *(struct utcp_connection **)vb; + assert(a && b); assert(a->src && b->src); int c = (int)a->src - (int)b->src; @@ -147,7 +150,7 @@ static void free_connection(struct utcp_connection *c) { assert(cp); int i = cp - utcp->connections; - memmove(cp + i, cp + i + 1, (utcp->nconnections - i - 1) * sizeof *cp); + memmove(cp, cp + 1, (utcp->nconnections - i - 1) * sizeof *cp); utcp->nconnections--; free(c->sndbuf);