<!-- 
RSS generated by JIRA (8.20.10#820010-sha1:ace47f9899e9ee25d7157d59aa17ab06aee30d3d) at Wed Feb 07 20:10:27 UTC 2024

It is possible to restrict the fields that are returned in this document by specifying the 'field' parameter in your request.
For example, to request only the issue key and summary append 'field=key&field=summary' to the URL of your request.
-->
<rss version="0.92" >
<channel>
    <title>OpenDaylight JIRA</title>
    <link>https://jira.opendaylight.org</link>
    <description>This file is an XML representation of an issue</description>
    <language>en-us</language>    <build-info>
        <version>8.20.10</version>
        <build-number>820010</build-number>
        <build-date>22-06-2022</build-date>
    </build-info>


<item>
            <title>[MDSAL-661] Generated enforcers fail to intepret length restriction</title>
                <link>https://jira.opendaylight.org/browse/MDSAL-661</link>
                <project id="10137" key="MDSAL">mdsal</project>
                    <description>&lt;p&gt;Currently this YANG:&lt;/p&gt;

&lt;p&gt;&#160;&lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;
&#160; typedef foo { 
&#160;&#160;&#160; type string { 
&#160;&#160;&#160;&#160;&#160; length 1; 
&#160;&#160;&#160; } 
&#160; } &lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&#160;&lt;/p&gt;

&lt;p&gt;translates to this enforcement code:&lt;/p&gt;

&lt;p&gt;&#160;&lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;
 &#160;&#160;&#160;&lt;span class=&quot;code-keyword&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;code-keyword&quot;&gt;static&lt;/span&gt; void check_valueLength(&lt;span class=&quot;code-keyword&quot;&gt;final&lt;/span&gt; &lt;span class=&quot;code-object&quot;&gt;String&lt;/span&gt; value) { 
 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;span class=&quot;code-keyword&quot;&gt;final&lt;/span&gt; &lt;span class=&quot;code-object&quot;&gt;int&lt;/span&gt; length = value.length(); 
 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; (length == 1) { 
 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&lt;span class=&quot;code-keyword&quot;&gt;return&lt;/span&gt;; 
 &#160;&#160;&#160;&#160;&#160;&#160;&#160;} 
 &#160;&#160;&#160;&#160;&#160;&#160;&#160;CodeHelpers.throwInvalidLength(&lt;span class=&quot;code-quote&quot;&gt;&quot;[[1..1]]&quot;&lt;/span&gt;, value); 
 &#160;&#160;&#160;} &lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;which looks good on surface, but has a slight flaw. RFC7950 specifies that:&lt;/p&gt;

&lt;p&gt;&#160;&lt;/p&gt;

&lt;p&gt;&#160;&lt;/p&gt;
&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;A &quot;length&quot; statement restricts the number of Unicode characters in
the string.&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;What we are checking is the number of code &lt;b&gt;units&lt;/b&gt;, not code &lt;b&gt;points&lt;/b&gt;. The difference becomes obvious when characters outside the Basic Multilingual Plane are encountered:&lt;/p&gt;

&lt;p&gt;&#160;&lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;
&lt;span class=&quot;code-comment&quot;&gt;// U+1F31E
&lt;/span&gt;&lt;span class=&quot;code-keyword&quot;&gt;final&lt;/span&gt; &lt;span class=&quot;code-object&quot;&gt;String&lt;/span&gt; str = &lt;span class=&quot;code-quote&quot;&gt;&quot;&#65533;&quot;&lt;/span&gt;
&lt;span class=&quot;code-comment&quot;&gt;// Encodes as &lt;span class=&quot;code-quote&quot;&gt;&quot;\u0xD83C\u0xDF1E&quot;&lt;/span&gt;, i.e. two code units
&lt;/span&gt;assertEquals(2, str.length());
&lt;span class=&quot;code-comment&quot;&gt;// The two code units together yield a single code point
&lt;/span&gt;assertEquals(1, str.codePointCount(0, str.length());
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&#160;&lt;/p&gt;

&lt;p&gt;&#160;&lt;/p&gt;

&lt;p&gt;&#160;&lt;/p&gt;</description>
                <environment></environment>
        <key id="33841">MDSAL-661</key>
            <summary>Generated enforcers fail to intepret length restriction</summary>
                <type id="10104" iconUrl="https://jira.opendaylight.org/secure/viewavatar?size=xsmall&amp;avatarId=10303&amp;avatarType=issuetype">Bug</type>
                                            <priority id="3" iconUrl="https://jira.opendaylight.org/images/icons/priorities/major.svg">Medium</priority>
                        <status id="5" iconUrl="https://jira.opendaylight.org/images/icons/statuses/resolved.png" description="A resolution has been taken, and it is awaiting verification by reporter. From here issues are either reopened, or are closed.">Resolved</status>
                    <statusCategory id="3" key="done" colorName="green"/>
                                    <resolution id="10000">Done</resolution>
                                        <assignee username="rovarga">Robert Varga</assignee>
                                    <reporter username="rovarga">Robert Varga</reporter>
                        <labels>
                    </labels>
                <created>Tue, 23 Feb 2021 23:58:58 +0000</created>
                <updated>Mon, 19 Apr 2021 06:28:00 +0000</updated>
                            <resolved>Wed, 24 Feb 2021 19:52:20 +0000</resolved>
                                                    <fixVersion>8.0.0</fixVersion>
                    <fixVersion>6.0.9</fixVersion>
                    <fixVersion>5.0.17</fixVersion>
                    <fixVersion>7.0.6</fixVersion>
                                    <component>Binding codegen</component>
                        <due></due>
                            <votes>0</votes>
                                    <watches>1</watches>
                                                                                                                    <issuelinks>
                            <issuelinktype id="10003">
                    <name>Relates</name>
                                            <outwardlinks description="relates to">
                                        <issuelink>
            <issuekey id="33783">YANGTOOLS-1224</issuekey>
        </issuelink>
                            </outwardlinks>
                                                        </issuelinktype>
                    </issuelinks>
                <attachments>
                    </attachments>
                <subtasks>
                    </subtasks>
                <customfields>
                                                                            <customfield id="customfield_11400" key="com.atlassian.jira.plugins.jira-development-integration-plugin:devsummary">
                        <customfieldname>Development</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <customfield id="customfield_10000" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>0|i03xcv:</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                </customfields>
    </item>
</channel>
</rss>