dexter has uploaded this change for review.
es10b_get_euicc_info: add explanatory comments regarding EUICCInfo2
onomondo-ipa has a built-in IoT eUICC emulation. This means that we
have to deal with two different EUICCInfo2 formats, which requires
additional logic in ipa_es10b_get_euicc_info_free to free the
allocated structs correctly. Since it is not immediately obvious
how the logic works, let's add some explanary comments to make it
obvious.
Related: SYS#8101
Change-Id: I282fa91a4099a771a353101b0ce17ae3daae9c42
---
M src/ipa/libipa/es10b_get_euicc_info.c
1 file changed, 15 insertions(+), 2 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/onomondo-ipa refs/changes/72/42872/1
diff --git a/src/ipa/libipa/es10b_get_euicc_info.c b/src/ipa/libipa/es10b_get_euicc_info.c
index db9c541..a0aba7d 100644
--- a/src/ipa/libipa/es10b_get_euicc_info.c
+++ b/src/ipa/libipa/es10b_get_euicc_info.c
@@ -105,14 +105,15 @@
if (!asn)
return -EINVAL;
+ /* Present EUICCInfo2 in SGP.32 format (see comment in header file) */
euicc_info->euicc_info_2 = asn;
- /* Also offer EUICCInfo2 in SGP.32 format */
+ /* Present derived EUICCInfo2 in SGP.32 format */
euicc_info->sgp32_euicc_info_2 = IPA_ALLOC(struct SGP32_EUICCInfo2);
convert_euicc_info_2(euicc_info->sgp32_euicc_info_2, euicc_info->euicc_info_2);
return 0;
-}
+}q
static int dec_get_euicc_info2_sgp32(struct ipa_es10b_euicc_info *euicc_info, const struct ipa_buf *es10b_res)
{
@@ -122,6 +123,10 @@
if (!asn)
return -EINVAL;
+ /* We do not present EUICCInfo2 in SGP.22 in this case (see comment in header file) */
+ euicc_info->euicc_info_2 = NULL;
+
+ /* Present derived EUICCInfo2 in SGP.32 format */
euicc_info->sgp32_euicc_info_2 = asn;
return 0;
@@ -190,9 +195,17 @@
ASN_STRUCT_FREE(asn_DEF_EUICCInfo1, res->euicc_info_1);
if (res->euicc_info_2) {
+ /* res->sgp32_euicc_info_2 has been created from res->euicc_info_2 (see also dec_get_euicc_info2). This
+ * means that res->euicc_info_2 holds the original output of the ASN.1 decoder while
+ * res->sgp32_euicc_info_2 only holds pointers to res->euicc_info_2. This is the reason why we use
+ * ASN_STRUCT_FREE on res->euicc_info_2 and IPA_FREE on res->sgp32_euicc_info_2.
+ * (see also comment in header file) */
IPA_FREE(res->sgp32_euicc_info_2);
ASN_STRUCT_FREE(asn_DEF_EUICCInfo2, res->euicc_info_2);
} else {
+ /* res->sgp32_euicc_info_2 has been decoded by the ASN.1 decoder, so we have to use the ASN_STRUCT_FREE
+ * to free it. (res->euicc_info_2 NULL in this case and does not require freeing.
+ * (see also dec_get_euicc_info2_sgp32) */
ASN_STRUCT_FREE(asn_DEF_SGP32_EUICCInfo2, res->sgp32_euicc_info_2);
}
To view, visit change 42872. To unsubscribe, or for help writing mail filters, visit settings.