<p>laforge <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/libosmocore/+/23401">View Change</a></p><div style="white-space:pre-wrap">Approvals:
pespin: Looks good to me, but someone else must approve
laforge: Looks good to me, approved
Jenkins Builder: Verified
</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">tlv: Fix length returned by t{l16,16l}v_put<br><br>Every other function returns a pointer to the first byte after the tlv<br>that was just written.<br><br>tl16v seems to be a copy and paste error from tlv16 above and t16lv seems<br>to count the 16-bit tag twice.<br><br>The new tests verify that the return value of *_put(buf, tag, len, val)<br>points to buf + *_GROSS_LEN(len).<br><br>Change-Id: I268a7e11fb5dce67ce1bd7974ab86c4d2bd002f7<br>---<br>M include/osmocom/gsm/tlv.h<br>M tests/tlv/tlv_test.c<br>2 files changed, 34 insertions(+), 2 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmocom/gsm/tlv.h b/include/osmocom/gsm/tlv.h</span><br><span>index dc61de1..7e6dfb5 100644</span><br><span>--- a/include/osmocom/gsm/tlv.h</span><br><span>+++ b/include/osmocom/gsm/tlv.h</span><br><span>@@ -148,7 +148,7 @@</span><br><span> *buf++ = len >> 8;</span><br><span> *buf++ = len & 0xff;</span><br><span> memcpy(buf, val, len);</span><br><span style="color: hsl(0, 100%, 40%);">- return buf + len*2;</span><br><span style="color: hsl(120, 100%, 40%);">+ return buf + len;</span><br><span> }</span><br><span> </span><br><span> /*! put (append) a TL16 field. */</span><br><span>@@ -168,7 +168,7 @@</span><br><span> *buf++ = tag & 0xff;</span><br><span> *buf++ = len;</span><br><span> memcpy(buf, val, len);</span><br><span style="color: hsl(0, 100%, 40%);">- return buf + len + 2;</span><br><span style="color: hsl(120, 100%, 40%);">+ return buf + len;</span><br><span> }</span><br><span> </span><br><span> /*! put (append) a TvLV field */</span><br><span>diff --git a/tests/tlv/tlv_test.c b/tests/tlv/tlv_test.c</span><br><span>index 3b4f441..fdd15ab 100644</span><br><span>--- a/tests/tlv/tlv_test.c</span><br><span>+++ b/tests/tlv/tlv_test.c</span><br><span>@@ -423,6 +423,37 @@</span><br><span> OSMO_ASSERT(TLVP_VAL(&dec, 0x23) == NULL);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+static void test_tlv_lens()</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ uint16_t buf_len;</span><br><span style="color: hsl(120, 100%, 40%);">+ uint8_t buf[512];</span><br><span style="color: hsl(120, 100%, 40%);">+ uint8_t val[512] = { 0 };</span><br><span style="color: hsl(120, 100%, 40%);">+ uint16_t x;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ for (x = 0; x < 16; x++) {</span><br><span style="color: hsl(120, 100%, 40%);">+ buf_len = lv_put(buf, x, val) - buf;</span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_ASSERT(buf_len == LV_GROSS_LEN(x));</span><br><span style="color: hsl(120, 100%, 40%);">+ buf_len = tlv_put(buf, 0x23, x, val) - buf;</span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_ASSERT(buf_len == TLV_GROSS_LEN(x));</span><br><span style="color: hsl(120, 100%, 40%);">+ buf_len = tlv16_put(buf, 0x23, x, (uint16_t *) val) - buf;</span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_ASSERT(buf_len == TLV16_GROSS_LEN(x));</span><br><span style="color: hsl(120, 100%, 40%);">+ buf_len = tl16v_put(buf, 0x23, x, val) - buf;</span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_ASSERT(buf_len == TL16V_GROSS_LEN(x));</span><br><span style="color: hsl(120, 100%, 40%);">+ buf_len = t16lv_put(buf, 0x2342, x, val) - buf;</span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_ASSERT(buf_len == T16LV_GROSS_LEN(x));</span><br><span style="color: hsl(120, 100%, 40%);">+ buf_len = tvlv_put(buf, 0x23, x, val) - buf;</span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_ASSERT(buf_len == TVLV_GROSS_LEN(x));</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ for (x = 250; x < 300; x++) {</span><br><span style="color: hsl(120, 100%, 40%);">+ buf_len = tl16v_put(buf, 0x23, x, val) - buf;</span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_ASSERT(buf_len == TL16V_GROSS_LEN(x));</span><br><span style="color: hsl(120, 100%, 40%);">+ buf_len = tvlv_put(buf, 0x23, x, val) - buf;</span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_ASSERT(buf_len == TVLV_GROSS_LEN(x));</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> int main(int argc, char **argv)</span><br><span> {</span><br><span> //osmo_init_logging2(ctx, &info);</span><br><span>@@ -431,6 +462,7 @@</span><br><span> test_tlv_repeated_ie();</span><br><span> test_tlv_encoder();</span><br><span> test_tlv_parser_bounds();</span><br><span style="color: hsl(120, 100%, 40%);">+ test_tlv_lens();</span><br><span> </span><br><span> printf("Done.\n");</span><br><span> return EXIT_SUCCESS;</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/libosmocore/+/23401">change 23401</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/+/23401"/><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: I268a7e11fb5dce67ce1bd7974ab86c4d2bd002f7 </div>
<div style="display:none"> Gerrit-Change-Number: 23401 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: daniel <dwillmann@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </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>