pespin has submitted this change. ( https://gerrit.osmocom.org/c/libosmo-sigtran/+/43425?usp=email )
Change subject: sccp2sua: sccp_to_xua_*(): propagate failure of sccp_addr_to_sua_ptr() ......................................................................
sccp2sua: sccp_to_xua_*(): propagate failure of sccp_addr_to_sua_ptr()
Until now, if osmo_sccp_addr_parse() failed on some address, the failure was not propagated and the address was silently discarded when building the message. Instead, better fail the conversion.
Change-Id: I44612fb0ea0728fab3147cf0eefcee17f96b29fa --- M src/sccp2sua.c 1 file changed, 26 insertions(+), 13 deletions(-)
Approvals: Jenkins Builder: Verified osmith: Looks good to me, approved laforge: Looks good to me, but someone else must approve
diff --git a/src/sccp2sua.c b/src/sccp2sua.c index 910ed84..bbca988 100644 --- a/src/sccp2sua.c +++ b/src/sccp2sua.c @@ -1173,7 +1173,8 @@ /* Variable Part */ if (!sccp_ptr_part_consistent(msg, &req->variable_called)) return NULL; - sccp_addr_to_sua_ptr(xua, SUA_IEI_DEST_ADDR, &req->variable_called, false); + if (sccp_addr_to_sua_ptr(xua, SUA_IEI_DEST_ADDR, &req->variable_called, false) < 0) + return NULL; /* Optional Part */ return sccp_to_xua_opt(msg, &req->optional_start, false, xua); } @@ -1382,10 +1383,12 @@ /* Variable Part */ if (!sccp_ptr_part_consistent(msg, &udt->variable_called)) return NULL; - sccp_addr_to_sua_ptr(xua, SUA_IEI_DEST_ADDR, &udt->variable_called, false); + if (sccp_addr_to_sua_ptr(xua, SUA_IEI_DEST_ADDR, &udt->variable_called, false) < 0) + return NULL; if (!sccp_ptr_part_consistent(msg, &udt->variable_calling)) return NULL; - sccp_addr_to_sua_ptr(xua, SUA_IEI_SRC_ADDR, &udt->variable_calling, false); + if (sccp_addr_to_sua_ptr(xua, SUA_IEI_SRC_ADDR, &udt->variable_calling, false) < 0) + return NULL; if (!sccp_ptr_part_consistent(msg, &udt->variable_data)) return NULL; sccp_data_to_sua_ptr(xua, SUA_IEI_DATA, &udt->variable_data); @@ -1436,10 +1439,12 @@ /* Variable Part */ if (!sccp_ptr_part_consistent(msg, &xudt->variable_called)) return NULL; - sccp_addr_to_sua_ptr(xua, SUA_IEI_DEST_ADDR, &xudt->variable_called, false); + if (sccp_addr_to_sua_ptr(xua, SUA_IEI_DEST_ADDR, &xudt->variable_called, false) < 0) + return NULL; if (!sccp_ptr_part_consistent(msg, &xudt->variable_calling)) return NULL; - sccp_addr_to_sua_ptr(xua, SUA_IEI_SRC_ADDR, &xudt->variable_calling, false); + if (sccp_addr_to_sua_ptr(xua, SUA_IEI_SRC_ADDR, &xudt->variable_calling, false) < 0) + return NULL; if (!sccp_ptr_part_consistent(msg, &xudt->variable_data)) return NULL; sccp_data_to_sua_ptr(xua, SUA_IEI_DATA, &xudt->variable_data); @@ -1486,10 +1491,12 @@ /* Variable Part */ if (!sccp_longptr_part_consistent(msg, (uint8_t *)&ludt->variable_called, false)) return NULL; - sccp_addr_to_sua_ptr(xua, SUA_IEI_DEST_ADDR, (uint8_t *)&ludt->variable_called, true); + if (sccp_addr_to_sua_ptr(xua, SUA_IEI_DEST_ADDR, (uint8_t *)&ludt->variable_called, true) < 0) + return NULL; if (!sccp_longptr_part_consistent(msg, (uint8_t *)&ludt->variable_calling, false)) return NULL; - sccp_addr_to_sua_ptr(xua, SUA_IEI_SRC_ADDR, (uint8_t *)&ludt->variable_calling, true); + if (sccp_addr_to_sua_ptr(xua, SUA_IEI_SRC_ADDR, (uint8_t *)&ludt->variable_calling, true) < 0) + return NULL; if (!sccp_longptr_part_consistent(msg, (uint8_t *)&ludt->variable_data, true)) return NULL; sccp_longdata_to_sua_ptr(xua, SUA_IEI_DATA, (uint8_t *)&ludt->variable_data); @@ -1528,10 +1535,12 @@ /* Variable Part */ if (!sccp_ptr_part_consistent(msg, &udts->variable_called)) return NULL; - sccp_addr_to_sua_ptr(xua, SUA_IEI_DEST_ADDR, &udts->variable_called, false); + if (sccp_addr_to_sua_ptr(xua, SUA_IEI_DEST_ADDR, &udts->variable_called, false) < 0) + return NULL; if (!sccp_ptr_part_consistent(msg, &udts->variable_calling)) return NULL; - sccp_addr_to_sua_ptr(xua, SUA_IEI_SRC_ADDR, &udts->variable_calling, false); + if (sccp_addr_to_sua_ptr(xua, SUA_IEI_SRC_ADDR, &udts->variable_calling, false) < 0) + return NULL; if (!sccp_ptr_part_consistent(msg, &udts->variable_data)) return NULL; sccp_data_to_sua_ptr(xua, SUA_IEI_DATA, &udts->variable_data); @@ -1583,10 +1592,12 @@ /* Variable Part */ if (!sccp_ptr_part_consistent(msg, (uint8_t *)&xudts->variable_called)) return NULL; - sccp_addr_to_sua_ptr(xua, SUA_IEI_DEST_ADDR, &xudts->variable_called, false); + if (sccp_addr_to_sua_ptr(xua, SUA_IEI_DEST_ADDR, &xudts->variable_called, false) < 0) + return NULL; if (!sccp_ptr_part_consistent(msg, (uint8_t *)&xudts->variable_calling)) return NULL; - sccp_addr_to_sua_ptr(xua, SUA_IEI_SRC_ADDR, &xudts->variable_calling, false); + if (sccp_addr_to_sua_ptr(xua, SUA_IEI_SRC_ADDR, &xudts->variable_calling, false) < 0) + return NULL; if (!sccp_ptr_part_consistent(msg, (uint8_t *)&xudts->variable_data)) return NULL; sccp_data_to_sua_ptr(xua, SUA_IEI_DATA, &xudts->variable_data); @@ -1626,10 +1637,12 @@ /* Variable Part */ if (!sccp_longptr_part_consistent(msg, (uint8_t *)&ludts->variable_called, false)) return NULL; - sccp_addr_to_sua_ptr(xua, SUA_IEI_DEST_ADDR, (uint8_t *)&ludts->variable_called, true); + if (sccp_addr_to_sua_ptr(xua, SUA_IEI_DEST_ADDR, (uint8_t *)&ludts->variable_called, true) < 0) + return NULL; if (!sccp_longptr_part_consistent(msg, (uint8_t *)&ludts->variable_calling, false)) return NULL; - sccp_addr_to_sua_ptr(xua, SUA_IEI_SRC_ADDR, (uint8_t *)&ludts->variable_calling, true); + if (sccp_addr_to_sua_ptr(xua, SUA_IEI_SRC_ADDR, (uint8_t *)&ludts->variable_calling, true) < 0) + return NULL; if (!sccp_longptr_part_consistent(msg, (uint8_t *)&ludts->variable_data, true)) return NULL; sccp_longdata_to_sua_ptr(xua, SUA_IEI_DATA, (uint8_t *)&ludts->variable_data);