File 0439-asn1-Fix-handling-of-SIZE-constraints.patch of Package erlang

From 6b098b7a37343e3f477e6778e7ccf649ad5f3c55 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bj=C3=B6rn=20Gustavsson?= <bjorn@erlang.org>
Date: Fri, 18 Aug 2023 09:43:24 +0200
Subject: [PATCH] asn1: Fix handling of SIZE constraints

A constraint such as:

    (SIZE (1..4), ...)

is supposed to be equivalent to:

    (SIZE (1..4, ...))

but the former variant was ignored by the ASN.1 compiler, causing the
size to be incorrectly encoded and decoded by PER backends.
---
 lib/asn1/src/asn1ct_check.erl                      | 14 ++++++++++++++
 .../asn1_SUITE_data/ConstraintEquivalence.asn1     |  2 ++
 2 files changed, 16 insertions(+)

diff --git a/lib/asn1/src/asn1ct_check.erl b/lib/asn1/src/asn1ct_check.erl
index 8b7144b5f9..f1e8a19128 100644
--- a/lib/asn1/src/asn1ct_check.erl
+++ b/lib/asn1/src/asn1ct_check.erl
@@ -3559,6 +3559,20 @@ range_union_1([]) ->
 finish_constraints(Cs) ->
     finish_constraints_1(Cs, fun smart_collapse/1).
 
+finish_constraints_1([{element_set,{'SizeConstraint',
+                                    {element_set,Root,none}},
+                       {set,[]}=Set}|T],
+                     Collapse) ->
+    %% Rewrite:
+    %%
+    %%     (SIZE (Lower..Upper), ...)
+    %%
+    %% to:
+    %%
+    %%     (SIZE (Lower..Upper, ...))
+
+    C = {element_set,{'SizeConstraint',{element_set,Root,Set}},none},
+    finish_constraints_1([C|T], Collapse);
 finish_constraints_1([{element_set,{Tag,{element_set,_,_}=Set0},none}|T],
 		     Collapse0) ->
     Collapse = collapse_fun(Tag),
diff --git a/lib/asn1/test/asn1_SUITE_data/ConstraintEquivalence.asn1 b/lib/asn1/test/asn1_SUITE_data/ConstraintEquivalence.asn1
index 648275dd66..291734e231 100644
--- a/lib/asn1/test/asn1_SUITE_data/ConstraintEquivalence.asn1
+++ b/lib/asn1/test/asn1_SUITE_data/ConstraintEquivalence.asn1
@@ -106,6 +106,8 @@ BEGIN
  ExtConstrainedStringX04 ::= IA5String (SIZE (1|2), ..., SIZE (1|2|3|4|5))
  ExtConstrainedStringX05 ::= IA5String (SIZE (1|2, ...), ...,
                                         SIZE (1|2|3|4|5, ...))
+ -- The following syntax is not recommended, but should work.
+ ExtConstrainedStringX06 ::= IA5String (SIZE (1..2), ...)
 
  integer4 INTEGER ::= 4
  integer11 INTEGER ::= 11
-- 
2.35.3

openSUSE Build Service is sponsored by