<p>Harald Welte <strong>merged</strong> this change.</p><p><a href="https://gerrit.osmocom.org/14186">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Jenkins Builder: Verified
  Harald Welte: Looks good to me, approved

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">gsm48_decode_bcd_number2(): fix: return -ENOSPC on truncation<br><br>The documentation of gsm48_decode_bcd_number2() clearly states that<br>the output truncation is a erroneous case, so it should actually<br>return negative in such cases. Let's return -ENOSPC.<br><br>Change-Id: I75680f232001ba419a587fed4c24f32c70c3ad2b<br>---<br>M src/gsm/gsm48_ie.c<br>M tests/gsm0408/gsm0408_test.c<br>M tests/gsm0408/gsm0408_test.ok<br>3 files changed, 17 insertions(+), 7 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/gsm/gsm48_ie.c b/src/gsm/gsm48_ie.c</span><br><span>index 48d0d37..311836d 100644</span><br><span>--- a/src/gsm/gsm48_ie.c</span><br><span>+++ b/src/gsm/gsm48_ie.c</span><br><span>@@ -66,9 +66,15 @@</span><br><span>  * \param[in] bcd_lv  Length-Value part of to-be-decoded IE.</span><br><span>  * \param[in] input_len  Size of the bcd_lv buffer for bounds checking.</span><br><span>  * \param[in] h_len  Length of an optional header between L and V parts.</span><br><span style="color: hsl(0, 100%, 40%);">- * \return 0 in case of success, negative on error. Errors checked: no or too little input data, no or too little</span><br><span style="color: hsl(0, 100%, 40%);">- * output buffer size, IE length exceeds input data size, decoded number exceeds size of the output buffer. The output</span><br><span style="color: hsl(0, 100%, 40%);">- * is guaranteed to be nul terminated iff output_len > 0.</span><br><span style="color: hsl(120, 100%, 40%);">+ * \return 0 in case of success, negative on error.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * Errors checked:</span><br><span style="color: hsl(120, 100%, 40%);">+ *   - no or too little input data (-EIO),</span><br><span style="color: hsl(120, 100%, 40%);">+ *   - IE length exceeds input data size (-EIO),</span><br><span style="color: hsl(120, 100%, 40%);">+ *   - no or too little output buffer size (-ENOSPC),</span><br><span style="color: hsl(120, 100%, 40%);">+ *   - decoded number exceeds size of the output buffer (-ENOSPC).</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * The output is guaranteed to be nul terminated iff output_len > 0.</span><br><span>  */</span><br><span> int gsm48_decode_bcd_number2(char *output, size_t output_len,</span><br><span>                           const uint8_t *bcd_lv, size_t input_len,</span><br><span>@@ -102,6 +108,10 @@</span><br><span>         if (output_len >= 1)</span><br><span>              *output++ = '\0';</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ /* Indicate whether the output was truncated */</span><br><span style="color: hsl(120, 100%, 40%);">+       if (i < in_len)</span><br><span style="color: hsl(120, 100%, 40%);">+            return -ENOSPC;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>    return 0;</span><br><span> }</span><br><span> </span><br><span>diff --git a/tests/gsm0408/gsm0408_test.c b/tests/gsm0408/gsm0408_test.c</span><br><span>index 3ccbf4d..55c9b61 100644</span><br><span>--- a/tests/gsm0408/gsm0408_test.c</span><br><span>+++ b/tests/gsm0408/gsm0408_test.c</span><br><span>@@ -702,7 +702,7 @@</span><br><span>                /* Decoding test (one 5 digits do not fit) */</span><br><span>                .dec_hex   = "0a21436587092143658709",</span><br><span>             .dec_ascii = "123456789012345",</span><br><span style="color: hsl(0, 100%, 40%);">-               .dec_rc    = 0,</span><br><span style="color: hsl(120, 100%, 40%);">+               .dec_rc    = -ENOSPC,</span><br><span> </span><br><span>            /* Buffer length limitations */</span><br><span>              .dec_buf_lim = 15 + 1, /* 5 digits less */</span><br><span>@@ -778,7 +778,7 @@</span><br><span>                     printf("    - Expected: (rc=%d) '%s'\n",</span><br><span>                          test->dec_rc, test->dec_ascii);</span><br><span>                         printf("    -   Actual: (rc=%d) '%s'\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                             rc, rc == 0 ? buf_dec : "(none)");</span><br><span style="color: hsl(120, 100%, 40%);">+                          rc, (rc == 0 || rc == -ENOSPC) ? buf_dec : "(none)");</span><br><span>               }</span><br><span>    }</span><br><span> </span><br><span>diff --git a/tests/gsm0408/gsm0408_test.ok b/tests/gsm0408/gsm0408_test.ok</span><br><span>index 3938e87..b080411 100644</span><br><span>--- a/tests/gsm0408/gsm0408_test.ok</span><br><span>+++ b/tests/gsm0408/gsm0408_test.ok</span><br><span>@@ -173,8 +173,8 @@</span><br><span>     - Expected: (rc=-5) ''</span><br><span>     -   Actual: (rc=-5) ''</span><br><span>   - Decoding HEX (buffer limit=16) '0a21436587092143658709'...</span><br><span style="color: hsl(0, 100%, 40%);">-    - Expected: (rc=0) '123456789012345'</span><br><span style="color: hsl(0, 100%, 40%);">-    -   Actual: (rc=0) '123456789012345'</span><br><span style="color: hsl(120, 100%, 40%);">+    - Expected: (rc=-28) '123456789012345'</span><br><span style="color: hsl(120, 100%, 40%);">+    -   Actual: (rc=-28) '123456789012345'</span><br><span> - Running test: LV incorrect length</span><br><span>   - Decoding HEX (buffer limit=0) '05214365'...</span><br><span>     - Expected: (rc=-5) '(none)'</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/14186">change 14186</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/14186"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: libosmocore </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: merged </div>
<div style="display:none"> Gerrit-Change-Id: I75680f232001ba419a587fed4c24f32c70c3ad2b </div>
<div style="display:none"> Gerrit-Change-Number: 14186 </div>
<div style="display:none"> Gerrit-PatchSet: 6 </div>
<div style="display:none"> Gerrit-Owner: Vadim Yanitskiy <axilirator@gmail.com> </div>
<div style="display:none"> Gerrit-Reviewer: Harald Welte <laforge@gnumonks.org> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder (1000002) </div>