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