<p>pespin has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-pcu/+/16996">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">csn1: shuffle decrements of remaining_bits_len<br><br>So that they always occur next to an increment of bit_offset.<br><br>Port from wireshark.git 1c81971d4292438ffdf83e9f9b9ab96c133c785b.<br><br>Change-Id: I7474e9d632e068d6e33b0a502b81d4fff1f48802<br>---<br>M src/csn1.cpp<br>1 file changed, 14 insertions(+), 20 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-pcu refs/changes/96/16996/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/csn1.cpp b/src/csn1.cpp</span><br><span>index 1174347..20b6c6f 100644</span><br><span>--- a/src/csn1.cpp</span><br><span>+++ b/src/csn1.cpp</span><br><span>@@ -1243,6 +1243,7 @@</span><br><span>  LOGPC(DCSN1, LOGL_NOTICE, "%s = %u | ", pDescr->sz , (unsigned)bitvec_read_field(vector, &readIndex, 1));</span><br><span>         /* existNextElement() returned FALSE, 1 bit consumed */</span><br><span>         bit_offset++;</span><br><span style="color: hsl(120, 100%, 40%);">+        remaining_bits_len --;</span><br><span> </span><br><span>         /* Store the counted number of elements of the array */</span><br><span>         *pui8DATA(data, (gint16)pDescr->descr.value) = ElementCount;</span><br><span>@@ -1567,7 +1568,6 @@</span><br><span> </span><br><span>         if (remaining_bits_len >= no_of_bits)</span><br><span>         {</span><br><span style="color: hsl(0, 100%, 40%);">-          remaining_bits_len -= no_of_bits;</span><br><span>           if (no_of_bits <= 8)</span><br><span>           {</span><br><span>             pui8      = pui8DATA(data, pDescr->offset);</span><br><span>@@ -1608,7 +1608,6 @@</span><br><span> </span><br><span>         if (remaining_bits_len >= no_of_bits)</span><br><span>         {</span><br><span style="color: hsl(0, 100%, 40%);">-          remaining_bits_len -= (no_of_bits*nCount);</span><br><span>           if (no_of_bits <= 8)</span><br><span>           {</span><br><span>             pui8 = pui8DATA(data, pDescr->offset);</span><br><span>@@ -1617,6 +1616,7 @@</span><br><span>           bitvec_write_field(vector, &writeIndex, *pui8, no_of_bits);</span><br><span>               LOGPC(DCSN1, LOGL_NOTICE, "%s = %u | ", pDescr->sz , (unsigned)*pui8);</span><br><span>               pui8++;</span><br><span style="color: hsl(120, 100%, 40%);">+              remaining_bits_len -= no_of_bits;</span><br><span>               bit_offset += no_of_bits;</span><br><span>             } while (--nCount > 0);</span><br><span>           }</span><br><span>@@ -1887,7 +1887,7 @@</span><br><span>             pui8  = pui8DATA(data, pDescr->offset);</span><br><span>       bitvec_write_field(vector, &writeIndex, *pui8, 1);</span><br><span>             LOGPC(DCSN1, LOGL_NOTICE, "%s = %u | ", pDescr->sz , (unsigned)*pui8);</span><br><span style="color: hsl(0, 100%, 40%);">-            remaining_bits_len -= 1;</span><br><span style="color: hsl(120, 100%, 40%);">+            remaining_bits_len --;</span><br><span>             bit_offset++;</span><br><span>             pDescr++;</span><br><span>             break;</span><br><span>@@ -1904,8 +1904,6 @@</span><br><span>             guint8 no_of_bits = (guint8) pDescr->i;</span><br><span>             if (remaining_bits_len >= no_of_bits)</span><br><span>             {</span><br><span style="color: hsl(0, 100%, 40%);">-              remaining_bits_len -= no_of_bits;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>               if (no_of_bits <= 8)</span><br><span>               {</span><br><span>                 pui8      = pui8DATA(data, pDescr->offset);</span><br><span>@@ -1934,6 +1932,7 @@</span><br><span>               return ProcessError(writeIndex,"csnStreamEncoder", CSN_ERROR_GENERAL, pDescr);</span><br><span>             }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+            remaining_bits_len -= no_of_bits;</span><br><span>             bit_offset += no_of_bits;</span><br><span>             pDescr++;</span><br><span>             break;</span><br><span>@@ -2026,7 +2025,6 @@</span><br><span> </span><br><span>             if (remaining_bits_len >= no_of_bits)</span><br><span>             {</span><br><span style="color: hsl(0, 100%, 40%);">-              remaining_bits_len -= (no_of_bits*nCount);</span><br><span>               if (no_of_bits <= 8)</span><br><span>               {</span><br><span>                 pui8 = pui8DATA(data, pDescr->offset);</span><br><span>@@ -2035,6 +2033,7 @@</span><br><span>                  bitvec_write_field(vector, &writeIndex, *pui8, no_of_bits);</span><br><span>                   LOGPC(DCSN1, LOGL_NOTICE, "%s = %u | ", pDescr->sz , (unsigned)*pui8);</span><br><span>                   pui8++;</span><br><span style="color: hsl(120, 100%, 40%);">+                  remaining_bits_len -= no_of_bits;</span><br><span>                   bit_offset += no_of_bits;</span><br><span>                 } while (--nCount > 0);</span><br><span>               }</span><br><span>@@ -2191,8 +2190,9 @@</span><br><span>         writeIndex--;</span><br><span>        bitvec_write_field(vector, &writeIndex, fExist, 1);</span><br><span>         LOGPC(DCSN1, LOGL_NOTICE, "%s = %u | ", pDescr->sz, (unsigned)fExist);</span><br><span style="color: hsl(120, 100%, 40%);">+        remaining_bits_len --;</span><br><span style="color: hsl(120, 100%, 40%);">+        bit_offset++;</span><br><span>         pDescr++;</span><br><span style="color: hsl(0, 100%, 40%);">-        remaining_bits_len -= 1;</span><br><span> </span><br><span>         if (!exist)</span><br><span>         {</span><br><span>@@ -2222,9 +2222,9 @@</span><br><span>   bitvec_write_field(vector, &writeIndex, *pui8, 1);</span><br><span>         fExist = *pui8;</span><br><span>         LOGPC(DCSN1, LOGL_NOTICE, "%s = %u | ", pDescr->sz , (unsigned)*pui8);</span><br><span style="color: hsl(0, 100%, 40%);">-        remaining_bits_len -= 1;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        ++bit_offset;</span><br><span style="color: hsl(120, 100%, 40%);">+        remaining_bits_len --;</span><br><span style="color: hsl(120, 100%, 40%);">+        bit_offset++;</span><br><span> </span><br><span>         if (fExist == 0)</span><br><span>         { /* Skip 'i' entries */</span><br><span>@@ -2247,12 +2247,6 @@</span><br><span>           /* skip 'i' entries + this entry */</span><br><span>           pDescr += pDescr->i + 1;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-          /* pDescr now must be pointing to a CSN_END entry, if not this is an error */</span><br><span style="color: hsl(0, 100%, 40%);">-          if ( pDescr->type != CSN_END )</span><br><span style="color: hsl(0, 100%, 40%);">-          { /* substract one more bit from remaining_bits_len to make the "not enough bits" error to be triggered */</span><br><span style="color: hsl(0, 100%, 40%);">-            remaining_bits_len--;</span><br><span style="color: hsl(0, 100%, 40%);">-          }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>           /* set the data member to "not exist" */</span><br><span>           //*pui8 = 0;</span><br><span>           break;</span><br><span>@@ -2265,8 +2259,8 @@</span><br><span>         writeIndex--;</span><br><span>       bitvec_write_field(vector, &writeIndex, fExist, 1);</span><br><span>         pui8++;</span><br><span style="color: hsl(0, 100%, 40%);">-        remaining_bits_len -= 1;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+        remaining_bits_len --;</span><br><span>         bit_offset++;</span><br><span> </span><br><span>         if (fExist == 0)</span><br><span>@@ -2299,7 +2293,6 @@</span><br><span> </span><br><span>         if (no_of_bits > 0)</span><br><span>         {</span><br><span style="color: hsl(0, 100%, 40%);">-          remaining_bits_len -= no_of_bits;</span><br><span> </span><br><span>           if (remaining_bits_len < 0)</span><br><span>           {</span><br><span>@@ -2317,6 +2310,7 @@</span><br><span>               pui8++;</span><br><span>               no_of_bits  -= nB1;</span><br><span>               bit_offset += nB1; /* (nB1 is no_of_bits Mod 8) */</span><br><span style="color: hsl(120, 100%, 40%);">+              remaining_bits_len -= nB1;</span><br><span>             }</span><br><span> </span><br><span>             /* remaining no_of_bits is a multiple of 8 or 0 */</span><br><span>@@ -2326,6 +2320,7 @@</span><br><span>               LOGPC(DCSN1, LOGL_NOTICE, "%s = %u | ", pDescr->sz , (unsigned)*pui8);</span><br><span>               pui8++;</span><br><span>               no_of_bits -= 8;</span><br><span style="color: hsl(120, 100%, 40%);">+              remaining_bits_len -= 8;</span><br><span>             }</span><br><span>           }</span><br><span>         }</span><br><span>@@ -2444,8 +2439,6 @@</span><br><span> </span><br><span>         if (count > 0)</span><br><span>         {</span><br><span style="color: hsl(0, 100%, 40%);">-          remaining_bits_len -= count * 8;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>           if (remaining_bits_len < 0)</span><br><span>           {</span><br><span>             return ProcessError(writeIndex,"csnStreamEncoder", CSN_ERROR_NEED_MORE_BITS_TO_UNPACK, pDescr);</span><br><span>@@ -2459,6 +2452,7 @@</span><br><span>             LOGPC(DCSN1, LOGL_NOTICE, "%s = %u | ", pDescr->sz , (unsigned)*pui8);</span><br><span>             pui8++;</span><br><span>             bit_offset += 8;</span><br><span style="color: hsl(120, 100%, 40%);">+            remaining_bits_len -= 8;</span><br><span>             count--;</span><br><span>           }</span><br><span>         }</span><br><span>@@ -2491,7 +2485,6 @@</span><br><span>           bitvec_write_field(vector, &writeIndex, *pui8, no_of_bits);</span><br><span>           LOGPC(DCSN1, LOGL_NOTICE, "%s = %u | ", pDescr->sz , (unsigned)*pui8);</span><br><span>           pui8++;</span><br><span style="color: hsl(0, 100%, 40%);">-          remaining_bits_len -= no_of_bits;</span><br><span>           ElementCount--;</span><br><span> </span><br><span>           if (remaining_bits_len < 0)</span><br><span>@@ -2500,6 +2493,7 @@</span><br><span>           }</span><br><span> </span><br><span>           bit_offset += no_of_bits;</span><br><span style="color: hsl(120, 100%, 40%);">+          remaining_bits_len -= no_of_bits;</span><br><span>         }</span><br><span> </span><br><span>      bitvec_write_field(vector, &writeIndex, !Tag, 1);</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-pcu/+/16996">change 16996</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/osmo-pcu/+/16996"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-pcu </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I7474e9d632e068d6e33b0a502b81d4fff1f48802 </div>
<div style="display:none"> Gerrit-Change-Number: 16996 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>