<p>fixeria <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/libosmocore/+/17214">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Jenkins Builder: Verified
  pespin: Looks good to me, but someone else must approve
  laforge: Looks good to me, approved

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">bitvec: fix bitvec_unhex(): do not return 1 on success<br><br>This function is supposed to return 0 on success or 1 in case of<br>error. However, it used to return 1 even in case of success. The<br>reason is that length of the input string was not taken into<br>account and sscanf() was failing on '\0'.<br><br>Let's use osmo_hexparse() and rely on its return value.<br><br>P.S. Funny that the unit test expectations were wrong too.<br><br>Change-Id: I441a22c7964bb31688071d8bcf6a282d8c0187ff<br>---<br>M src/bitvec.c<br>M tests/bitvec/bitvec_test.ok<br>2 files changed, 12 insertions(+), 15 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/bitvec.c b/src/bitvec.c</span><br><span>index 5130705..10aa776 100644</span><br><span>--- a/src/bitvec.c</span><br><span>+++ b/src/bitvec.c</span><br><span>@@ -45,6 +45,7 @@</span><br><span> #include <osmocom/core/bits.h></span><br><span> #include <osmocom/core/bitvec.h></span><br><span> #include <osmocom/core/panic.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/core/utils.h></span><br><span> </span><br><span> #define BITNUM_FROM_COMP(byte, bit)       ((byte*8)+bit)</span><br><span> </span><br><span>@@ -457,17 +458,13 @@</span><br><span>  */</span><br><span> int bitvec_unhex(struct bitvec *bv, const char *src)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-  unsigned i;</span><br><span style="color: hsl(0, 100%, 40%);">-     unsigned val;</span><br><span style="color: hsl(0, 100%, 40%);">-   unsigned write_index = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-       unsigned digits = bv->data_len * 2;</span><br><span style="color: hsl(120, 100%, 40%);">+        int rc;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-     for (i = 0; i < digits; i++) {</span><br><span style="color: hsl(0, 100%, 40%);">-               if (sscanf(src + i, "%1x", &val) < 1) {</span><br><span style="color: hsl(0, 100%, 40%);">-                        return 1;</span><br><span style="color: hsl(0, 100%, 40%);">-               }</span><br><span style="color: hsl(0, 100%, 40%);">-               bitvec_write_field(bv, &write_index, val, 4);</span><br><span style="color: hsl(0, 100%, 40%);">-       }</span><br><span style="color: hsl(120, 100%, 40%);">+     rc = osmo_hexparse(src, bv->data, bv->data_len);</span><br><span style="color: hsl(120, 100%, 40%);">+        if (rc < 0) /* turn -1 into 1 in case of error */</span><br><span style="color: hsl(120, 100%, 40%);">+          return 1;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   bv->cur_bit = rc * 8;</span><br><span>     return 0;</span><br><span> }</span><br><span> </span><br><span>diff --git a/tests/bitvec/bitvec_test.ok b/tests/bitvec/bitvec_test.ok</span><br><span>index 2974554..b118502 100644</span><br><span>--- a/tests/bitvec/bitvec_test.ok</span><br><span>+++ b/tests/bitvec/bitvec_test.ok</span><br><span>@@ -119,19 +119,19 @@</span><br><span> bitvec: 00 00 00 00 fc 82 84 86 88 8a 8c 8e 90 92 94 96 98 9a 9c 9e a0 a2 a4 a6 a8 aa ac ae b0 b2 b4 fc 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 </span><br><span> out: ff 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f 50 51 52 53 54 55 56 57 58 59 5a ff </span><br><span> === end test_byte_ops ===</span><br><span style="color: hsl(0, 100%, 40%);">-1 -=> cur_bit=184</span><br><span style="color: hsl(120, 100%, 40%);">+0 -=> cur_bit=184</span><br><span> 48282407a6a074227201000b2b2b2b2b2b2b2b2b2b2b2b0000000000000000000000000000000000000000000000000000000000000000000000000000000000</span><br><span> 48282407a6a074227201000b2b2b2b2b2b2b2b2b2b2b2b</span><br><span style="color: hsl(0, 100%, 40%);">-1 -=> cur_bit=184</span><br><span style="color: hsl(120, 100%, 40%);">+0 -=> cur_bit=184</span><br><span> 47240c00400000000000000079eb2ac9402b2b2b2b2b2b0000000000000000000000000000000000000000000000000000000000000000000000000000000000</span><br><span> 47240c00400000000000000079eb2ac9402b2b2b2b2b2b</span><br><span style="color: hsl(0, 100%, 40%);">-1 -=> cur_bit=184</span><br><span style="color: hsl(120, 100%, 40%);">+0 -=> cur_bit=184</span><br><span> 47283c367513ba333004242b2b2b2b2b2b2b2b2b2b2b2b0000000000000000000000000000000000000000000000000000000000000000000000000000000000</span><br><span> 47283c367513ba333004242b2b2b2b2b2b2b2b2b2b2b2b</span><br><span style="color: hsl(0, 100%, 40%);">-1 -=> cur_bit=184</span><br><span style="color: hsl(120, 100%, 40%);">+0 -=> cur_bit=184</span><br><span> deadface000000000000000000000000000000beeffeed0000000000000000000000000000000000000000000000000000000000000000000000000000000000</span><br><span> DEADFACE000000000000000000000000000000BEEFFEED</span><br><span style="color: hsl(0, 100%, 40%);">-0 -=> cur_bit=512</span><br><span style="color: hsl(120, 100%, 40%);">+1 -=> cur_bit=0</span><br><span> fffffaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</span><br><span> FFFFFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB</span><br><span> arrr...</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/libosmocore/+/17214">change 17214</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/c/libosmocore/+/17214"/><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-Change-Id: I441a22c7964bb31688071d8bcf6a282d8c0187ff </div>
<div style="display:none"> Gerrit-Change-Number: 17214 </div>
<div style="display:none"> Gerrit-PatchSet: 3 </div>
<div style="display:none"> Gerrit-Owner: fixeria <axilirator@gmail.com> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: fixeria <axilirator@gmail.com> </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>