File 8462-Fix-encoding-of-constrained-BIT-STRING-for-JER.patch of Package erlang

From 778de86a59fbae3018946f1a06c5110984445e39 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bj=C3=B6rn=20Gustavsson?= <bjorn@erlang.org>
Date: Mon, 16 Jun 2025 13:25:42 +0200
Subject: [PATCH] Fix encoding of constrained BIT STRING for JER

---
 lib/asn1/src/asn1rtt_jer.erl      |  3 +++
 lib/asn1/test/asn1_SUITE.erl      | 22 ++++++++++++++++------
 lib/asn1/test/testPrimStrings.erl |  3 +++
 3 files changed, 22 insertions(+), 6 deletions(-)

diff --git a/lib/asn1/src/asn1rtt_jer.erl b/lib/asn1/src/asn1rtt_jer.erl
index 7d81ec74fd..e149325ce5 100644
--- a/lib/asn1/src/asn1rtt_jer.erl
+++ b/lib/asn1/src/asn1rtt_jer.erl
@@ -296,6 +296,9 @@ decode_jer(bit_string,#{<<"value">> := Str, <<"length">> := Length}) ->
     json2bitstring(binary_to_list(Str),Length);
 decode_jer({bit_string,FixedLength},Str) when is_binary(Str) ->
     json2bitstring(binary_to_list(Str),FixedLength);
+decode_jer({bit_string, {_, _}},
+          #{<<"value">> := Str, <<"length">> := Length}) ->
+    json2bitstring(binary_to_list(Str), Length);
 decode_jer({{bit_string_nnl,NNL},{_,_}},#{<<"value">> := Str, <<"length">> := Length}) ->
     BitStr = json2bitstring(binary_to_list(Str),Length),
     jer_bitstr2names(BitStr,NNL);
diff --git a/lib/asn1/test/asn1_SUITE.erl b/lib/asn1/test/asn1_SUITE.erl
index 11aa10eff9..c2761bfbb2 100644
--- a/lib/asn1/test/asn1_SUITE.erl
+++ b/lib/asn1/test/asn1_SUITE.erl
@@ -323,7 +323,12 @@ testCompactBitString(Config, Rule, Opts) ->
     testCompactBitString:otp_4869(Rule).
 
 testPrimStrings(Config) ->
-    test(Config, fun testPrimStrings/3, [ber,{ber,[der]},per,uper]).
+    test(Config, fun testPrimStrings/3, [ber,{ber,[der]},per,uper,jer]).
+testPrimStrings(Config, jer=Rule, Opts) ->
+    Files = ["PrimStrings", "BitStr"],
+    asn1_test_lib:compile_all(Files, Config, [Rule|Opts]),
+    testPrimStrings_cases(Rule, Opts),
+    testPrimStrings:more_strings(Rule);
 testPrimStrings(Config, Rule, Opts) ->
     LegacyOpts = [legacy_erlang_types|Opts],
     Files = ["PrimStrings", "BitStr"],
@@ -342,11 +347,16 @@ testPrimStrings_cases(Rule, Opts) ->
     testPrimStrings:octet_string(Rule),
     testPrimStrings:numeric_string(Rule),
     testPrimStrings:other_strings(Rule),
-    testPrimStrings:universal_string(Rule),
-    testPrimStrings:bmp_string(Rule),
-    testPrimStrings:times(Rule),
-    testPrimStrings:utf8_string(Rule),
-    testPrimStrings:fragmented(Rule).
+    case Rule of
+        jer ->
+            ok;
+        _ ->
+            testPrimStrings:universal_string(Rule),
+            testPrimStrings:bmp_string(Rule),
+            testPrimStrings:times(Rule),
+            testPrimStrings:utf8_string(Rule),
+            testPrimStrings:fragmented(Rule)
+    end.
 
 testExternal(Config) -> test(Config, fun testExternal/3).
 testExternal(Config, Rule, Opts) ->
diff --git a/lib/asn1/test/testPrimStrings.erl b/lib/asn1/test/testPrimStrings.erl
index b7f0323301..78216e5790 100644
--- a/lib/asn1/test/testPrimStrings.erl
+++ b/lib/asn1/test/testPrimStrings.erl
@@ -102,6 +102,8 @@ bit_string(Rules, Opts) ->
 	{ber,[]} ->
 	    %% XXX
 	    ok;
+        {jer,[]} ->
+            ok;
 	{_,_} ->
 	    %% DER, PER, UPER
 	    consistent_def_enc('BsDef1',
@@ -236,6 +238,7 @@ bit_string(Rules, Opts) ->
 
     case Rules of
 	ber -> ok;
+        jer -> ok;
 	_ -> per_bs_strings()
     end.
 
-- 
2.43.0

openSUSE Build Service is sponsored by