pespin submitted this change.

View Change

Approvals: Jenkins Builder: Verified osmith: Looks good to me, approved laforge: Looks good to me, but someone else must approve
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(-)

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);

To view, visit change 43425. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-MessageType: merged
Gerrit-Project: libosmo-sigtran
Gerrit-Branch: master
Gerrit-Change-Id: I44612fb0ea0728fab3147cf0eefcee17f96b29fa
Gerrit-Change-Number: 43425
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <pespin@sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: laforge <laforge@osmocom.org>
Gerrit-Reviewer: osmith <osmith@sysmocom.de>
Gerrit-Reviewer: pespin <pespin@sysmocom.de>