From: pcarana Date: Wed, 27 Mar 2019 23:37:54 +0000 (-0600) Subject: Fix bug: the summary was sending wrong data due to bad mem copy X-Git-Tag: v0.0.2~52^2~8 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c7f20712855a25761a5f379d64fadde1a2c9c991;p=thirdparty%2FFORT-validator.git Fix bug: the summary was sending wrong data due to bad mem copy --- diff --git a/src/rtr/pdu_sender.c b/src/rtr/pdu_sender.c index 34d28b41..df4a7ca7 100644 --- a/src/rtr/pdu_sender.c +++ b/src/rtr/pdu_sender.c @@ -206,6 +206,10 @@ send_payload_pdus(struct sender_common *common) int error; vrps = malloc(sizeof(struct vrp)); + if (vrps == NULL) { + warn("Couldn't allocate VRPs to send PDUs"); + return -errno; + } len = get_vrps_delta(common->start_serial, common->end_serial, &vrps); if (len == 0) goto end; diff --git a/src/vrps.c b/src/vrps.c index d67972e3..aa69e4ee 100644 --- a/src/vrps.c +++ b/src/vrps.c @@ -163,7 +163,6 @@ delta_add_vrp(struct delta *delta, struct vrp *vrp) static int delta_summary(struct delta *base_delta, struct delta *result) { - struct delta summary_delta; struct vrps *base, *search_list; struct vrp *cursor; int error; @@ -174,18 +173,18 @@ delta_summary(struct delta *base_delta, struct delta *result) * with a more efficient algorithm. */ - error = delta_init(&summary_delta); + error = delta_init(result); if (error) return error; - summary_delta.serial = base_delta->serial; + result->serial = base_delta->serial; /* First check for announcements */ base = &base_delta->vrps; search_list = &state.base_db.vrps; ARRAYLIST_FOREACH(base, cursor) if (vrp_is_new(search_list, cursor)) { cursor->flags = FLAG_ANNOUNCEMENT; - error = delta_add_vrp(&summary_delta, cursor); + error = delta_add_vrp(result, cursor); if (error) { warnx("Couldn't add announcement to summary"); return error; @@ -198,15 +197,13 @@ delta_summary(struct delta *base_delta, struct delta *result) ARRAYLIST_FOREACH(base, cursor) if (vrp_is_new(search_list, cursor)) { cursor->flags = FLAG_WITHDRAWAL; - error = delta_add_vrp(&summary_delta, cursor); + error = delta_add_vrp(result, cursor); if (error) { warnx("Couldn't add withdrawal to summary"); return error; } } - memcpy(result, &summary_delta, sizeof(summary_delta)); - delta_destroy(&summary_delta); return 0; } @@ -249,7 +246,7 @@ copy_vrps(struct vrp **dst, struct vrp *src, unsigned int len) return; } *dst = tmp; - *dst = memcpy(*dst, src, len * sizeof(struct vrp)); + memcpy(*dst, src, len * sizeof(struct vrp)); } int