diff options
Diffstat (limited to 'lib')
88 files changed, 439 insertions, 1649 deletions
diff --git a/lib/asn1/doc/src/notes.xml b/lib/asn1/doc/src/notes.xml index 284a2b4ce5..22ca7840de 100644 --- a/lib/asn1/doc/src/notes.xml +++ b/lib/asn1/doc/src/notes.xml @@ -32,32 +32,6 @@ <p>This document describes the changes made to the asn1 application.</p> -<section><title>Asn1 5.0.9</title> - - <section><title>Fixed Bugs and Malfunctions</title> - <list> - <item> - <p> - All incorrect (that is, all) uses of "can not" has been - corrected to "cannot" in source code comments, - documentation, examples, and so on.</p> - <p> - Own Id: OTP-14282 Aux Id: PR-1891 </p> - </item> - <item> - <p>Corrected problems with the following value - definitions:</p> <list> <item>value of SEQUENCE OF CHOICE - with extensions</item> <item>value of CHOICE with - extensions</item> <item>DEFAULT used with OCTET - STRING</item> </list> - <p> - Own Id: OTP-15697 Aux Id: PR-2159 </p> - </item> - </list> - </section> - -</section> - <section><title>Asn1 5.0.8</title> <section><title>Fixed Bugs and Malfunctions</title> diff --git a/lib/asn1/vsn.mk b/lib/asn1/vsn.mk index 018beda307..69f1af28e8 100644 --- a/lib/asn1/vsn.mk +++ b/lib/asn1/vsn.mk @@ -1 +1 @@ -ASN1_VSN = 5.0.9 +ASN1_VSN = 5.0.8 diff --git a/lib/common_test/doc/src/ct_hooks.xml b/lib/common_test/doc/src/ct_hooks.xml index 7f0dda1298..ff9969ebc3 100644 --- a/lib/common_test/doc/src/ct_hooks.xml +++ b/lib/common_test/doc/src/ct_hooks.xml @@ -109,7 +109,7 @@ </func> <func> - <name since="OTP 22.0">Module:post_groups(SuiteName, GroupDefs) -> NewGroupDefs</name> + <name since="OTP @OTP-14746@">Module:post_groups(SuiteName, GroupDefs) -> NewGroupDefs</name> <fsummary>Called after groups/0.</fsummary> <type> <v>SuiteName = atom()</v> @@ -165,7 +165,7 @@ </func> <func> - <name since="OTP 22.0">Module:post_all(SuiteName, Return, GroupDefs) -> NewReturn</name> + <name since="OTP @OTP-14746@">Module:post_all(SuiteName, Return, GroupDefs) -> NewReturn</name> <fsummary>Called after all/0.</fsummary> <type> <v>SuiteName = atom()</v> diff --git a/lib/common_test/doc/src/notes.xml b/lib/common_test/doc/src/notes.xml index bbb46fced3..a68cc3cca7 100644 --- a/lib/common_test/doc/src/notes.xml +++ b/lib/common_test/doc/src/notes.xml @@ -33,80 +33,6 @@ <file>notes.xml</file> </header> -<section><title>Common_Test 1.18</title> - - <section><title>Fixed Bugs and Malfunctions</title> - <list> - <item> - <p> - All incorrect (that is, all) uses of "can not" has been - corrected to "cannot" in source code comments, - documentation, examples, and so on.</p> - <p> - Own Id: OTP-14282 Aux Id: PR-1891 </p> - </item> - <item> - <p> - The test result when a hook function fails is in general - the same as if the function that the hook is associated - with fails. For example, if <c>post_init_per_testcase</c> - fails the result is that the test case is skipped, as is - the case when <c>init_per_testcase</c> fails.This, - however, was earlier not true for timetrap timeouts or - other error situations where the process running the hook - function was killed. This is now corrected, so the error - handling should be the same no matter how the hook - function fails.</p> - <p> - *** POTENTIAL INCOMPATIBILITY ***</p> - <p> - Own Id: OTP-15717 Aux Id: ERIERL-334 </p> - </item> - <item> - <p> - In some rare cases, when two common_test nodes used the - same log directory, a timing problem could occur which - caused common_test to crash because it's log cache file - was unexpectedly empty. This is now corrected.</p> - <p> - Own Id: OTP-15758 Aux Id: ERIERL-342 </p> - </item> - </list> - </section> - - - <section><title>Improvements and New Features</title> - <list> - <item> - <p> - Two new common_test hook functions are introduced:</p> - <p> - <c>post_groups/2</c>, which is called after - <c>Suite:groups/0</c><br/> <c>post_all/3</c>, which is - called after <c>Suite:all/0</c></p> - <p> - These functions allow modifying the return values from - the <c>groups/0</c> and <c>all/0</c> functions, - respectively.</p> - <p> - A new term, <c>{testcase,TestCase,RepeatProperties}</c> - is now also allowed in the return from <c>all/0</c>. This - can be used for repeating a single test case a specific - number of times, or until it fails or succeeds once.</p> - <p> - Own Id: OTP-14746 Aux Id: ERIERL-143 </p> - </item> - <item> - <p> Use <c>ssh</c> instead of <c>rsh</c> as the default - remote shell. </p> - <p> - Own Id: OTP-15633 Aux Id: PR-1787 </p> - </item> - </list> - </section> - -</section> - <section><title>Common_Test 1.17.1</title> <section><title>Improvements and New Features</title> diff --git a/lib/common_test/vsn.mk b/lib/common_test/vsn.mk index ddc518f474..14a3622a00 100644 --- a/lib/common_test/vsn.mk +++ b/lib/common_test/vsn.mk @@ -1 +1 @@ -COMMON_TEST_VSN = 1.18 +COMMON_TEST_VSN = 1.17.1 diff --git a/lib/compiler/doc/src/notes.xml b/lib/compiler/doc/src/notes.xml index 05b7cbc940..d45dfef8f3 100644 --- a/lib/compiler/doc/src/notes.xml +++ b/lib/compiler/doc/src/notes.xml @@ -32,91 +32,6 @@ <p>This document describes the changes made to the Compiler application.</p> -<section><title>Compiler 7.4</title> - - <section><title>Fixed Bugs and Malfunctions</title> - <list> - <item> - <p><c>record_info/2</c> is a pseudo-function that - requires literal arguments known at compile time. - Therefore, the following usage is illegal: <c>fun - record/info/2</c>. The compiler would crash when during - compilation of that kind of code. Corrected to issue a - compilation error.</p> - <p> - Own Id: OTP-15760 Aux Id: ERL-907 </p> - </item> - </list> - </section> - - - <section><title>Improvements and New Features</title> - <list> - <item> - <p> - The compiler has been rewritten to internally use an - intermediate representation based on Static Single - Assignment (SSA). The new intermediate representation - makes more optimizations possible.</p> - <p> - Most noticeable is that the binary matching optimizations - are now applicable in many more circumstances than - before.</p> - <p> - Another noticeable change is that type optimizations are - now applied across local function calls, and will remove - a lot more redundant type tests than before.</p> - <p> - Own Id: OTP-14894 Aux Id: ERL-714 </p> - </item> - <item> - <p>Funs are no longer created when they are only used - locally, greatly improving the performance of named funs - and "fun-wrapped" macros.</p> - <p> - Own Id: OTP-15273 Aux Id: ERL-639 </p> - </item> - <item> - <p>All compiler options that can be given in the source - file can now also be given in the option list or from the - command line for <c>erlc</c>.</p> - <p>Specifically, the option - <c>{nowarn_deprecated_function,MFAs}</c> was only - recognized when given in the file with the attribute - <c>-compile()</c>. The option - <c>{nowarn_unused_function,FAs}</c> was incorrectly - documented to only work in a file, but it also worked - when given in the option list.</p> - <p> - Own Id: OTP-15456</p> - </item> - <item> - <p>Internal documentation has now been added to the - <em>Erts</em> and <em>Compiler</em> applications.</p> - <p>The internal documents for <em>Erts</em> describe - miscellaneous interesting implementation details. Those - details can change at any time.</p> - <p>The internal documentation for <em>Compiler</em> - documents the API for the Core Erlang modules. While we - will not change those APIs without good reason, we don't - give the same guarantees about backward compatibility as - for the rest of the APIs in OTP.</p> - <p> - Own Id: OTP-15715</p> - </item> - <item> - <p> There are new compiler options <c>nowarn_removed</c> - and <c>{nowarn_removed,Items}</c> to suppress warnings - for functions and modules that have been removed from - OTP.</p> - <p> - Own Id: OTP-15749 Aux Id: ERL-904 </p> - </item> - </list> - </section> - -</section> - <section><title>Compiler 7.3.2</title> <section><title>Fixed Bugs and Malfunctions</title> diff --git a/lib/compiler/src/beam_ssa_pre_codegen.erl b/lib/compiler/src/beam_ssa_pre_codegen.erl index bad43a9c4e..bf99e8fc26 100644 --- a/lib/compiler/src/beam_ssa_pre_codegen.erl +++ b/lib/compiler/src/beam_ssa_pre_codegen.erl @@ -342,21 +342,22 @@ make_save_point_dict_1([], Ctx, I, Acc) -> [{Ctx,I}|Acc]. bs_restores([{L,#b_blk{is=Is,last=Last}}|Bs], CtxChain, D0, Rs0) -> - FPos = case D0 of - #{L:=Pos0} -> Pos0; - #{} -> #{} - end, - {SPos,Rs} = bs_restores_is(Is, CtxChain, FPos, Rs0), - D = bs_update_successors(Last, SPos, FPos, D0), + InPos = maps:get(L, D0, #{}), + {SuccPos, FailPos, Rs} = bs_restores_is(Is, CtxChain, InPos, InPos, Rs0), + + D = bs_update_successors(Last, SuccPos, FailPos, D0), bs_restores(Bs, CtxChain, D, Rs); bs_restores([], _, _, Rs) -> Rs. bs_update_successors(#b_br{succ=Succ,fail=Fail}, SPos, FPos, D) -> join_positions([{Succ,SPos},{Fail,FPos}], D); -bs_update_successors(#b_switch{fail=Fail,list=List}, SPos, _FPos, D) -> +bs_update_successors(#b_switch{fail=Fail,list=List}, SPos, FPos, D) -> + SPos = FPos, %Assertion. Update = [{L,SPos} || {_,L} <- List] ++ [{Fail,SPos}], join_positions(Update, D); -bs_update_successors(#b_ret{}, _, _, D) -> D. +bs_update_successors(#b_ret{}, SPos, FPos, D) -> + SPos = FPos, %Assertion. + D. join_positions([{L,MapPos0}|T], D) -> case D of @@ -382,75 +383,91 @@ join_positions_1(MapPos0, MapPos1) -> end, MapPos1), maps:merge(MapPos0, MapPos2). +%% +%% Updates the restore and position maps according to the given instructions. +%% +%% Note that positions may be updated even when a match fails; if a match +%% requires a restore, the position at the fail block will be the position +%% we've *restored to* and not the one we entered the current block with. +%% + bs_restores_is([#b_set{op=bs_start_match,dst=Start}|Is], - CtxChain, PosMap0, Rs) -> - PosMap = PosMap0#{Start=>Start}, - bs_restores_is(Is, CtxChain, PosMap, Rs); + CtxChain, SPos0, FPos, Rs) -> + %% We only allow one match per block. + SPos0 = FPos, %Assertion. + SPos = SPos0#{Start=>Start}, + bs_restores_is(Is, CtxChain, SPos, FPos, Rs); bs_restores_is([#b_set{op=bs_match,dst=NewPos,args=Args}=I|Is], - CtxChain, PosMap0, Rs0) -> + CtxChain, SPos0, FPos0, Rs0) -> + SPos0 = FPos0, %Assertion. Start = bs_subst_ctx(NewPos, CtxChain), [_,FromPos|_] = Args, - case PosMap0 of + case SPos0 of #{Start:=FromPos} -> %% Same position, no restore needed. - PosMap = case bs_match_type(I) of + SPos = case bs_match_type(I) of plain -> %% Update position to new position. - PosMap0#{Start:=NewPos}; + SPos0#{Start:=NewPos}; _ -> %% Position will not change (test_unit %% instruction or no instruction at %% all). - PosMap0#{Start:=FromPos} + SPos0#{Start:=FromPos} end, - bs_restores_is(Is, CtxChain, PosMap, Rs0); + bs_restores_is(Is, CtxChain, SPos, FPos0, Rs0); #{Start:=_} -> %% Different positions, might need a restore instruction. case bs_match_type(I) of none -> - %% The tail test will be optimized away. - %% No need to do a restore. - PosMap = PosMap0#{Start:=FromPos}, - bs_restores_is(Is, CtxChain, PosMap, Rs0); + %% This is a tail test that will be optimized away. + %% There's no need to do a restore, and all + %% positions are unchanged. + bs_restores_is(Is, CtxChain, SPos0, FPos0, Rs0); test_unit -> %% This match instruction will be replaced by %% a test_unit instruction. We will need a %% restore. The new position will be the position %% restored to (NOT NewPos). - PosMap = PosMap0#{Start:=FromPos}, + SPos = SPos0#{Start:=FromPos}, + FPos = FPos0#{Start:=FromPos}, Rs = Rs0#{NewPos=>{Start,FromPos}}, - bs_restores_is(Is, CtxChain, PosMap, Rs); + bs_restores_is(Is, CtxChain, SPos, FPos, Rs); plain -> %% Match or skip. Position will be changed. - PosMap = PosMap0#{Start:=NewPos}, + SPos = SPos0#{Start:=NewPos}, + FPos = FPos0#{Start:=FromPos}, Rs = Rs0#{NewPos=>{Start,FromPos}}, - bs_restores_is(Is, CtxChain, PosMap, Rs) + bs_restores_is(Is, CtxChain, SPos, FPos, Rs) end end; bs_restores_is([#b_set{op=bs_extract,args=[FromPos|_]}|Is], - CtxChain, PosMap, Rs) -> + CtxChain, SPos, FPos, Rs) -> Start = bs_subst_ctx(FromPos, CtxChain), - #{Start:=FromPos} = PosMap, %Assertion. - bs_restores_is(Is, CtxChain, PosMap, Rs); + #{Start:=FromPos} = SPos, %Assertion. + #{Start:=FromPos} = FPos, %Assertion. + bs_restores_is(Is, CtxChain, SPos, FPos, Rs); bs_restores_is([#b_set{op=call,dst=Dst,args=Args}|Is], - CtxChain, PosMap0, Rs0) -> - {Rs,PosMap1} = bs_restore_args(Args, PosMap0, CtxChain, Dst, Rs0), - PosMap = bs_invalidate_pos(Args, PosMap1, CtxChain), - bs_restores_is(Is, CtxChain, PosMap, Rs); -bs_restores_is([#b_set{op=landingpad}|Is], CtxChain, PosMap0, Rs) -> + CtxChain, SPos0, FPos0, Rs0) -> + {Rs, SPos1, FPos1} = bs_restore_args(Args, SPos0, FPos0, CtxChain, Dst, Rs0), + {SPos, FPos} = bs_invalidate_pos(Args, SPos1, FPos1, CtxChain), + bs_restores_is(Is, CtxChain, SPos, FPos, Rs); +bs_restores_is([#b_set{op=landingpad}|Is], CtxChain, SPos0, FPos0, Rs) -> %% We can land here from any point, so all positions are invalid. - PosMap = maps:map(fun(_Start,_Pos) -> unknown end, PosMap0), - bs_restores_is(Is, CtxChain, PosMap, Rs); + Invalidate = fun(_Start,_Pos) -> unknown end, + SPos = maps:map(Invalidate, SPos0), + FPos = maps:map(Invalidate, FPos0), + bs_restores_is(Is, CtxChain, SPos, FPos, Rs); bs_restores_is([#b_set{op=Op,dst=Dst,args=Args}|Is], - CtxChain, PosMap0, Rs0) + CtxChain, SPos0, FPos0, Rs0) when Op =:= bs_test_tail; Op =:= bs_get_tail -> - {Rs,PosMap} = bs_restore_args(Args, PosMap0, CtxChain, Dst, Rs0), - bs_restores_is(Is, CtxChain, PosMap, Rs); -bs_restores_is([_|Is], CtxChain, PosMap, Rs) -> - bs_restores_is(Is, CtxChain, PosMap, Rs); -bs_restores_is([], _CtxChain, PosMap, Rs) -> - {PosMap,Rs}. + {Rs, SPos, FPos} = bs_restore_args(Args, SPos0, FPos0, CtxChain, Dst, Rs0), + bs_restores_is(Is, CtxChain, SPos, FPos, Rs); +bs_restores_is([_|Is], CtxChain, SPos, FPos, Rs) -> + bs_restores_is(Is, CtxChain, SPos, FPos, Rs); +bs_restores_is([], _CtxChain, SPos, FPos, Rs) -> + {SPos, FPos, Rs}. bs_match_type(#b_set{args=[#b_literal{val=skip},_Ctx, #b_literal{val=binary},_Flags, @@ -464,40 +481,42 @@ bs_match_type(_) -> %% Call instructions leave the match position in an undefined state, %% requiring us to invalidate each affected argument. -bs_invalidate_pos([#b_var{}=Arg|Args], PosMap0, CtxChain) -> +bs_invalidate_pos([#b_var{}=Arg|Args], SPos0, FPos0, CtxChain) -> Start = bs_subst_ctx(Arg, CtxChain), - case PosMap0 of + case SPos0 of #{Start:=_} -> - PosMap = PosMap0#{Start:=unknown}, - bs_invalidate_pos(Args, PosMap, CtxChain); + SPos = SPos0#{Start:=unknown}, + FPos = FPos0#{Start:=unknown}, + bs_invalidate_pos(Args, SPos, FPos, CtxChain); #{} -> %% Not a match context. - bs_invalidate_pos(Args, PosMap0, CtxChain) + bs_invalidate_pos(Args, SPos0, FPos0, CtxChain) end; -bs_invalidate_pos([_|Args], PosMap, CtxChain) -> - bs_invalidate_pos(Args, PosMap, CtxChain); -bs_invalidate_pos([], PosMap, _CtxChain) -> - PosMap. +bs_invalidate_pos([_|Args], SPos, FPos, CtxChain) -> + bs_invalidate_pos(Args, SPos, FPos, CtxChain); +bs_invalidate_pos([], SPos, FPos, _CtxChain) -> + {SPos, FPos}. -bs_restore_args([#b_var{}=Arg|Args], PosMap0, CtxChain, Dst, Rs0) -> +bs_restore_args([#b_var{}=Arg|Args], SPos0, FPos0, CtxChain, Dst, Rs0) -> Start = bs_subst_ctx(Arg, CtxChain), - case PosMap0 of + case SPos0 of #{Start:=Arg} -> %% Same position, no restore needed. - bs_restore_args(Args, PosMap0, CtxChain, Dst, Rs0); + bs_restore_args(Args, SPos0, FPos0, CtxChain, Dst, Rs0); #{Start:=_} -> %% Different positions, need a restore instruction. - PosMap = PosMap0#{Start:=Arg}, + SPos = SPos0#{Start:=Arg}, + FPos = FPos0#{Start:=Arg}, Rs = Rs0#{Dst=>{Start,Arg}}, - bs_restore_args(Args, PosMap, CtxChain, Dst, Rs); + bs_restore_args(Args, SPos, FPos, CtxChain, Dst, Rs); #{} -> %% Not a match context. - bs_restore_args(Args, PosMap0, CtxChain, Dst, Rs0) + bs_restore_args(Args, SPos0, FPos0, CtxChain, Dst, Rs0) end; -bs_restore_args([_|Args], PosMap, CtxChain, Dst, Rs) -> - bs_restore_args(Args, PosMap, CtxChain, Dst, Rs); -bs_restore_args([], PosMap, _CtxChain, _Dst, Rs) -> - {Rs,PosMap}. +bs_restore_args([_|Args], SPos, FPos, CtxChain, Dst, Rs) -> + bs_restore_args(Args, SPos, FPos, CtxChain, Dst, Rs); +bs_restore_args([], SPos, FPos, _CtxChain, _Dst, Rs) -> + {Rs,SPos,FPos}. %% Insert all bs_save and bs_restore instructions. diff --git a/lib/compiler/src/beam_validator.erl b/lib/compiler/src/beam_validator.erl index efd2be94cb..09a5a6c104 100644 --- a/lib/compiler/src/beam_validator.erl +++ b/lib/compiler/src/beam_validator.erl @@ -1604,8 +1604,13 @@ infer_types_1(#value{op={bif,'=:='},args=[LHS,RHS]}) -> end; infer_types_1(#value{op={bif,element},args=[{integer,Index}=Key,Tuple]}) -> fun(Val, S) -> - Type = get_term_type(Val, S), - update_type(fun meet/2,{tuple,[Index],#{ Key => Type }}, Tuple, S) + case is_value_alive(Tuple, S) of + true -> + Type = {tuple,[Index], #{ Key => get_term_type(Val, S) }}, + update_type(fun meet/2, Type, Tuple, S); + false -> + S + end end; infer_types_1(#value{op={bif,is_atom},args=[Src]}) -> infer_type_test_bif({atom,[]}, Src); @@ -1629,7 +1634,10 @@ infer_types_1(#value{op={bif,is_tuple},args=[Src]}) -> infer_type_test_bif({tuple,[0],#{}}, Src); infer_types_1(#value{op={bif,tuple_size}, args=[Tuple]}) -> fun({integer,Arity}, S) -> - update_type(fun meet/2, {tuple,Arity,#{}}, Tuple, S); + case is_value_alive(Tuple, S) of + true -> update_type(fun meet/2, {tuple,Arity,#{}}, Tuple, S); + false -> S + end; (_, S) -> S end; infer_types_1(_) -> @@ -1637,7 +1645,10 @@ infer_types_1(_) -> infer_type_test_bif(Type, Src) -> fun({atom,true}, S) -> - update_type(fun meet/2, Type, Src, S); + case is_value_alive(Src, S) of + true -> update_type(fun meet/2, Type, Src, S); + false -> S + end; (_, S) -> S end. @@ -2274,6 +2285,9 @@ get_raw_type(#value_ref{}=Ref, #vst{current=#st{vs=Vs}}) -> get_raw_type(Src, #vst{}) -> get_literal_type(Src). +is_value_alive(#value_ref{}=Ref, #vst{current=#st{vs=Vs}}) -> + is_map_key(Ref, Vs). + get_literal_type(nil=T) -> T; get_literal_type({atom,A}=T) when is_atom(A) -> T; get_literal_type({float,F}=T) when is_float(F) -> T; diff --git a/lib/compiler/test/beam_validator_SUITE.erl b/lib/compiler/test/beam_validator_SUITE.erl index de5a3c2873..6b1438abdd 100644 --- a/lib/compiler/test/beam_validator_SUITE.erl +++ b/lib/compiler/test/beam_validator_SUITE.erl @@ -35,7 +35,7 @@ map_field_lists/1,cover_bin_opt/1, val_dsetel/1,bad_tuples/1,bad_try_catch_nesting/1, receive_stacked/1,aliased_types/1,type_conflict/1, - infer_on_eq/1]). + infer_on_eq/1,infer_dead_value/1]). -include_lib("common_test/include/ct.hrl"). @@ -65,7 +65,7 @@ groups() -> map_field_lists,cover_bin_opt,val_dsetel, bad_tuples,bad_try_catch_nesting, receive_stacked,aliased_types,type_conflict, - infer_on_eq]}]. + infer_on_eq,infer_dead_value]}]. init_per_suite(Config) -> test_lib:recompile(?MODULE), @@ -679,6 +679,27 @@ infer_on_eq_4(T) -> true = erlang:tuple_size(T) =:= 1, {ok, erlang:element(1, T)}. +%% ERIERL-348; types were inferred for dead values, causing validation to fail. + +infer_dead_value(Config) when is_list(Config) -> + a = idv_1({a, b, c, d, e, f, g}, {0, 0, 0, 0, 0, 0, 0}), + b = idv_1({a, b, c, d, 0, 0, 0}, {a, b, c, d, 0, 0, 0}), + c = idv_1({0, 0, 0, 0, 0, f, g}, {0, 0, 0, 0, 0, f, g}), + error = idv_1(gurka, gaffel), + ok. + +idv_1({_A, _B, _C, _D, _E, _F, _G}, + {0, 0, 0, 0, 0, 0, 0}) -> + a; +idv_1({A, B, C, D,_E, _F, _G}=_Tuple1, + {A, B, C, D, 0, 0, 0}=_Tuple2) -> + b; +idv_1({_A, _B, _C, _D, _E, F, G}, + {0, 0, 0, 0, 0, F, G}) -> + c; +idv_1(_A, _B) -> + error. + %%%------------------------------------------------------------------------- transform_remove(Remove, Module) -> diff --git a/lib/compiler/test/bs_match_SUITE.erl b/lib/compiler/test/bs_match_SUITE.erl index 41e4918b1e..d97f49c56e 100644 --- a/lib/compiler/test/bs_match_SUITE.erl +++ b/lib/compiler/test/bs_match_SUITE.erl @@ -1891,15 +1891,37 @@ expression_before_match_1(R) -> %% Make sure that context positions are updated on calls. restore_on_call(Config) when is_list(Config) -> - ok = restore_on_call_1(<<0, 1, 2>>). + ok = restore_on_call_plain(<<0, 1, 2>>), + <<"x">> = restore_on_call_match(<<0, "x">>), + ok. -restore_on_call_1(<<0, Rest/binary>>) -> - <<2>> = restore_on_call_2(Rest), - <<2>> = restore_on_call_2(Rest), %% {badmatch, <<>>} on missing restore. +restore_on_call_plain(<<0, Rest/binary>>) -> + <<2>> = restore_on_call_plain_1(Rest), + %% {badmatch, <<>>} on missing restore. + <<2>> = restore_on_call_plain_1(Rest), ok. -restore_on_call_2(<<1, Rest/binary>>) -> Rest; -restore_on_call_2(Other) -> Other. +restore_on_call_plain_1(<<1, Rest/binary>>) -> Rest; +restore_on_call_plain_1(Other) -> Other. + +%% Calls a function that moves the match context passed to it, and then matches +%% on its result to confuse the reposition algorithm's success/fail logic. +restore_on_call_match(<<0, Bin/binary>>) -> + case skip_until_zero(Bin) of + {skipped, Rest} -> + Rest; + not_found -> + %% The match context did not get repositioned before the + %% bs_get_tail instruction here. + Bin + end. + +skip_until_zero(<<0,Rest/binary>>) -> + {skipped, Rest}; +skip_until_zero(<<_C,Rest/binary>>) -> + skip_until_zero(Rest); +skip_until_zero(_) -> + not_found. %% 'catch' must invalidate positions. restore_after_catch(Config) when is_list(Config) -> @@ -1983,5 +2005,4 @@ do_matching_meets_apply(_Bin, {Handler, State}) -> %% Another case of the above. Handler:abs(State). - id(I) -> I. diff --git a/lib/compiler/vsn.mk b/lib/compiler/vsn.mk index 494de072ff..a523627384 100644 --- a/lib/compiler/vsn.mk +++ b/lib/compiler/vsn.mk @@ -1 +1 @@ -COMPILER_VSN = 7.4 +COMPILER_VSN = 7.3.2 diff --git a/lib/crypto/doc/src/notes.xml b/lib/crypto/doc/src/notes.xml index 1f549f3295..195c9d029d 100644 --- a/lib/crypto/doc/src/notes.xml +++ b/lib/crypto/doc/src/notes.xml @@ -31,137 +31,6 @@ </header> <p>This document describes the changes made to the Crypto application.</p> -<section><title>Crypto 4.5</title> - - <section><title>Fixed Bugs and Malfunctions</title> - <list> - <item> - <p> - Fixed a bug in error return for <c>crypto:poly1305/2</c>. - It returned the atom <c>notsup</c> instead of the - exception <c>notsup</c>.</p> - <p> - *** POTENTIAL INCOMPATIBILITY ***</p> - <p> - Own Id: OTP-15677</p> - </item> - <item> - <p> - The cipher chacha20 was introduced in OpenSSL 1.1.0. - However, it could in a very odd situation, fail for - versions less than OpenSSL 1.1.0d. It is therefore - disabled for those versions.</p> - <p> - *** POTENTIAL INCOMPATIBILITY ***</p> - <p> - Own Id: OTP-15678</p> - </item> - </list> - </section> - - - <section><title>Improvements and New Features</title> - <list> - <item> - <p> A new <c>rand</c> module algorithm, <c>exro928ss</c> - (Xoroshiro928**), has been implemented. It has got a - really long period and good statistical quality for all - output bits, while still being only about 50% slower than - the default algorithm. </p><p> The same generator is also - used as a long period counter in a new <c>crypto</c> - plugin for the <c>rand</c> module, algorithm - <c>crypto_aes</c>. This plugin uses AES-256 to scramble - the counter which buries any detectable statistical - artifacts. Scrambling is done in chunks which are cached - to get good amortized speed (about half of the default - algorithm). </p> - <p> - Own Id: OTP-14461 Aux Id: PR-1857 </p> - </item> - <item> - <p> - Crypto's single C-file is splitted into multiple files. - The different coding styles in the different parts are - unified into a single style.</p> - <p> - Own Id: OTP-14732 Aux Id: PR-2068, PR-2095 </p> - </item> - <item> - <p> - Build configuration of the <c>crypto</c> application has - been moved from the <c>erts</c> application into the - <c>crypto</c> application.</p> - <p> - Own Id: OTP-15129</p> - </item> - <item> - <p> - Adds two hash functions <c>blake2b</c> and <c>blake2s</c> - (64 bit hash and 32 bit hash respectively). These are - modern and standard hash functions used in blockchains - and encrypted communication protocols. The hash functions - are available in OpenSSL since version 1.1.1.</p> - <p> - Own Id: OTP-15564 Aux Id: PR-2129 </p> - </item> - <item> - <p> - A new API is implemented in crypto. See the CRYPTO user's - guide, chapter <i>New and Old API</i> for more - information.</p> - <p> - The old api with the <c>crypto:block_*</c> and - <c>crypto:stream_*</c> interfaces is kept for - compatibility, but implemented with the new api. Please - note that since the error checking is more thorough, - there <i>might</i> be arguments with for example faulty - lengths that are no longer accepted.</p> - <p> - *** POTENTIAL INCOMPATIBILITY ***</p> - <p> - Own Id: OTP-15644 Aux Id: OTP-14732 , OTP-15451, PR-1857 - , PR-2068, PR-2095 </p> - </item> - <item> - <p> - The new hash_info/1 and cipher_info/1 functions returns - maps with information about the hash or cipher in the - argument.</p> - <p> - Own Id: OTP-15655 Aux Id: PR-2173, ERL-864, PR-2186 </p> - </item> - <item> - <p> - Obey additional OpenSSL configure flags when compiling - the C-part of the CRYPTO application: <c>no-bf</c>, - <c>no-blake2</c>, <c>no-chacha</c>, <c>no-cmac</c>, - <c>no-dh</c>, <c>no-dsa</c>, <c>no-md4</c>, - <c>no-poly1305</c>, <c>no-rc2</c>, <c>no-rc4</c> and - <c>no-rmd160</c>.</p> - <p> - Own Id: OTP-15683</p> - </item> - <item> - <p> - A new function <c>crypto:supports/1</c> is introduced. - The single argument takes an atom as argument: - <c>hashs</c>, <c>public_keys</c>, <c>ciphers</c>, - <c>macs</c>, <c>curves</c> or <c>rsa_opts</c>. The return - value is a list of supported algorithms.</p> - <p> - The difference with the existing <c>crypto:supports/0</c> - is, apart from the argument and the return value, that - the old function reports what is supported by the old - api, and the new function reports algorithms in the new - api.</p> - <p> - Own Id: OTP-15771</p> - </item> - </list> - </section> - -</section> - <section><title>Crypto 4.4.2</title> <section><title>Fixed Bugs and Malfunctions</title> diff --git a/lib/crypto/vsn.mk b/lib/crypto/vsn.mk index 72a51bfec9..0a3d9f45e4 100644 --- a/lib/crypto/vsn.mk +++ b/lib/crypto/vsn.mk @@ -1 +1 @@ -CRYPTO_VSN = 4.5 +CRYPTO_VSN = 4.4.2 diff --git a/lib/debugger/doc/src/notes.xml b/lib/debugger/doc/src/notes.xml index 795b46d467..395b69973d 100644 --- a/lib/debugger/doc/src/notes.xml +++ b/lib/debugger/doc/src/notes.xml @@ -33,23 +33,6 @@ <p>This document describes the changes made to the Debugger application.</p> -<section><title>Debugger 4.2.7</title> - - <section><title>Fixed Bugs and Malfunctions</title> - <list> - <item> - <p> - All incorrect (that is, all) uses of "can not" has been - corrected to "cannot" in source code comments, - documentation, examples, and so on.</p> - <p> - Own Id: OTP-14282 Aux Id: PR-1891 </p> - </item> - </list> - </section> - -</section> - <section><title>Debugger 4.2.6</title> <section><title>Fixed Bugs and Malfunctions</title> diff --git a/lib/debugger/vsn.mk b/lib/debugger/vsn.mk index daecc7594c..a3cbb497f8 100644 --- a/lib/debugger/vsn.mk +++ b/lib/debugger/vsn.mk @@ -1 +1 @@ -DEBUGGER_VSN = 4.2.7 +DEBUGGER_VSN = 4.2.6 diff --git a/lib/dialyzer/doc/src/notes.xml b/lib/dialyzer/doc/src/notes.xml index c39a3e20ba..bc422c43a0 100644 --- a/lib/dialyzer/doc/src/notes.xml +++ b/lib/dialyzer/doc/src/notes.xml @@ -32,35 +32,6 @@ <p>This document describes the changes made to the Dialyzer application.</p> -<section><title>Dialyzer 3.4</title> - - <section><title>Fixed Bugs and Malfunctions</title> - <list> - <item> - <p> - All incorrect (that is, all) uses of "can not" has been - corrected to "cannot" in source code comments, - documentation, examples, and so on.</p> - <p> - Own Id: OTP-14282 Aux Id: PR-1891 </p> - </item> - </list> - </section> - - - <section><title>Improvements and New Features</title> - <list> - <item> - <p> Use bit syntax in warnings instead of Core Erlang - syntax, for readability. </p> - <p> - Own Id: OTP-15752</p> - </item> - </list> - </section> - -</section> - <section><title>Dialyzer 3.3.2</title> <section><title>Fixed Bugs and Malfunctions</title> diff --git a/lib/dialyzer/src/dialyzer.erl b/lib/dialyzer/src/dialyzer.erl index 185c8c9ae6..a168b3c8c5 100644 --- a/lib/dialyzer/src/dialyzer.erl +++ b/lib/dialyzer/src/dialyzer.erl @@ -320,9 +320,12 @@ message_to_string({call_to_missing, [M, F, A]}) -> message_to_string({exact_eq, [Type1, Op, Type2]}) -> io_lib:format("The test ~ts ~s ~ts can never evaluate to 'true'\n", [Type1, Op, Type2]); -message_to_string({fun_app_args, [Args, Type]}) -> +message_to_string({fun_app_args, [ArgNs, Args, Type]}) -> + PositionString = form_position_string(ArgNs), io_lib:format("Fun application with arguments ~ts will fail" - " since the function has type ~ts\n", [Args, Type]); + " since the function has type ~ts," + " which differs in the ~s argument\n", + [Args, Type, PositionString]); message_to_string({fun_app_no_fun, [Op, Type, Arity]}) -> io_lib:format("Fun application will fail since ~ts :: ~ts" " is not a function of arity ~w\n", [Op, Type, Arity]); diff --git a/lib/dialyzer/src/dialyzer_dataflow.erl b/lib/dialyzer/src/dialyzer_dataflow.erl index 45b4abb253..f7aa167f5c 100644 --- a/lib/dialyzer/src/dialyzer_dataflow.erl +++ b/lib/dialyzer/src/dialyzer_dataflow.erl @@ -405,8 +405,13 @@ handle_apply(Tree, Map, State) -> t_fun_args(OpType1, 'universe')), case any_none(NewArgs) of true -> + EnumNewArgs = lists:zip(lists:seq(1, length(NewArgs)), + NewArgs), + ArgNs = [Arg || + {Arg, Type} <- EnumNewArgs, t_is_none(Type)], Msg = {fun_app_args, - [format_args(Args, ArgTypes, State), + [ArgNs, + format_args(Args, ArgTypes, State), format_type(OpType, State)]}, State3 = state__add_warning(State2, ?WARN_FAILING_CALL, Tree, Msg), diff --git a/lib/dialyzer/test/small_SUITE_data/results/fun_app_args b/lib/dialyzer/test/small_SUITE_data/results/fun_app_args new file mode 100644 index 0000000000..ac153a6fb2 --- /dev/null +++ b/lib/dialyzer/test/small_SUITE_data/results/fun_app_args @@ -0,0 +1,3 @@ + +fun_app_args.erl:12: Fun application with arguments ('b',[]) will fail since the function has type 'c' | fun(('a',[]) -> any()), which differs in the 1st argument +fun_app_args.erl:12: The created fun has no local return diff --git a/lib/dialyzer/test/small_SUITE_data/src/fun_app_args.erl b/lib/dialyzer/test/small_SUITE_data/src/fun_app_args.erl new file mode 100644 index 0000000000..b4409bc550 --- /dev/null +++ b/lib/dialyzer/test/small_SUITE_data/src/fun_app_args.erl @@ -0,0 +1,12 @@ +-module(fun_app_args). + +-export([t/1]). + +-type ft() :: fun((a, []) -> any()). + +-record(r, { + h = c :: c | ft() +}). + +t(#r{h = H}) -> + fun(_) -> (H)(b, []) end. diff --git a/lib/dialyzer/vsn.mk b/lib/dialyzer/vsn.mk index 3765b727c3..7221993963 100644 --- a/lib/dialyzer/vsn.mk +++ b/lib/dialyzer/vsn.mk @@ -1 +1 @@ -DIALYZER_VSN = 3.4 +DIALYZER_VSN = 3.3.2 diff --git a/lib/edoc/doc/src/notes.xml b/lib/edoc/doc/src/notes.xml index 48bc5d9c74..145856bcaa 100644 --- a/lib/edoc/doc/src/notes.xml +++ b/lib/edoc/doc/src/notes.xml @@ -32,20 +32,6 @@ <p>This document describes the changes made to the EDoc application.</p> -<section><title>Edoc 0.11</title> - - <section><title>Improvements and New Features</title> - <list> - <item> - <p> Correct links in the documentation. </p> - <p> - Own Id: OTP-15761</p> - </item> - </list> - </section> - -</section> - <section><title>Edoc 0.10</title> <section><title>Improvements and New Features</title> diff --git a/lib/edoc/vsn.mk b/lib/edoc/vsn.mk index 3510fdfccf..b6e1422623 100644 --- a/lib/edoc/vsn.mk +++ b/lib/edoc/vsn.mk @@ -1 +1 @@ -EDOC_VSN = 0.11 +EDOC_VSN = 0.10 diff --git a/lib/eldap/doc/src/notes.xml b/lib/eldap/doc/src/notes.xml index 6c23db52dc..bf9358c4d1 100644 --- a/lib/eldap/doc/src/notes.xml +++ b/lib/eldap/doc/src/notes.xml @@ -31,28 +31,6 @@ </header> <p>This document describes the changes made to the Eldap application.</p> -<section><title>Eldap 1.2.7</title> - - <section><title>Fixed Bugs and Malfunctions</title> - <list> - <item> - <p> - Typo fix</p> - <p> - Own Id: OTP-15632</p> - </item> - <item> - <p> - Fix dialyzer warnings in eldap when not matching the - return value of ssl:close/1.</p> - <p> - Own Id: OTP-15775</p> - </item> - </list> - </section> - -</section> - <section><title>Eldap 1.2.6</title> <section><title>Fixed Bugs and Malfunctions</title> diff --git a/lib/eldap/vsn.mk b/lib/eldap/vsn.mk index 7f03fbd1b2..6d541e4689 100644 --- a/lib/eldap/vsn.mk +++ b/lib/eldap/vsn.mk @@ -1 +1 @@ -ELDAP_VSN = 1.2.7 +ELDAP_VSN = 1.2.6 diff --git a/lib/erl_docgen/doc/src/notes.xml b/lib/erl_docgen/doc/src/notes.xml index f25361a202..54f0a36b27 100644 --- a/lib/erl_docgen/doc/src/notes.xml +++ b/lib/erl_docgen/doc/src/notes.xml @@ -31,24 +31,7 @@ </header> <p>This document describes the changes made to the <em>erl_docgen</em> application.</p> - <section><title>Erl_Docgen 0.9.1</title> - - <section><title>Fixed Bugs and Malfunctions</title> - <list> - <item> - <p> - All incorrect (that is, all) uses of "can not" has been - corrected to "cannot" in source code comments, - documentation, examples, and so on.</p> - <p> - Own Id: OTP-14282 Aux Id: PR-1891 </p> - </item> - </list> - </section> - -</section> - -<section><title>Erl_Docgen 0.9</title> + <section><title>Erl_Docgen 0.9</title> <section><title>Improvements and New Features</title> <list> diff --git a/lib/erl_docgen/vsn.mk b/lib/erl_docgen/vsn.mk index fece2456c1..6321f229dd 100644 --- a/lib/erl_docgen/vsn.mk +++ b/lib/erl_docgen/vsn.mk @@ -1 +1 @@ -ERL_DOCGEN_VSN = 0.9.1 +ERL_DOCGEN_VSN = 0.9 diff --git a/lib/erl_interface/doc/src/ei.xml b/lib/erl_interface/doc/src/ei.xml index 18f74d2655..254ae27cc8 100644 --- a/lib/erl_interface/doc/src/ei.xml +++ b/lib/erl_interface/doc/src/ei.xml @@ -183,7 +183,7 @@ typedef enum { </func> <func> - <name since="OTP 22.0"><ret>int</ret><nametext>ei_decode_bitstring(const char *buf, int *index, void *p, size_t plen, size_t *bitsp)</nametext></name> + <name since="OTP @OTP-15712@"><ret>int</ret><nametext>ei_decode_bitstring(const char *buf, int *index, void *p, size_t plen, size_t *bitsp)</nametext></name> <fsummary>Decode a bitstring.</fsummary> <desc> <p>Decodes a bitstring from the binary format.</p> @@ -490,8 +490,8 @@ typedef enum { </func> <func> - <name since="OTP 22.0"><ret>int</ret><nametext>ei_encode_bitstring(char *buf, int *index, const void *p, size_t bits)</nametext></name> - <name since="OTP 22.0"><ret>int</ret><nametext>ei_x_encode_bitstring(ei_x_buff* x, const void *p, size_t bits)</nametext></name> + <name since="OTP @OTP-15712@"><ret>int</ret><nametext>ei_encode_bitstring(char *buf, int *index, const void *p, size_t bits)</nametext></name> + <name since="OTP @OTP-15712@"><ret>int</ret><nametext>ei_x_encode_bitstring(ei_x_buff* x, const void *p, size_t bits)</nametext></name> <fsummary>Encode a bitstring.</fsummary> <desc> <p>Encodes a bitstring in the binary format. The data is at diff --git a/lib/erl_interface/doc/src/notes.xml b/lib/erl_interface/doc/src/notes.xml index f6c4c68cb1..fc6a1bb548 100644 --- a/lib/erl_interface/doc/src/notes.xml +++ b/lib/erl_interface/doc/src/notes.xml @@ -31,82 +31,6 @@ </header> <p>This document describes the changes made to the Erl_interface application.</p> -<section><title>Erl_Interface 3.12</title> - - <section><title>Fixed Bugs and Malfunctions</title> - <list> - <item> - <p> - The vxworks configure has been updated to respect the - environment CFLAGS.</p> - <p> - Own Id: OTP-15773</p> - </item> - </list> - </section> - - - <section><title>Improvements and New Features</title> - <list> - <item> - <p> - Minor adjustments made to build system for parallel - configure.</p> - <p> - Own Id: OTP-15340 Aux Id: OTP-14625 </p> - </item> - <item> - <p> - The limited support for VxWorks is deprecated as of OTP - 22, and will be removed in OTP 23.</p> - <p> - *** POTENTIAL INCOMPATIBILITY ***</p> - <p> - Own Id: OTP-15621</p> - </item> - <item> - <p>The old legacy <c>erl_interface</c> library (functions - with prefix <c>erl_</c>) is deprecated as of OTP 22, and - will be removed in OTP 23. This does not apply to the - <c>ei</c> library. Reasonably new <c>gcc</c> compilers - will issue deprecation warnings. In order to disable - these warnings, define the macro - <c>EI_NO_DEPR_WARN</c>.</p> - <p> - *** POTENTIAL INCOMPATIBILITY ***</p> - <p> - Own Id: OTP-15622</p> - </item> - <item> - <p>Added support to receive, decode, encode and send both - bit strings and export funs (<c>fun M:F/A</c>).</p> - <p>New functions <c>ei_decode_bitstring</c> and - <c>ei_encode_bitstring</c> have been added in order to - decode and encode bit strings where number of bits is not - necessary divisible by 8 (a whole number of bytes). The - existing functions <c>ei_decode_fun</c> and - <c>ei_encode_fun</c> can now also handle export funs.</p> - <p>Before this change, bit strings and export funs sent - to an erl_interface c-node were encoded using an - undocumented fallback tuple format. For bit strings - <c>{Binary,BitsInLastByte}</c> and for export funs - <c>{M,F}</c>. Existing c-node implementations expecting - these tuples must be changed to instead use - <c>ei_decode_bitstring</c> and <c>ei_decode_fun</c>. As a - temporary solution you can also build erl_interface with - macro <c>EI_COMPAT=21</c> or call - <c>ei_set_compat_rel(21)</c> to receive the old fallback - tuples.</p> - <p> - *** POTENTIAL INCOMPATIBILITY ***</p> - <p> - Own Id: OTP-15712 Aux Id: OTP-15774 </p> - </item> - </list> - </section> - -</section> - <section><title>Erl_Interface 3.11.2</title> <section><title>Fixed Bugs and Malfunctions</title> diff --git a/lib/erl_interface/vsn.mk b/lib/erl_interface/vsn.mk index cc72ed639a..5e63f75ab5 100644 --- a/lib/erl_interface/vsn.mk +++ b/lib/erl_interface/vsn.mk @@ -1,2 +1,2 @@ -EI_VSN = 3.12 +EI_VSN = 3.11.2 ERL_INTERFACE_VSN = $(EI_VSN) diff --git a/lib/hipe/doc/src/notes.xml b/lib/hipe/doc/src/notes.xml index 4a95d75abe..9a803cb9df 100644 --- a/lib/hipe/doc/src/notes.xml +++ b/lib/hipe/doc/src/notes.xml @@ -31,52 +31,6 @@ </header> <p>This document describes the changes made to HiPE.</p> -<section><title>Hipe 3.19</title> - - <section><title>Fixed Bugs and Malfunctions</title> - <list> - <item> - <p> - Add function <c>hipe:erllvm_is_supported</c> to check - presence of suitable version of the LLVM tool chain as - well as supported hardware architecture. The old - <c>hipe:llvm_support_available</c> has been removed.</p> - <p> - Own Id: OTP-15385 Aux Id: PR-1986 </p> - </item> - <item> - <p> - Fix hipe LLVM for FreeBSD and other non-linux unix to use - /tmp/ instead of /dev/shm/.</p> - <p> - Own Id: OTP-15386 Aux Id: PR-1963 </p> - </item> - </list> - </section> - - - <section><title>Improvements and New Features</title> - <list> - <item> - <p>In OTP 22, HiPE (the native code compiler) is not - fully functional. The reasons for this are:</p> - <p>There are new BEAM instructions for binary matching - that the HiPE native code compiler does not support.</p> - <p>The new optimizations in the Erlang compiler create - new combination of instructions that HiPE currently does - not handle correctly.</p> - <p>If erlc is invoked with the <c>+native</c> option, and - if any of the new binary matching instructions are used, - the compiler will issue a warning and produce a BEAM file - without native code.</p> - <p> - Own Id: OTP-15596</p> - </item> - </list> - </section> - -</section> - <section><title>Hipe 3.18.3</title> <section><title>Fixed Bugs and Malfunctions</title> diff --git a/lib/hipe/vsn.mk b/lib/hipe/vsn.mk index a91d92ca14..39565d721f 100644 --- a/lib/hipe/vsn.mk +++ b/lib/hipe/vsn.mk @@ -1 +1 @@ -HIPE_VSN = 3.19 +HIPE_VSN = 3.18.3 diff --git a/lib/inets/doc/src/notes.xml b/lib/inets/doc/src/notes.xml index 03bd1d8042..2710ea2f2f 100644 --- a/lib/inets/doc/src/notes.xml +++ b/lib/inets/doc/src/notes.xml @@ -33,24 +33,7 @@ <file>notes.xml</file> </header> - <section><title>Inets 7.0.8</title> - - <section><title>Fixed Bugs and Malfunctions</title> - <list> - <item> - <p> - All incorrect (that is, all) uses of "can not" has been - corrected to "cannot" in source code comments, - documentation, examples, and so on.</p> - <p> - Own Id: OTP-14282 Aux Id: PR-1891 </p> - </item> - </list> - </section> - -</section> - -<section><title>Inets 7.0.7</title> + <section><title>Inets 7.0.7</title> <section><title>Fixed Bugs and Malfunctions</title> <list> diff --git a/lib/inets/vsn.mk b/lib/inets/vsn.mk index 5dbec9e7b3..fd248e793a 100644 --- a/lib/inets/vsn.mk +++ b/lib/inets/vsn.mk @@ -19,6 +19,6 @@ # %CopyrightEnd% APPLICATION = inets -INETS_VSN = 7.0.8 +INETS_VSN = 7.0.7 PRE_VSN = APP_VSN = "$(APPLICATION)-$(INETS_VSN)$(PRE_VSN)" diff --git a/lib/jinterface/doc/src/notes.xml b/lib/jinterface/doc/src/notes.xml index e79ada47f1..e4bfddcd17 100644 --- a/lib/jinterface/doc/src/notes.xml +++ b/lib/jinterface/doc/src/notes.xml @@ -31,42 +31,6 @@ </header> <p>This document describes the changes made to the Jinterface application.</p> -<section><title>Jinterface 1.10</title> - - <section><title>Fixed Bugs and Malfunctions</title> - <list> - <item> - <p> - All incorrect (that is, all) uses of "can not" has been - corrected to "cannot" in source code comments, - documentation, examples, and so on.</p> - <p> - Own Id: OTP-14282 Aux Id: PR-1891 </p> - </item> - </list> - </section> - - - <section><title>Improvements and New Features</title> - <list> - <item> - <p>Added support to receive export funs (<c>fun - M:F/A</c>).</p> - <p>Before this change, export funs sent to a jinterface - node were encoded using an undocumented fallback tuple - format <c>{M,F}</c>. Existing jinterface implementations - expecting these tuples must be changed to instead use the - existing <c>OtpErlangExternalFun</c> class.</p> - <p> - *** POTENTIAL INCOMPATIBILITY ***</p> - <p> - Own Id: OTP-15774 Aux Id: OTP-15712 </p> - </item> - </list> - </section> - -</section> - <section><title>Jinterface 1.9.1</title> <section><title>Fixed Bugs and Malfunctions</title> diff --git a/lib/jinterface/vsn.mk b/lib/jinterface/vsn.mk index 95c7c95726..a8dc815145 100644 --- a/lib/jinterface/vsn.mk +++ b/lib/jinterface/vsn.mk @@ -1 +1 @@ -JINTERFACE_VSN = 1.10 +JINTERFACE_VSN = 1.9.1 diff --git a/lib/kernel/doc/src/gen_tcp.xml b/lib/kernel/doc/src/gen_tcp.xml index fc16473393..f8b41d24e2 100644 --- a/lib/kernel/doc/src/gen_tcp.xml +++ b/lib/kernel/doc/src/gen_tcp.xml @@ -259,6 +259,12 @@ do_recv(Sock, Bs) -> <p>The optional <c><anno>Timeout</anno></c> parameter specifies a time-out in milliseconds. Defaults to <c>infinity</c>.</p> <note> + <p>Keep in mind that if the underlying OS <c>connect()</c> call returns + a timeout, <c>gen_tcp:connect</c> will also return a timeout + (i.e. <c>{error, etimedout}</c>), even if a larger <c>Timeout</c> was + specified.</p> + </note> + <note> <p>The default values for options specified to <c>connect</c> can be affected by the Kernel configuration parameter <c>inet_default_connect_options</c>. For details, see diff --git a/lib/kernel/doc/src/notes.xml b/lib/kernel/doc/src/notes.xml index 63d8f3565c..61bd598145 100644 --- a/lib/kernel/doc/src/notes.xml +++ b/lib/kernel/doc/src/notes.xml @@ -31,82 +31,6 @@ </header> <p>This document describes the changes made to the Kernel application.</p> -<section><title>Kernel 6.4</title> - - <section><title>Improvements and New Features</title> - <list> - <item> - <p> - A simple socket API is provided through the socket - module. This is a low level API that does *not* replace - gen_[tcp|udp|sctp]. It is intended to *eventually* - replace the inet driver, but not the high level - gen-modules (gen_tcp, gen_udp and gen_sctp). It also - provides a basic API that facilitates the implementation - of other protocols, than TCP, UDP and SCTP. </p> - <p> - Known issues are; No support for the Windows OS - (currently).</p> - <p> - Own Id: OTP-14831</p> - </item> - <item> - <p> - Improved the documentation for the linger option.</p> - <p> - Own Id: OTP-15491 Aux Id: - https://github.com/erlang/otp/pull/2019 </p> - </item> - <item> - <p> Global no longer tries more than once when connecting - to other nodes. </p> - <p> - Own Id: OTP-15607 Aux Id: ERIERL-280 </p> - </item> - <item> - <p> - The dist messages EXIT, EXIT2 and MONITOR_DOWN have been - updated with new versions that send the reason term as - part of the payload of the message instead of as part of - the control message.</p> - <p> - The old versions are still present and can be used when - communicating with nodes that don't support the new - versions.</p> - <p> - Own Id: OTP-15611</p> - </item> - <item> - <p> - Kernel configuration parameter <c>start_distribution = - boolean()</c> is added. If set to <c>false</c>, the - system is started with all distribution functionality - disabled. Defaults to <c>true</c>.</p> - <p> - Own Id: OTP-15668 Aux Id: PR-2088 </p> - </item> - <item> - <p> - In OTP-21.3, a warning was introduced for duplicated - applications/keys in configuration. This warning would be - displayed both when the configuration was given as a file - on system start, and during runtime via - <c>application:set_env/1,2</c>.</p> - <p> - The warning is now changed to a <c>badarg</c> exception - in <c>application:set_env/1,2</c>. If the faulty - configuration is given in a configuration file on system - start, the startup will fail.</p> - <p> - *** POTENTIAL INCOMPATIBILITY ***</p> - <p> - Own Id: OTP-15692 Aux Id: PR-2170 </p> - </item> - </list> - </section> - -</section> - <section><title>Kernel 6.3.1</title> <section><title>Fixed Bugs and Malfunctions</title> diff --git a/lib/kernel/src/erl_distribution.erl b/lib/kernel/src/erl_distribution.erl index 0bec78e938..cdb2d2f1f6 100644 --- a/lib/kernel/src/erl_distribution.erl +++ b/lib/kernel/src/erl_distribution.erl @@ -21,6 +21,8 @@ -behaviour(supervisor). +-include_lib("kernel/include/logger.hrl"). + -export([start_link/0,start_link/2,init/1,start/1,stop/0]). -define(DBG,erlang:display([?MODULE,?LINE])). @@ -83,6 +85,10 @@ do_start_link([{Arg,Flag}|T]) -> case init:get_argument(Arg) of {ok,[[Name]]} -> start_link([list_to_atom(Name),Flag|ticktime()], true); + {ok,[[Name]|_Rest]} -> + ?LOG_WARNING("Multiple -~p given to erl, using the first, ~p", + [Arg, Name]), + start_link([list_to_atom(Name),Flag|ticktime()], true); _ -> do_start_link(T) end; diff --git a/lib/kernel/src/kernel.appup.src b/lib/kernel/src/kernel.appup.src index cd0397a98c..aca3247c8f 100644 --- a/lib/kernel/src/kernel.appup.src +++ b/lib/kernel/src/kernel.appup.src @@ -19,15 +19,23 @@ %% %% We allow upgrade from, and downgrade to all previous %% versions from the following OTP releases: +%% - OTP 20 %% - OTP 21 -%% - OTP 22 %% %% We also allow upgrade from, and downgrade to all %% versions that have branched off from the above %% stated previous versions. %% {"%VSN%", - [{<<"^6\\.0$">>,[restart_new_emulator]}, + [{<<"^5\\.3$">>,[restart_new_emulator]}, + {<<"^5\\.3\\.0(?:\\.[0-9]+)+$">>,[restart_new_emulator]}, + {<<"^5\\.3\\.1(?:\\.[0-9]+)*$">>,[restart_new_emulator]}, + {<<"^5\\.4$">>,[restart_new_emulator]}, + {<<"^5\\.4\\.0(?:\\.[0-9]+)+$">>,[restart_new_emulator]}, + {<<"^5\\.4\\.1(?:\\.[0-9]+)*$">>,[restart_new_emulator]}, + {<<"^5\\.4\\.2(?:\\.[0-9]+)*$">>,[restart_new_emulator]}, + {<<"^5\\.4\\.3(?:\\.[0-9]+)*$">>,[restart_new_emulator]}, + {<<"^6\\.0$">>,[restart_new_emulator]}, {<<"^6\\.0\\.0(?:\\.[0-9]+)+$">>,[restart_new_emulator]}, {<<"^6\\.0\\.1(?:\\.[0-9]+)*$">>,[restart_new_emulator]}, {<<"^6\\.1$">>,[restart_new_emulator]}, @@ -37,9 +45,16 @@ {<<"^6\\.2\\.0(?:\\.[0-9]+)+$">>,[restart_new_emulator]}, {<<"^6\\.2\\.1(?:\\.[0-9]+)*$">>,[restart_new_emulator]}, {<<"^6\\.3$">>,[restart_new_emulator]}, - {<<"^6\\.3\\.0(?:\\.[0-9]+)+$">>,[restart_new_emulator]}, - {<<"^6\\.3\\.1(?:\\.[0-9]+)*$">>,[restart_new_emulator]}], - [{<<"^6\\.0$">>,[restart_new_emulator]}, + {<<"^6\\.3\\.0(?:\\.[0-9]+)+$">>,[restart_new_emulator]}], + [{<<"^5\\.3$">>,[restart_new_emulator]}, + {<<"^5\\.3\\.0(?:\\.[0-9]+)+$">>,[restart_new_emulator]}, + {<<"^5\\.3\\.1(?:\\.[0-9]+)*$">>,[restart_new_emulator]}, + {<<"^5\\.4$">>,[restart_new_emulator]}, + {<<"^5\\.4\\.0(?:\\.[0-9]+)+$">>,[restart_new_emulator]}, + {<<"^5\\.4\\.1(?:\\.[0-9]+)*$">>,[restart_new_emulator]}, + {<<"^5\\.4\\.2(?:\\.[0-9]+)*$">>,[restart_new_emulator]}, + {<<"^5\\.4\\.3(?:\\.[0-9]+)*$">>,[restart_new_emulator]}, + {<<"^6\\.0$">>,[restart_new_emulator]}, {<<"^6\\.0\\.0(?:\\.[0-9]+)+$">>,[restart_new_emulator]}, {<<"^6\\.0\\.1(?:\\.[0-9]+)*$">>,[restart_new_emulator]}, {<<"^6\\.1$">>,[restart_new_emulator]}, @@ -49,5 +64,4 @@ {<<"^6\\.2\\.0(?:\\.[0-9]+)+$">>,[restart_new_emulator]}, {<<"^6\\.2\\.1(?:\\.[0-9]+)*$">>,[restart_new_emulator]}, {<<"^6\\.3$">>,[restart_new_emulator]}, - {<<"^6\\.3\\.0(?:\\.[0-9]+)+$">>,[restart_new_emulator]}, - {<<"^6\\.3\\.1(?:\\.[0-9]+)*$">>,[restart_new_emulator]}]}. + {<<"^6\\.3\\.0(?:\\.[0-9]+)+$">>,[restart_new_emulator]}]}. diff --git a/lib/kernel/test/erl_distribution_SUITE.erl b/lib/kernel/test/erl_distribution_SUITE.erl index 8dd4ef1987..c3a022df0a 100644 --- a/lib/kernel/test/erl_distribution_SUITE.erl +++ b/lib/kernel/test/erl_distribution_SUITE.erl @@ -205,6 +205,9 @@ nodenames(Config) when is_list(Config) -> legal("a-1@b"), legal("a_1@b"), + %% Test that giving two -sname works as it should + test_node("a_1@b", false, long_or_short() ++ "a_0@b"), + illegal("cdé@a"), illegal("te欢st@a"). @@ -258,8 +261,11 @@ illegal(Name) -> test_node(Name) -> test_node(Name, false). test_node(Name, Illigal) -> + test_node(Name, Illigal, ""). +test_node(Name, Illigal, ExtraArgs) -> ProgName = ct:get_progname(), - Command = ProgName ++ " -noinput " ++ long_or_short() ++ Name ++ + Command = ProgName ++ " -noinput " ++ ExtraArgs ++ + long_or_short() ++ Name ++ " -eval \"net_adm:ping('" ++ atom_to_list(node()) ++ "')\"" ++ case Illigal of true -> diff --git a/lib/kernel/vsn.mk b/lib/kernel/vsn.mk index 765e890157..b1ae513223 100644 --- a/lib/kernel/vsn.mk +++ b/lib/kernel/vsn.mk @@ -1 +1 @@ -KERNEL_VSN = 6.4 +KERNEL_VSN = 6.3.1 diff --git a/lib/megaco/doc/src/notes.xml b/lib/megaco/doc/src/notes.xml index 6f33ae390c..b697c3f631 100644 --- a/lib/megaco/doc/src/notes.xml +++ b/lib/megaco/doc/src/notes.xml @@ -37,30 +37,7 @@ section is the version number of Megaco.</p> - <section><title>Megaco 3.18.5</title> - - <section><title>Improvements and New Features</title> - <list> - <item> - <p> - Minor updates to build system necessary due to move of - configuration of <c>crypto</c> application.</p> - <p> - Own Id: OTP-15262 Aux Id: OTP-15129 </p> - </item> - <item> - <p> - Minor adjustments made to build system for parallel - configure.</p> - <p> - Own Id: OTP-15340 Aux Id: OTP-14625 </p> - </item> - </list> - </section> - -</section> - -<section><title>Megaco 3.18.4</title> + <section><title>Megaco 3.18.4</title> <section><title>Fixed Bugs and Malfunctions</title> <list> diff --git a/lib/megaco/vsn.mk b/lib/megaco/vsn.mk index 843a3dccc5..f4c82c537a 100644 --- a/lib/megaco/vsn.mk +++ b/lib/megaco/vsn.mk @@ -19,6 +19,6 @@ # %CopyrightEnd% APPLICATION = megaco -MEGACO_VSN = 3.18.5 +MEGACO_VSN = 3.18.4 PRE_VSN = APP_VSN = "$(APPLICATION)-$(MEGACO_VSN)$(PRE_VSN)" diff --git a/lib/mnesia/doc/src/notes.xml b/lib/mnesia/doc/src/notes.xml index 59c842ab10..01d1666b8d 100644 --- a/lib/mnesia/doc/src/notes.xml +++ b/lib/mnesia/doc/src/notes.xml @@ -39,41 +39,7 @@ thus constitutes one section in this document. The title of each section is the version number of Mnesia.</p> - <section><title>Mnesia 4.16</title> - - <section><title>Fixed Bugs and Malfunctions</title> - <list> - <item> - <p> - Optimize mnesia:read/1 if data have been written in the - same transaction.</p> - <p> - Own Id: OTP-15550 Aux Id: PR-12029 </p> - </item> - <item> - <p> - Fixed bugs in table index plugin handling.</p> - <p> - Own Id: OTP-15689 Aux Id: PR-1695 ERL-556 </p> - </item> - </list> - </section> - - - <section><title>Improvements and New Features</title> - <list> - <item> - <p> - Optimized dumping of tables with plugin backends.</p> - <p> - Own Id: OTP-15588 Aux Id: PR-2102 </p> - </item> - </list> - </section> - -</section> - -<section><title>Mnesia 4.15.6</title> + <section><title>Mnesia 4.15.6</title> <section><title>Fixed Bugs and Malfunctions</title> <list> diff --git a/lib/mnesia/vsn.mk b/lib/mnesia/vsn.mk index aa5d9adb6d..781a4830a0 100644 --- a/lib/mnesia/vsn.mk +++ b/lib/mnesia/vsn.mk @@ -1 +1 @@ -MNESIA_VSN = 4.16 +MNESIA_VSN = 4.15.6 diff --git a/lib/observer/doc/src/notes.xml b/lib/observer/doc/src/notes.xml index f05e58dc21..2d914f8c61 100644 --- a/lib/observer/doc/src/notes.xml +++ b/lib/observer/doc/src/notes.xml @@ -32,23 +32,6 @@ <p>This document describes the changes made to the Observer application.</p> -<section><title>Observer 2.9.1</title> - - <section><title>Fixed Bugs and Malfunctions</title> - <list> - <item> - <p> - All incorrect (that is, all) uses of "can not" has been - corrected to "cannot" in source code comments, - documentation, examples, and so on.</p> - <p> - Own Id: OTP-14282 Aux Id: PR-1891 </p> - </item> - </list> - </section> - -</section> - <section><title>Observer 2.9</title> <section><title>Fixed Bugs and Malfunctions</title> diff --git a/lib/observer/vsn.mk b/lib/observer/vsn.mk index c16c43f942..0e9c8b302c 100644 --- a/lib/observer/vsn.mk +++ b/lib/observer/vsn.mk @@ -1 +1 @@ -OBSERVER_VSN = 2.9.1 +OBSERVER_VSN = 2.9 diff --git a/lib/odbc/doc/src/notes.xml b/lib/odbc/doc/src/notes.xml index 8d708162e4..696fcaa479 100644 --- a/lib/odbc/doc/src/notes.xml +++ b/lib/odbc/doc/src/notes.xml @@ -32,23 +32,7 @@ <p>This document describes the changes made to the odbc application. </p> - <section><title>ODBC 2.12.4</title> - - <section><title>Improvements and New Features</title> - <list> - <item> - <p> - Minor adjustments made to build system for parallel - configure.</p> - <p> - Own Id: OTP-15340 Aux Id: OTP-14625 </p> - </item> - </list> - </section> - -</section> - -<section><title>ODBC 2.12.3</title> + <section><title>ODBC 2.12.3</title> <section><title>Fixed Bugs and Malfunctions</title> <list> diff --git a/lib/odbc/vsn.mk b/lib/odbc/vsn.mk index df6db09f2f..ff023e666b 100644 --- a/lib/odbc/vsn.mk +++ b/lib/odbc/vsn.mk @@ -1 +1 @@ -ODBC_VSN = 2.12.4 +ODBC_VSN = 2.12.3 diff --git a/lib/os_mon/doc/src/notes.xml b/lib/os_mon/doc/src/notes.xml index 1f169263e9..64e9f281e3 100644 --- a/lib/os_mon/doc/src/notes.xml +++ b/lib/os_mon/doc/src/notes.xml @@ -31,35 +31,6 @@ </header> <p>This document describes the changes made to the OS_Mon application.</p> -<section><title>Os_Mon 2.5</title> - - <section><title>Fixed Bugs and Malfunctions</title> - <list> - <item> - <p> - Fix typespec of <c>cpu_sup:util()</c>.</p> - <p> - Own Id: OTP-15770 Aux Id: PR-2208 </p> - </item> - </list> - </section> - - - <section><title>Improvements and New Features</title> - <list> - <item> - <p> - The application otp_mibs has been removed from OTP. Some - of its components (mibs) have been moved to other apps - (snmp), or removed completely (os_mon).</p> - <p> - Own Id: OTP-14984 Aux Id: OTP-15329 </p> - </item> - </list> - </section> - -</section> - <section><title>Os_Mon 2.4.7</title> <section><title>Fixed Bugs and Malfunctions</title> diff --git a/lib/os_mon/vsn.mk b/lib/os_mon/vsn.mk index 845443d329..9713f6bc6b 100644 --- a/lib/os_mon/vsn.mk +++ b/lib/os_mon/vsn.mk @@ -1 +1 @@ -OS_MON_VSN = 2.5 +OS_MON_VSN = 2.4.7 diff --git a/lib/public_key/doc/src/notes.xml b/lib/public_key/doc/src/notes.xml index 3aad79ed71..f6bc0dc797 100644 --- a/lib/public_key/doc/src/notes.xml +++ b/lib/public_key/doc/src/notes.xml @@ -35,58 +35,6 @@ <file>notes.xml</file> </header> -<section><title>Public_Key 1.6.6</title> - - <section><title>Fixed Bugs and Malfunctions</title> - <list> - <item> - <p> - RSA options passed to crypto for encrypt and decrypt with - public or private key.</p> - <p> - Own Id: OTP-15754 Aux Id: ERL-878 </p> - </item> - <item> - <p> - Fix dialyzer warnings caused by a faulty type - specification for digest_type().</p> - <p> - This change updates digest_type() and the functions - operating with this argument type to accept both 'sha1' - and 'sha' as digest_type().</p> - <p> - Own Id: OTP-15776</p> - </item> - </list> - </section> - - - <section><title>Improvements and New Features</title> - <list> - <item> - <p> - Add possibility to read PEM files encrypted with old PEM - encryption using AES-256</p> - <p> - Own Id: OTP-13726</p> - </item> - <item> - <p> - Relax decoding of certificates to so that "harmless" - third party encoding errors may be accepted but not - created by the public_key application. This adds - acceptance of using an incorrect three character country - code, the PKIX standard use two character country codes. - It is also accepted that the country code is utf8 encoded - but the specification says it should be ASCII.</p> - <p> - Own Id: OTP-15687 Aux Id: PR-2162 </p> - </item> - </list> - </section> - -</section> - <section><title>Public_Key 1.6.5</title> <section><title>Improvements and New Features</title> diff --git a/lib/public_key/doc/src/public_key.xml b/lib/public_key/doc/src/public_key.xml index 8db5620686..12bb0b21b0 100644 --- a/lib/public_key/doc/src/public_key.xml +++ b/lib/public_key/doc/src/public_key.xml @@ -286,7 +286,9 @@ entries as ASN.1 DER encoded entities.</fsummary> <desc> <p>Decodes PEM binary data and returns entries as ASN.1 DER encoded entities.</p> - <p>Example <c>{ok, PemBin} = file:read_file("cert.pem").</c></p> + <p>Example <c>{ok, PemBin} = file:read_file("cert.pem"). + PemEntries = public_key:pem_decode(PemBin). + </c></p> </desc> </func> diff --git a/lib/public_key/vsn.mk b/lib/public_key/vsn.mk index c68806d856..11c06fb158 100644 --- a/lib/public_key/vsn.mk +++ b/lib/public_key/vsn.mk @@ -1 +1 @@ -PUBLIC_KEY_VSN = 1.6.6 +PUBLIC_KEY_VSN = 1.6.5 diff --git a/lib/reltool/doc/src/notes.xml b/lib/reltool/doc/src/notes.xml index 2d043017af..165ae6db6a 100644 --- a/lib/reltool/doc/src/notes.xml +++ b/lib/reltool/doc/src/notes.xml @@ -38,40 +38,7 @@ thus constitutes one section in this document. The title of each section is the version number of Reltool.</p> - <section><title>Reltool 0.8</title> - - <section><title>Improvements and New Features</title> - <list> - <item> - <p> - A new element, <c>Opts</c>, can now be included in a - <c>rel</c> tuple in the reltool release specific - configuration format: {rel, Name, Vsn, RelApps, Opts}.</p> - <p> - This supports the use of <c>{rel, Name, Vsn, RelApps, - [{load_dot_erlang, false}]}</c> to prevent the boot - script from running the <c>.erlang</c> file.</p> - <p> - The incompatibilities are as follows:</p> - <p> - * The return from <c>reltool:get_config/1</c> and - <c>reltool:get_config/3</c> includes the new <c>rel</c> - tuple for all rels where the <c>load_dot_erlang</c> - option is set to <c>false</c>.<br/> * The return from - <c>reltool:get_config/3</c> includes the new <c>rel</c> - tuple for ALL rels if the <c>InclDefs</c> parameter is - set to <c>true</c>.</p> - <p> - *** POTENTIAL INCOMPATIBILITY ***</p> - <p> - Own Id: OTP-15571</p> - </item> - </list> - </section> - -</section> - -<section><title>Reltool 0.7.8</title> + <section><title>Reltool 0.7.8</title> <section><title>Fixed Bugs and Malfunctions</title> <list> diff --git a/lib/reltool/vsn.mk b/lib/reltool/vsn.mk index c5aacfba38..a649a3e0c0 100644 --- a/lib/reltool/vsn.mk +++ b/lib/reltool/vsn.mk @@ -1 +1 @@ -RELTOOL_VSN = 0.8 +RELTOOL_VSN = 0.7.8 diff --git a/lib/runtime_tools/doc/src/notes.xml b/lib/runtime_tools/doc/src/notes.xml index 1b94c3e6d9..58a2a66c4b 100644 --- a/lib/runtime_tools/doc/src/notes.xml +++ b/lib/runtime_tools/doc/src/notes.xml @@ -32,22 +32,6 @@ <p>This document describes the changes made to the Runtime_Tools application.</p> -<section><title>Runtime_Tools 1.13.3</title> - - <section><title>Improvements and New Features</title> - <list> - <item> - <p> - Minor updates to build system necessary due to move of - configuration of <c>crypto</c> application.</p> - <p> - Own Id: OTP-15262 Aux Id: OTP-15129 </p> - </item> - </list> - </section> - -</section> - <section><title>Runtime_Tools 1.13.2</title> <section><title>Improvements and New Features</title> diff --git a/lib/runtime_tools/vsn.mk b/lib/runtime_tools/vsn.mk index 3f38574be4..fa2f338ec2 100644 --- a/lib/runtime_tools/vsn.mk +++ b/lib/runtime_tools/vsn.mk @@ -1 +1 @@ -RUNTIME_TOOLS_VSN = 1.13.3 +RUNTIME_TOOLS_VSN = 1.13.2 diff --git a/lib/sasl/doc/src/notes.xml b/lib/sasl/doc/src/notes.xml index 13546a6a62..982c874117 100644 --- a/lib/sasl/doc/src/notes.xml +++ b/lib/sasl/doc/src/notes.xml @@ -31,23 +31,6 @@ </header> <p>This document describes the changes made to the SASL application.</p> -<section><title>SASL 3.4</title> - - <section><title>Improvements and New Features</title> - <list> - <item> - <p> - Change the first module called by erts to be names - erl_init instead of otp_ring0. systools in sasl have been - updated to reflect this change.</p> - <p> - Own Id: OTP-15336 Aux Id: PR-1825 </p> - </item> - </list> - </section> - -</section> - <section><title>SASL 3.3</title> <section><title>Improvements and New Features</title> diff --git a/lib/sasl/src/sasl.appup.src b/lib/sasl/src/sasl.appup.src index 22a9027b7c..26127eae84 100644 --- a/lib/sasl/src/sasl.appup.src +++ b/lib/sasl/src/sasl.appup.src @@ -19,21 +19,27 @@ %% %% We allow upgrade from, and downgrade to all previous %% versions from the following OTP releases: +%% - OTP 20 %% - OTP 21 -%% - OTP 22 %% %% We also allow upgrade from, and downgrade to all %% versions that have branched off from the above %% stated previous versions. %% {"%VSN%", - [{<<"^3\\.2$">>,[restart_new_emulator]}, + [{<<"^3\\.0\\.4(?:\\.[0-9]+)*$">>,[restart_new_emulator]}, + {<<"^3\\.1$">>,[restart_new_emulator]}, + {<<"^3\\.1\\.0(?:\\.[0-9]+)+$">>,[restart_new_emulator]}, + {<<"^3\\.1\\.1(?:\\.[0-9]+)*$">>,[restart_new_emulator]}, + {<<"^3\\.1\\.2(?:\\.[0-9]+)*$">>,[restart_new_emulator]}, + {<<"^3\\.2$">>,[restart_new_emulator]}, {<<"^3\\.2\\.0(?:\\.[0-9]+)+$">>,[restart_new_emulator]}, - {<<"^3\\.2\\.1(?:\\.[0-9]+)*$">>,[restart_new_emulator]}, - {<<"^3\\.3$">>,[restart_new_emulator]}, - {<<"^3\\.3\\.0(?:\\.[0-9]+)+$">>,[restart_new_emulator]}], - [{<<"^3\\.2$">>,[restart_new_emulator]}, + {<<"^3\\.2\\.1(?:\\.[0-9]+)*$">>,[restart_new_emulator]}], + [{<<"^3\\.0\\.4(?:\\.[0-9]+)*$">>,[restart_new_emulator]}, + {<<"^3\\.1$">>,[restart_new_emulator]}, + {<<"^3\\.1\\.0(?:\\.[0-9]+)+$">>,[restart_new_emulator]}, + {<<"^3\\.1\\.1(?:\\.[0-9]+)*$">>,[restart_new_emulator]}, + {<<"^3\\.1\\.2(?:\\.[0-9]+)*$">>,[restart_new_emulator]}, + {<<"^3\\.2$">>,[restart_new_emulator]}, {<<"^3\\.2\\.0(?:\\.[0-9]+)+$">>,[restart_new_emulator]}, - {<<"^3\\.2\\.1(?:\\.[0-9]+)*$">>,[restart_new_emulator]}, - {<<"^3\\.3$">>,[restart_new_emulator]}, - {<<"^3\\.3\\.0(?:\\.[0-9]+)+$">>,[restart_new_emulator]}]}. + {<<"^3\\.2\\.1(?:\\.[0-9]+)*$">>,[restart_new_emulator]}]}. diff --git a/lib/sasl/vsn.mk b/lib/sasl/vsn.mk index 8838b514da..c1f80752a7 100644 --- a/lib/sasl/vsn.mk +++ b/lib/sasl/vsn.mk @@ -1 +1 @@ -SASL_VSN = 3.4 +SASL_VSN = 3.3 diff --git a/lib/snmp/doc/src/notes.xml b/lib/snmp/doc/src/notes.xml index 780e0cae76..a6c3d57148 100644 --- a/lib/snmp/doc/src/notes.xml +++ b/lib/snmp/doc/src/notes.xml @@ -34,32 +34,7 @@ </header> - <section><title>SNMP 5.3</title> - - <section><title>Improvements and New Features</title> - <list> - <item> - <p> - The application otp_mibs has been removed from OTP. Some - of its components (mibs) have been moved to other apps - (snmp), or removed completely (os_mon).</p> - <p> - Own Id: OTP-14984 Aux Id: OTP-15329 </p> - </item> - <item> - <p> - [snmp|agent] Add a get-mechanism callback module (and a - corresponding behaviour). The agent calls this module to - handle each get (get, get-next and get-bulk) request.</p> - <p> - Own Id: OTP-15691 Aux Id: ERIERL-324 </p> - </item> - </list> - </section> - -</section> - -<section><title>SNMP 5.2.12</title> + <section><title>SNMP 5.2.12</title> <section><title>Fixed Bugs and Malfunctions</title> <list> diff --git a/lib/ssh/doc/src/notes.xml b/lib/ssh/doc/src/notes.xml index 046d6df89f..78990c48f2 100644 --- a/lib/ssh/doc/src/notes.xml +++ b/lib/ssh/doc/src/notes.xml @@ -36,9 +36,16 @@ <list> <item> <p> - SSH uses the new crypto API.</p> + When an SSH server receives the very first message on a + new TCP connection, and that message is not the expected + one, the 64 first bytes of the received message are now + dumped in the INFO REPORT that reports the Protocol + Error.</p> <p> - Own Id: OTP-15673</p> + This facilitates the debugging of who sends the bad + message or of detecting a possible port scanning.</p> + <p> + Own Id: OTP-15772</p> </item> </list> </section> diff --git a/lib/ssh/src/ssh_connection_handler.erl b/lib/ssh/src/ssh_connection_handler.erl index 7c87591cf2..8f32966a12 100644 --- a/lib/ssh/src/ssh_connection_handler.erl +++ b/lib/ssh/src/ssh_connection_handler.erl @@ -594,7 +594,7 @@ handle_event(_, socket_control, {hello,_}=StateName, D) -> {stop, {shutdown,{unexpected_getopts_return, Other}}} end; -handle_event(_, {info_line,_Line}, {hello,Role}=StateName, D) -> +handle_event(_, {info_line,Line}, {hello,Role}=StateName, D) -> case Role of client -> %% The server may send info lines to the client before the version_exchange @@ -605,9 +605,9 @@ handle_event(_, {info_line,_Line}, {hello,Role}=StateName, D) -> %% But the client may NOT send them to the server. Openssh answers with cleartext, %% and so do we send_bytes("Protocol mismatch.", D), - ?call_disconnectfun_and_log_cond("Protocol mismatch.", - "Protocol mismatch in version exchange. Client sent info lines.", - StateName, D), + Msg = io_lib:format("Protocol mismatch in version exchange. Client sent info lines.~n~s", + [ssh_dbg:hex_dump(Line, 64)]), + ?call_disconnectfun_and_log_cond("Protocol mismatch.", Msg, StateName, D), {stop, {shutdown,"Protocol mismatch in version exchange. Client sent info lines."}} end; diff --git a/lib/ssh/src/ssh_dbg.erl b/lib/ssh/src/ssh_dbg.erl index 4fe15b24d3..43ac4c0ccf 100644 --- a/lib/ssh/src/ssh_dbg.erl +++ b/lib/ssh/src/ssh_dbg.erl @@ -60,6 +60,7 @@ cbuf_stop_clear/0, cbuf_in/1, cbuf_list/0, + hex_dump/1, hex_dump/2, fmt_cbuf_items/0, fmt_cbuf_item/1 ]). @@ -439,3 +440,75 @@ fmt_value(#circ_buf_entry{module = M, io_lib:format("~p:~p ~p/~p ~p~n~s",[M,L,F,A,Pid,fmt_value(V)]); fmt_value(Value) -> io_lib:format("~p",[Value]). + +%%%================================================================ + +-record(h, {max_bytes = 65536, + bytes_per_line = 16, + address_len = 4 + }). + + +hex_dump(Data) -> hex_dump1(Data, hd_opts([])). + +hex_dump(X, Max) when is_integer(Max) -> + hex_dump(X, [{max_bytes,Max}]); +hex_dump(X, OptList) when is_list(OptList) -> + hex_dump1(X, hd_opts(OptList)). + +hex_dump1(B, Opts) when is_binary(B) -> hex_dump1(binary_to_list(B), Opts); +hex_dump1(L, Opts) when is_list(L), length(L) > Opts#h.max_bytes -> + io_lib:format("~s---- skip ~w bytes----~n", [hex_dump1(lists:sublist(L,Opts#h.max_bytes), Opts), + length(L) - Opts#h.max_bytes + ]); +hex_dump1(L, Opts0) when is_list(L) -> + Opts = Opts0#h{address_len = num_hex_digits(Opts0#h.max_bytes)}, + Result = hex_dump(L, [{0,[],[]}], Opts), + [io_lib:format("~*.s | ~*s | ~s~n" + "~*.c-+-~*c-+-~*c~n", + [Opts#h.address_len, lists:sublist("Address",Opts#h.address_len), + -3*Opts#h.bytes_per_line, lists:sublist("Hexdump",3*Opts#h.bytes_per_line), + "ASCII", + Opts#h.address_len, $-, + 3*Opts#h.bytes_per_line, $-, + Opts#h.bytes_per_line, $- + ]) | + [io_lib:format("~*.16.0b | ~s~*c | ~s~n",[Opts#h.address_len, N*Opts#h.bytes_per_line, + lists:reverse(Hexs), + 3*(Opts#h.bytes_per_line-length(Hexs)), $ , + lists:reverse(Chars)]) + || {N,Hexs,Chars} <- lists:reverse(Result) + ] + ]. + + +hd_opts(L) -> lists:foldl(fun hd_opt/2, #h{}, L). + +hd_opt({max_bytes,M}, O) -> O#h{max_bytes=M}; +hd_opt({bytes_per_line,M}, O) -> O#h{bytes_per_line=M}. + + +num_hex_digits(N) when N<16 -> 1; +num_hex_digits(N) -> trunc(math:ceil(math:log2(N)/4)). + + +hex_dump([L|Cs], Result0, Opts) when is_list(L) -> + Result = hex_dump(L,Result0, Opts), + hex_dump(Cs, Result, Opts); + +hex_dump(Cs, [{N0,_,Chars}|_]=Lines, Opts) when length(Chars) == Opts#h.bytes_per_line -> + hex_dump(Cs, [{N0+1,[],[]}|Lines], Opts); + +hex_dump([C|Cs], [{N,Hexs,Chars}|Lines], Opts) -> + Asc = if + 16#20 =< C,C =< 16#7E -> C; + true -> $. + end, + Hex = io_lib:format("~2.16.0b ", [C]), + hex_dump(Cs, [{N, [Hex|Hexs], [Asc|Chars]} | Lines], Opts); + +hex_dump([], Result, _) -> + Result. + + + diff --git a/lib/ssl/doc/src/notes.xml b/lib/ssl/doc/src/notes.xml index 10455684f1..f0231da2ad 100644 --- a/lib/ssl/doc/src/notes.xml +++ b/lib/ssl/doc/src/notes.xml @@ -27,73 +27,6 @@ </header> <p>This document describes the changes made to the SSL application.</p> -<section><title>SSL 9.3</title> - - <section><title>Fixed Bugs and Malfunctions</title> - <list> - <item> - <p> - The distribution handshake with TLS distribution - (<c>inet_tls_dist</c>) does now utilize the socket option - <c>{nodelay, true}</c>, which decreases the distribution - setup time significantly.</p> - <p> - Own Id: OTP-14792</p> - </item> - <item> - <p> - Correct shutdown reason to avoid an incorrect crash - report</p> - <p> - Own Id: OTP-15710 Aux Id: ERL-893 </p> - </item> - <item> - <p> - Enhance documentation and type specifications.</p> - <p> - Own Id: OTP-15746 Aux Id: ERIERL-333 </p> - </item> - </list> - </section> - - - <section><title>Improvements and New Features</title> - <list> - <item> - <p> - TLS-1.0, TLS-1.1 and DTLS-1.0 are now considered legacy - and not supported by default</p> - <p> - *** POTENTIAL INCOMPATIBILITY ***</p> - <p> - Own Id: OTP-14865</p> - </item> - <item> - <p> - Use new logger API in ssl. Introduce log levels and - verbose debug logging for SSL.</p> - <p> - Own Id: OTP-15055</p> - </item> - <item> - <p> - Basic support for TLS 1.3 Server for experimental use. - The client is not yet functional, for more information - see the Standards Compliance chapter of the User's Guide.</p> - <p> - Own Id: OTP-15591</p> - </item> - <item> - <p> - Add support for PSK CCM ciphers from RFC 6655</p> - <p> - Own Id: OTP-15626</p> - </item> - </list> - </section> - -</section> - <section><title>SSL 9.2.2</title> <section><title>Fixed Bugs and Malfunctions</title> diff --git a/lib/ssl/doc/src/ssl.xml b/lib/ssl/doc/src/ssl.xml index 422bd6a19d..d626748af6 100644 --- a/lib/ssl/doc/src/ssl.xml +++ b/lib/ssl/doc/src/ssl.xml @@ -128,7 +128,7 @@ <name name="hostname"/> </datatype> - <datatype> + <datatype> <name name="ip_address"/> </datatype> @@ -137,26 +137,14 @@ </datatype> <datatype> - <name name="protocol_version_tuple"/> - </datatype> - - <datatype> <name name="tls_version"/> </datatype> <datatype> - <name name="tls_version_tuple"/> - </datatype> - - <datatype> <name name="dtls_version"/> </datatype> <datatype> - <name name="dtls_version_tuple"/> - </datatype> - - <datatype> <name name="tls_legacy_version"/> </datatype> @@ -264,46 +252,6 @@ <name name="reason"/> </datatype> - <datatype> - <name name="http_packet"/> - </datatype> - - <datatype> - <name name="http_request"/> - </datatype> - - <datatype> - <name name="http_response"/> - </datatype> - - <datatype> - <name name="http_header"/> - </datatype> - - <datatype> - <name name="http_error"/> - </datatype> - - <datatype> - <name name="http_method"/> - </datatype> - - <datatype> - <name name="http_uri"/> - </datatype> - - <datatype> - <name name="http_version"/> - </datatype> - - <datatype> - <name name="http_field"/> - </datatype> - - <datatype> - <name name="http_string"/> - </datatype> - <datatype_title>TLS/DTLS OPTION DESCRIPTIONS - COMMON for SERVER and CLIENT</datatype_title> <datatype> @@ -1507,6 +1455,11 @@ fun(srp, Username :: string(), UserState :: term()) -> <name since="" name="recv" arity="2" /> <name since="" name="recv" arity="3" /> <fsummary>Receives data on a socket.</fsummary> + <type_desc variable="HttpPacket">See the description of + <c>HttpPacket</c> in + <seealso marker="erts:erlang#decode_packet/3"><c>erlang:decode_packet/3</c></seealso> + in ERTS. + </type_desc> <desc> <p>Receives a packet from a socket in passive mode. A closed socket is indicated by return value @@ -1612,7 +1565,7 @@ fun(srp, Username :: string(), UserState :: term()) -> </func> <func> - <name since="OTP 21.0" name="suite_to_str" arity="1" /> + <name since="OTP 21.0" name="suite_to_str" arity="1" clause_i="1" /> <fsummary>Returns the string representation of a cipher suite.</fsummary> <desc> <p>Returns the string representation of a cipher suite.</p> diff --git a/lib/ssl/doc/src/standards_compliance.xml b/lib/ssl/doc/src/standards_compliance.xml index 25840d0fc6..ca98385f85 100644 --- a/lib/ssl/doc/src/standards_compliance.xml +++ b/lib/ssl/doc/src/standards_compliance.xml @@ -133,7 +133,8 @@ <list type="bulleted"> <item>Key Exchange: ECDHE</item> <item>Groups: all standard groups supported for the Diffie-Hellman key exchange</item> - <item>Ciphers: TLS_AES_128_GCM_SHA256 and TLS_AES_256_GCM_SHA384</item> + <item>Ciphers: TLS_AES_128_GCM_SHA256, TLS_AES_256_GCM_SHA384, + TLS_CHACHA20_POLY1305_SHA256 and TLS_AES_128_CCM_SHA256</item> <item>Signature Algorithms: RSA and RSA PSS</item> <item>Certificates: currently only certificates with RSA keys are supported</item> </list> @@ -1967,8 +1968,8 @@ <row> <cell align="left" valign="middle"></cell> <cell align="left" valign="middle">SHOULD implement the TLS_CHACHA20_POLY1305_SHA256</cell> - <cell align="left" valign="middle"><em>NC</em></cell> - <cell align="left" valign="middle"></cell> + <cell align="left" valign="middle"><em>C</em></cell> + <cell align="left" valign="middle">22</cell> </row> <row> @@ -2203,14 +2204,14 @@ <row> <cell align="left" valign="middle"></cell> <cell align="left" valign="middle">TLS_CHACHA20_POLY1305_SHA256</cell> - <cell align="left" valign="middle"><em>NC</em></cell> - <cell align="left" valign="middle"></cell> + <cell align="left" valign="middle"><em>C</em></cell> + <cell align="left" valign="middle">22</cell> </row> <row> <cell align="left" valign="middle"></cell> <cell align="left" valign="middle">TLS_AES_128_CCM_SHA256</cell> - <cell align="left" valign="middle"><em>NC</em></cell> - <cell align="left" valign="middle"></cell> + <cell align="left" valign="middle"><em>C</em></cell> + <cell align="left" valign="middle">22</cell> </row> <row> <cell align="left" valign="middle"></cell> diff --git a/lib/ssl/src/ssl.erl b/lib/ssl/src/ssl.erl index a3138e8c30..e3bb4df1ac 100644 --- a/lib/ssl/src/ssl.erl +++ b/lib/ssl/src/ssl.erl @@ -80,7 +80,6 @@ cipher_filters/0, sign_algo/0, protocol_version/0, - protocol_version_tuple/0, protocol_extensions/0, session_id/0, error_alert/0, @@ -105,11 +104,8 @@ -type ip_address() :: inet:ip_address(). -type session_id() :: binary(). % exported -type protocol_version() :: tls_version() | dtls_version(). % exported --type protocol_version_tuple() :: tls_version_tuple() | dtls_version_tuple(). % exported -type tls_version() :: 'tlsv1.2' | 'tlsv1.3' | tls_legacy_version(). --type tls_version_tuple() :: {3,0} | {3,1} | {3,2} | {3,3} | {3,4}. -type dtls_version() :: 'dtlsv1.2' | dtls_legacy_version(). --type dtls_version_tuple() :: {254,254} | {254,253}. -type tls_legacy_version() :: tlsv1 | 'tlsv1.1' | sslv3. -type dtls_legacy_version() :: 'dtlsv1'. -type verify_type() :: verify_none | verify_peer. @@ -122,7 +118,6 @@ aes_128_ccm_8 | aes_256_ccm_8 | chacha20_poly1305 | - null | legacy_cipher(). % exported -type legacy_cipher() :: rc4_128 | des_cbc | @@ -130,8 +125,7 @@ -type hash() :: sha | sha2() | - legacy_hash() | - null. % exported + legacy_hash(). % exported -type sha2() :: sha224 | sha256 | @@ -162,7 +156,7 @@ srp_rsa| srp_dss | psk | dhe_psk | rsa_psk | dh_anon | ecdh_anon | srp_anon | - any | null. %% TLS 1.3 , exported + any. %% TLS 1.3 , exported -type erl_cipher_suite() :: #{key_exchange := kex_algo(), cipher := cipher(), mac := hash() | aead, @@ -244,73 +238,6 @@ bad_certificate_hash_value | unknown_psk_identity | no_application_protocol. --type http_packet() :: http_request() | - http_response() | - http_header() | - http_eoh | - http_error(). --type http_request() :: {http_request, http_method(), http_uri(), http_version()}. --type http_response() :: {http_response, http_version(), integer(), http_string()}. --type http_header() :: {http_header, integer(), http_field(), Reserved :: term(), - Value :: http_string()}. --type http_error() :: {http_error, http_string()}. --type http_method() :: 'OPTIONS' | 'GET' | 'HEAD' | 'POST' | 'PUT' | 'DELETE' | 'TRACE'. --type http_uri() :: any(). --type http_version() :: {Major :: integer(), Minor :: integer()}. --type http_field() :: 'Cache-Control' | - 'Connection' | - 'Date' | - 'Pragma' | - 'Transfer-Encoding' | - 'Upgrade' | - 'Via' | - 'Accept' | - 'Accept-Charset' | - 'Accept-Encoding' | - 'Accept-Language' | - 'Authorization' | - 'From' | - 'Host' | - 'If-Modified-Since' | - 'If-Match' | - 'If-None-Match' | - 'If-Range' | - 'If-Unmodified-Since' | - 'Max-Forwards' | - 'Proxy-Authorization' | - 'Range' | - 'Referer' | - 'User-Agent' | - 'Age' | - 'Location' | - 'Proxy-Authenticate' | - 'Public' | - 'Retry-After' | - 'Server' | - 'Vary' | - 'Warning' | - 'Www-Authenticate' | - 'Allow' | - 'Content-Base' | - 'Content-Encoding' | - 'Content-Language' | - 'Content-Length' | - 'Content-Location' | - 'Content-Md5' | - 'Content-Range' | - 'Content-Type' | - 'Etag' | - 'Expires' | - 'Last-Modified' | - 'Accept-Ranges' | - 'Set-Cookie' | - 'Set-Cookie2' | - 'X-Forwarded-For' | - 'Cookie' | - 'Keep-Alive' | - 'Proxy-Connection' | - http_string(). --type http_string() :: string() | binary(). %% ------------------------------------------------------------------------------------------------------- -type common_option() :: {protocol, protocol()} | @@ -841,7 +768,8 @@ send(#sslsocket{pid = {ListenSocket, #config{transport_info = Info}}}, Data) -> -spec recv(SslSocket, Length) -> {ok, Data} | {error, reason()} when SslSocket :: sslsocket(), Length :: integer(), - Data :: binary() | list() | http_packet(). + Data :: binary() | list() | HttpPacket, + HttpPacket :: any(). recv(Socket, Length) -> recv(Socket, Length, infinity). @@ -849,8 +777,9 @@ recv(Socket, Length) -> -spec recv(SslSocket, Length, Timeout) -> {ok, Data} | {error, reason()} when SslSocket :: sslsocket(), Length :: integer(), - Data :: binary() | list() | http_packet(), - Timeout :: timeout(). + Data :: binary() | list() | HttpPacket, + Timeout :: timeout(), + HttpPacket :: any(). recv(#sslsocket{pid = [Pid|_]}, Length, Timeout) when is_pid(Pid), (is_integer(Timeout) andalso Timeout >= 0) or (Timeout == infinity)-> @@ -1083,27 +1012,23 @@ eccs() -> %%-------------------------------------------------------------------- -spec eccs(Version) -> NamedCurves when - Version :: protocol_version() | protocol_version_tuple(), + Version :: protocol_version(), NamedCurves :: [named_curve()]. %% Description: returns the curves supported for a given version of %% ssl/tls. %%-------------------------------------------------------------------- -eccs({3,0}) -> +eccs(sslv3) -> []; -eccs({3,_}) -> - Curves = tls_v1:ecc_curves(all), - eccs_filter_supported(Curves); -eccs({254,_} = Version) -> - eccs(dtls_v1:corresponding_tls_version(Version)); +eccs('dtlsv1') -> + eccs('tlsv1.1'); +eccs('dtlsv1.2') -> + eccs('tlsv1.2'); eccs(Version) when Version == 'tlsv1.2'; Version == 'tlsv1.1'; - Version == tlsv1; - Version == sslv3 -> - eccs(tls_record:protocol_version(Version)); -eccs(Version) when Version == 'dtlsv1.2'; - Version == 'dtlsv1'-> - eccs(dtls_v1:corresponding_tls_version(dtls_record:protocol_version(Version))). + Version == tlsv1 -> + Curves = tls_v1:ecc_curves(all), + eccs_filter_supported(Curves). eccs_filter_supported(Curves) -> CryptoCurves = crypto:ec_curves(), @@ -1387,7 +1312,13 @@ tls_version({254, _} = Version) -> %%-------------------------------------------------------------------- -spec suite_to_str(CipherSuite) -> string() when - CipherSuite :: erl_cipher_suite(). + CipherSuite :: erl_cipher_suite(); + (CipherSuite) -> string() when + %% For internal use! + CipherSuite :: #{key_exchange := null, + cipher := null, + mac := null, + prf := null}. %% %% Description: Return the string representation of a cipher suite. %%-------------------------------------------------------------------- diff --git a/lib/ssl/src/ssl_cipher.hrl b/lib/ssl/src/ssl_cipher.hrl index 9c5e2f80a9..0fa5f66c49 100644 --- a/lib/ssl/src/ssl_cipher.hrl +++ b/lib/ssl/src/ssl_cipher.hrl @@ -690,9 +690,9 @@ -define(TLS_CHACHA20_POLY1305_SHA256, <<?BYTE(16#13),?BYTE(16#03)>>). %% %% TLS_AES_128_CCM_SHA256 = {0x13,0x04} -%% -define(TLS_AES_128_CCM_SHA256, <<?BYTE(16#13), ?BYTE(16#04)>>). +-define(TLS_AES_128_CCM_SHA256, <<?BYTE(16#13), ?BYTE(16#04)>>). %% %% TLS_AES_128_CCM_8_SHA256 = {0x13,0x05} -%% -define(TLS_AES_128_CCM_8_SHA256, <<?BYTE(16#13),?BYTE(16#05)>>). +-define(TLS_AES_128_CCM_8_SHA256, <<?BYTE(16#13),?BYTE(16#05)>>). -endif. % -ifdef(ssl_cipher). diff --git a/lib/ssl/src/ssl_cipher_format.erl b/lib/ssl/src/ssl_cipher_format.erl index 887eb6c653..577156a4b5 100644 --- a/lib/ssl/src/ssl_cipher_format.erl +++ b/lib/ssl/src/ssl_cipher_format.erl @@ -955,12 +955,12 @@ suite_bin_to_map(?TLS_CHACHA20_POLY1305_SHA256) -> #{key_exchange => any, cipher => chacha20_poly1305, mac => aead, - prf => sha256}. -%% suite_bin_to_map(?TLS_AES_128_CCM_SHA256) -> -%% #{key_exchange => any, -%% cipher => aes_128_ccm, -%% mac => aead -%% prf => sha256}; + prf => sha256}; +suite_bin_to_map(?TLS_AES_128_CCM_SHA256) -> + #{key_exchange => any, + cipher => aes_128_ccm, + mac => aead, + prf => sha256}. %% suite_bin_to_map(?TLS_AES_128_CCM_8_SHA256) -> %% #{key_exchange => any, %% cipher => aes_128_ccm_8, @@ -1690,12 +1690,12 @@ suite_map_to_bin(#{key_exchange := any, cipher := chacha20_poly1305, mac := aead, prf := sha256}) -> - ?TLS_CHACHA20_POLY1305_SHA256. -%% suite_map_to_bin(#{key_exchange := any, -%% cipher := aes_128_ccm, -%% mac := aead, -%% prf := sha256}) -> -%% ?TLS_AES_128_CCM_SHA256; + ?TLS_CHACHA20_POLY1305_SHA256; +suite_map_to_bin(#{key_exchange := any, + cipher := aes_128_ccm, + mac := aead, + prf := sha256}) -> + ?TLS_AES_128_CCM_SHA256. %% suite_map_to_bin(#{key_exchange := any, %% cipher := aes_128_ccm_8, %% mac := aead, diff --git a/lib/ssl/src/tls_v1.erl b/lib/ssl/src/tls_v1.erl index f103f3218b..27cd5765e5 100644 --- a/lib/ssl/src/tls_v1.erl +++ b/lib/ssl/src/tls_v1.erl @@ -501,18 +501,18 @@ suites(3) -> suites(4) -> [?TLS_AES_256_GCM_SHA384, ?TLS_AES_128_GCM_SHA256, - ?TLS_CHACHA20_POLY1305_SHA256 + ?TLS_CHACHA20_POLY1305_SHA256, + ?TLS_AES_128_CCM_SHA256 %% Not supported - %% ?TLS_AES_128_CCM_SHA256, %% ?TLS_AES_128_CCM_8_SHA256 ] ++ suites(3); suites('TLS_v1.3') -> [?TLS_AES_256_GCM_SHA384, ?TLS_AES_128_GCM_SHA256, - ?TLS_CHACHA20_POLY1305_SHA256 + ?TLS_CHACHA20_POLY1305_SHA256, + ?TLS_AES_128_CCM_SHA256 %% Not supported - %% ?TLS_AES_128_CCM_SHA256, %% ?TLS_AES_128_CCM_8_SHA256 ]. diff --git a/lib/ssl/test/ssl_basic_SUITE.erl b/lib/ssl/test/ssl_basic_SUITE.erl index 56e6117cc4..20d9f28512 100644 --- a/lib/ssl/test/ssl_basic_SUITE.erl +++ b/lib/ssl/test/ssl_basic_SUITE.erl @@ -1832,14 +1832,12 @@ eccs() -> eccs(Config) when is_list(Config) -> [_|_] = All = ssl:eccs(), - [] = SSL3 = ssl:eccs({3,0}), - [_|_] = Tls = ssl:eccs({3,1}), - [_|_] = Tls1 = ssl:eccs({3,2}), - [_|_] = Tls2 = ssl:eccs({3,3}), [] = SSL3 = ssl:eccs(sslv3), [_|_] = Tls = ssl:eccs(tlsv1), [_|_] = Tls1 = ssl:eccs('tlsv1.1'), [_|_] = Tls2 = ssl:eccs('tlsv1.2'), + [_|_] = Tls1 = ssl:eccs('dtlsv1'), + [_|_] = Tls2 = ssl:eccs('dtlsv1.2'), %% ordering is currently unverified by the test true = lists:sort(All) =:= lists:usort(SSL3 ++ Tls ++ Tls1 ++ Tls2), ok. diff --git a/lib/ssl/vsn.mk b/lib/ssl/vsn.mk index 3c66ffd852..98070f794c 100644 --- a/lib/ssl/vsn.mk +++ b/lib/ssl/vsn.mk @@ -1 +1 @@ -SSL_VSN = 9.3 +SSL_VSN = 9.2.2 diff --git a/lib/stdlib/doc/src/notes.xml b/lib/stdlib/doc/src/notes.xml index 90e9827ec8..65650a25c7 100644 --- a/lib/stdlib/doc/src/notes.xml +++ b/lib/stdlib/doc/src/notes.xml @@ -31,231 +31,6 @@ </header> <p>This document describes the changes made to the STDLIB application.</p> -<section><title>STDLIB 3.9</title> - - <section><title>Fixed Bugs and Malfunctions</title> - <list> - <item> - <p> Fix a bug in <c>string:lexemes/2</c>. </p> <p> The - bug was found when optimizing the handling of deep lists - of Unicode characters in the <c>string</c> module. </p> - <p> - Own Id: OTP-15649</p> - </item> - <item> - <p>A bug has been fixed in the <c>maps</c> implementation - that could cause a crash or memory usage to grow until - the machine ran out of memory. This could happen when - inserting a new key-value pair with a key <c>K1</c> - containing a binary <c>B1</c> into a map <c>M</c> having - a key <c>K2</c> with a binary <c>B2</c> if the following - conditions were met:</p> <list> <item><c>B1 =/= - B2</c></item> <item><c>size(B1) >= 4294967296</c></item> - <item><c>size(B2) >= 4294967296</c></item> - <item><c>size(M) >= 32</c></item> <item><c>(size(B1) rem - 4294967296) == (size(B2) rem 4294967296)</c></item> - <item>the first <c>(size(B1) rem 4294967296)</c> bytes - are the same both in <c>B1</c> and <c>B2</c></item> - <item>substituting <c>B1</c> in <c>K1</c> with <c>B2</c> - would create a term with the same value as - <c>K2</c></item> </list> <p>The root cause of the problem - is that the <c>maps</c> implementation only hashed the - first <c>(X rem 4294967296)</c> bytes of binaries so that - different binaries could get the same hash value - independently of the hash seed.</p> - <p> - Own Id: OTP-15707</p> - </item> - <item> - <p> Since the introduction of the stack trace variable, - the Erlang Pretty Printer has left out the exception - class <c>throw</c> even when the stack trace variable - cannot be left out, which is not correct Erlang code. The - fix is to always include the exception class - <c>throw</c>. </p> - <p> - Own Id: OTP-15751</p> - </item> - <item> - <p><c>record_info/2</c> is a pseudo-function that - requires literal arguments known at compile time. - Therefore, the following usage is illegal: <c>fun - record/info/2</c>. The compiler would crash when during - compilation of that kind of code. Corrected to issue a - compilation error.</p> - <p> - Own Id: OTP-15760 Aux Id: ERL-907 </p> - </item> - </list> - </section> - - - <section><title>Improvements and New Features</title> - <list> - <item> - <p> A new <c>rand</c> module algorithm, <c>exro928ss</c> - (Xoroshiro928**), has been implemented. It has got a - really long period and good statistical quality for all - output bits, while still being only about 50% slower than - the default algorithm. </p><p> The same generator is also - used as a long period counter in a new <c>crypto</c> - plugin for the <c>rand</c> module, algorithm - <c>crypto_aes</c>. This plugin uses AES-256 to scramble - the counter which buries any detectable statistical - artifacts. Scrambling is done in chunks which are cached - to get good amortized speed (about half of the default - algorithm). </p> - <p> - Own Id: OTP-14461 Aux Id: PR-1857 </p> - </item> - <item> - <p> - Types related to server naming and starting have been - exported from <c>gen_statem</c>. These are: - <c>server_name/0</c>, <c>server_ref/0</c>, - <c>start_opt/0</c>, <c>start_ret/0</c> and - <c>enter_loop_opt/0</c>.</p> - <p> - Own Id: OTP-14724 Aux Id: PR-2056 </p> - </item> - <item> - <p> - The default algorithm for the <c>rand</c> module has been - changed to <c>exsss</c> (Xorshift116**) which is a - combination of the Xorshift116 (<c>exsp</c>) state update - and a new scrambler "StarStar" from the 2018 paper - "Scrambled Linear Pseudorandom Number Generators" by - David Blackman and Sebastiano Vigna. This combination - should not have the caveat of weak low bits that the - previous default algorithm(s) have had, with the cost of - about 10% lower speed. See GitHub pull request #1969.</p> - <p> - Own Id: OTP-14731 Aux Id: PR-1969 </p> - </item> - <item> - <p> - The generic state machine behaviour <c>gen_statem</c> has - gotten code cleanup and documentation improvements from - GitHub Pull Request #1855, even though the PR itself was - rejected.</p> - <p> - Own Id: OTP-14737 Aux Id: PR-1855 </p> - </item> - <item> - <p> - Update Unicode specification to version 11.0.</p> - <p> - Own Id: OTP-15111</p> - </item> - <item> - <p> - ETS option <c>write_concurrency</c> now also affects and - improves the scalability of <c>ordered_set</c> tables. - The implementation is based on a data structure called - contention adapting search tree, where the lock - granularity adapts to the actual amount of concurrency - exploited by the applications in runtime.</p> - <p> - Own Id: OTP-15128</p> - </item> - <item> - <p> - Optimized <c>maps:new/0</c> with trivial Erlang - implementation, making use of literal terms (the empty - map) not needing dynamic heap allocation.</p> - <p> - Own Id: OTP-15200 Aux Id: PR-1878 </p> - </item> - <item> - <p>The <c>gen_*</c> behaviours have been changed so that - if logging of the last N messages through - <c>sys:log/2,3</c> is active for the server, this log is - included in the terminate report.</p> <p>To accomplish - this the format of "System Events" as defined in the man - page for <c>sys</c> has been clarified and cleaned up, a - new function <c>sys:get_log/1</c> has been added, and - <c>sys:get_debug/3</c> has been deprecated. Due to these - changes, code that relies on the internal badly - documented format of "System Events", need to be - corrected.</p> - <p> - *** POTENTIAL INCOMPATIBILITY ***</p> - <p> - Own Id: OTP-15381</p> - </item> - <item> - <p> - The <c>gen_statem</c> behaviour engine loop has been - optimized for better performance in particular when the - callback module returns some actions, that is better - performance for more realistic applications than the Echo - Benchmark.</p> - <p> - Own Id: OTP-15452</p> - </item> - <item> - <p> - The <c>persistent_term</c> functions <c>put/2</c> and - <c>erase/1</c> are now yeliding.</p> - <p> - Own Id: OTP-15615</p> - </item> - <item> - <p>Previously, all ETS tables used centralized counter - variables to keep track of the number of items stored and - the amount of memory consumed. These counters can cause - scalability problems (especially on big NUMA systems). - This change adds an implementation of a decentralized - counter and modifies the implementation of ETS so that - ETS tables of type <c>ordered_set</c> with - <c>write_concurrency</c> enabled use the decentralized - counter. Experiments indicate that this change - substantially improves the scalability of ETS - <c>ordered_set</c> tables with <c>write_concurrency</c> - enabled in scenarios with frequent <c>ets:insert/2</c> - and <c>ets:delete/2</c> calls.</p> - <p> - Own Id: OTP-15623 Aux Id: PR-2190 </p> - </item> - <item> - <p> Use <c>ssh</c> instead of <c>rsh</c> as the default - remote shell. </p> - <p> - Own Id: OTP-15633 Aux Id: PR-1787 </p> - </item> - <item> - <p>Added <c>beam_lib:strip/2</c> and friends, which - accept a list of chunks that should be preserved when - stripping.</p> - <p> - Own Id: OTP-15680 Aux Id: PR-2114 </p> - </item> - <item> - <p> There are new compiler options <c>nowarn_removed</c> - and <c>{nowarn_removed,Items}</c> to suppress warnings - for functions and modules that have been removed from - OTP.</p> - <p> - Own Id: OTP-15749 Aux Id: ERL-904 </p> - </item> - <item> - <p> Let the Erlang Pretty Printer put atomic parts on the - same line. </p> - <p> - Own Id: OTP-15755</p> - </item> - <item> - <p> Add option <c>quote_singleton_atom_types</c> to the - Erlang Pretty Printer's functions. Setting the option to - <c>true</c> adds quotes to all singleton atom types. </p> - <p> - Own Id: OTP-15756</p> - </item> - </list> - </section> - -</section> - <section><title>STDLIB 3.8.1</title> <section><title>Fixed Bugs and Malfunctions</title> diff --git a/lib/stdlib/doc/src/queue.xml b/lib/stdlib/doc/src/queue.xml index 83a8afea81..89cce6d85b 100644 --- a/lib/stdlib/doc/src/queue.xml +++ b/lib/stdlib/doc/src/queue.xml @@ -168,7 +168,7 @@ <fsummary>Test if a queue is empty.</fsummary> <desc> <p>Tests if <c><anno>Q</anno></c> is empty and returns <c>true</c> if - so, otherwise otherwise.</p> + so, otherwise <c>false</c>.</p> </desc> </func> diff --git a/lib/stdlib/src/stdlib.app.src b/lib/stdlib/src/stdlib.app.src index ecb514e9f3..9cd425db9a 100644 --- a/lib/stdlib/src/stdlib.app.src +++ b/lib/stdlib/src/stdlib.app.src @@ -108,7 +108,7 @@ dets]}, {applications, [kernel]}, {env, []}, - {runtime_dependencies, ["sasl-3.0","kernel-6.0","erts-10.4","crypto-3.3", + {runtime_dependencies, ["sasl-3.0","kernel-6.0","erts-@OTP-15128@","crypto-3.3", "compiler-5.0"]} ]}. diff --git a/lib/stdlib/src/stdlib.appup.src b/lib/stdlib/src/stdlib.appup.src index ff92c1267f..08612ed17f 100644 --- a/lib/stdlib/src/stdlib.appup.src +++ b/lib/stdlib/src/stdlib.appup.src @@ -19,15 +19,22 @@ %% %% We allow upgrade from, and downgrade to all previous %% versions from the following OTP releases: +%% - OTP 20 %% - OTP 21 -%% - OTP 22 %% %% We also allow upgrade from, and downgrade to all %% versions that have branched off from the above %% stated previous versions. %% {"%VSN%", - [{<<"^3\\.5$">>,[restart_new_emulator]}, + [{<<"^3\\.4$">>,[restart_new_emulator]}, + {<<"^3\\.4\\.0(?:\\.[0-9]+)+$">>,[restart_new_emulator]}, + {<<"^3\\.4\\.1(?:\\.[0-9]+)*$">>,[restart_new_emulator]}, + {<<"^3\\.4\\.2(?:\\.[0-9]+)*$">>,[restart_new_emulator]}, + {<<"^3\\.4\\.3(?:\\.[0-9]+)*$">>,[restart_new_emulator]}, + {<<"^3\\.4\\.4(?:\\.[0-9]+)*$">>,[restart_new_emulator]}, + {<<"^3\\.4\\.5(?:\\.[0-9]+)*$">>,[restart_new_emulator]}, + {<<"^3\\.5$">>,[restart_new_emulator]}, {<<"^3\\.5\\.0(?:\\.[0-9]+)+$">>,[restart_new_emulator]}, {<<"^3\\.5\\.1(?:\\.[0-9]+)*$">>,[restart_new_emulator]}, {<<"^3\\.6$">>,[restart_new_emulator]}, @@ -36,9 +43,15 @@ {<<"^3\\.7\\.0(?:\\.[0-9]+)+$">>,[restart_new_emulator]}, {<<"^3\\.7\\.1(?:\\.[0-9]+)*$">>,[restart_new_emulator]}, {<<"^3\\.8$">>,[restart_new_emulator]}, - {<<"^3\\.8\\.0(?:\\.[0-9]+)+$">>,[restart_new_emulator]}, - {<<"^3\\.8\\.1(?:\\.[0-9]+)*$">>,[restart_new_emulator]}], - [{<<"^3\\.5$">>,[restart_new_emulator]}, + {<<"^3\\.8\\.0(?:\\.[0-9]+)+$">>,[restart_new_emulator]}], + [{<<"^3\\.4$">>,[restart_new_emulator]}, + {<<"^3\\.4\\.0(?:\\.[0-9]+)+$">>,[restart_new_emulator]}, + {<<"^3\\.4\\.1(?:\\.[0-9]+)*$">>,[restart_new_emulator]}, + {<<"^3\\.4\\.2(?:\\.[0-9]+)*$">>,[restart_new_emulator]}, + {<<"^3\\.4\\.3(?:\\.[0-9]+)*$">>,[restart_new_emulator]}, + {<<"^3\\.4\\.4(?:\\.[0-9]+)*$">>,[restart_new_emulator]}, + {<<"^3\\.4\\.5(?:\\.[0-9]+)*$">>,[restart_new_emulator]}, + {<<"^3\\.5$">>,[restart_new_emulator]}, {<<"^3\\.5\\.0(?:\\.[0-9]+)+$">>,[restart_new_emulator]}, {<<"^3\\.5\\.1(?:\\.[0-9]+)*$">>,[restart_new_emulator]}, {<<"^3\\.6$">>,[restart_new_emulator]}, @@ -47,5 +60,4 @@ {<<"^3\\.7\\.0(?:\\.[0-9]+)+$">>,[restart_new_emulator]}, {<<"^3\\.7\\.1(?:\\.[0-9]+)*$">>,[restart_new_emulator]}, {<<"^3\\.8$">>,[restart_new_emulator]}, - {<<"^3\\.8\\.0(?:\\.[0-9]+)+$">>,[restart_new_emulator]}, - {<<"^3\\.8\\.1(?:\\.[0-9]+)*$">>,[restart_new_emulator]}]}. + {<<"^3\\.8\\.0(?:\\.[0-9]+)+$">>,[restart_new_emulator]}]}. diff --git a/lib/stdlib/vsn.mk b/lib/stdlib/vsn.mk index 07224afdc9..6471dc70e0 100644 --- a/lib/stdlib/vsn.mk +++ b/lib/stdlib/vsn.mk @@ -1 +1 @@ -STDLIB_VSN = 3.9 +STDLIB_VSN = 3.8.1 diff --git a/lib/syntax_tools/doc/src/notes.xml b/lib/syntax_tools/doc/src/notes.xml index a2dd78f280..772f5e6e04 100644 --- a/lib/syntax_tools/doc/src/notes.xml +++ b/lib/syntax_tools/doc/src/notes.xml @@ -32,34 +32,6 @@ <p>This document describes the changes made to the Syntax_Tools application.</p> -<section><title>Syntax_Tools 2.2</title> - - <section><title>Fixed Bugs and Malfunctions</title> - <list> - <item> - <p> - All incorrect (that is, all) uses of "can not" has been - corrected to "cannot" in source code comments, - documentation, examples, and so on.</p> - <p> - Own Id: OTP-14282 Aux Id: PR-1891 </p> - </item> - </list> - </section> - - - <section><title>Improvements and New Features</title> - <list> - <item> - <p> Correct links in the documentation. </p> - <p> - Own Id: OTP-15761</p> - </item> - </list> - </section> - -</section> - <section><title>Syntax_Tools 2.1.7</title> <section><title>Fixed Bugs and Malfunctions</title> diff --git a/lib/syntax_tools/vsn.mk b/lib/syntax_tools/vsn.mk index 0ace11772d..538c71dc24 100644 --- a/lib/syntax_tools/vsn.mk +++ b/lib/syntax_tools/vsn.mk @@ -1 +1 @@ -SYNTAX_TOOLS_VSN = 2.2 +SYNTAX_TOOLS_VSN = 2.1.7 diff --git a/lib/tools/doc/src/notes.xml b/lib/tools/doc/src/notes.xml index fd41e2cbeb..2191ebe2df 100644 --- a/lib/tools/doc/src/notes.xml +++ b/lib/tools/doc/src/notes.xml @@ -31,49 +31,6 @@ </header> <p>This document describes the changes made to the Tools application.</p> -<section><title>Tools 3.2</title> - - <section><title>Fixed Bugs and Malfunctions</title> - <list> - <item> - <p> - Add <c>cprof</c> and <c>tags</c> modules to .app file so - that they are included in releases.</p> - <p> - Own Id: OTP-15534 Aux Id: PR-2078 </p> - </item> - <item> - <p> - Improved documentation parsing in emacs erldoc - functionality.</p> - <p> - Own Id: OTP-15699 Aux Id: PR-2184 </p> - </item> - </list> - </section> - - - <section><title>Improvements and New Features</title> - <list> - <item> - <p>The <c>cover</c> tool now uses the <c>counters</c> - module instead of <c>ets</c> for updating the counters - for how many times a line has been executed. By default, - Cover will work with distributed nodes, but a new - function <c>cover:local_only/0</c> allows running the - Cover in a restricted but faster local-only mode.</p> - <p>The increase in speed will vary depending on the type - of code being cover-compiled, but as an example, the - compiler test suite runs more than twice as fast with the - new Cover.</p> - <p> - Own Id: OTP-15575</p> - </item> - </list> - </section> - -</section> - <section><title>Tools 3.1</title> <section><title>Fixed Bugs and Malfunctions</title> diff --git a/lib/tools/vsn.mk b/lib/tools/vsn.mk index 191a458c62..5700885549 100644 --- a/lib/tools/vsn.mk +++ b/lib/tools/vsn.mk @@ -1 +1 @@ -TOOLS_VSN = 3.2 +TOOLS_VSN = 3.1 diff --git a/lib/wx/doc/src/notes.xml b/lib/wx/doc/src/notes.xml index 0c3374091d..33d02e22ba 100644 --- a/lib/wx/doc/src/notes.xml +++ b/lib/wx/doc/src/notes.xml @@ -32,23 +32,6 @@ <p>This document describes the changes made to the wxErlang application.</p> -<section><title>Wx 1.8.8</title> - - <section><title>Fixed Bugs and Malfunctions</title> - <list> - <item> - <p> - All incorrect (that is, all) uses of "can not" has been - corrected to "cannot" in source code comments, - documentation, examples, and so on.</p> - <p> - Own Id: OTP-14282 Aux Id: PR-1891 </p> - </item> - </list> - </section> - -</section> - <section><title>Wx 1.8.7</title> <section><title>Fixed Bugs and Malfunctions</title> diff --git a/lib/wx/vsn.mk b/lib/wx/vsn.mk index 91d15de3a9..dac219fa98 100644 --- a/lib/wx/vsn.mk +++ b/lib/wx/vsn.mk @@ -1 +1 @@ -WX_VSN = 1.8.8 +WX_VSN = 1.8.7 diff --git a/lib/xmerl/doc/src/notes.xml b/lib/xmerl/doc/src/notes.xml index 37973d0dba..d6b6dfdfb5 100644 --- a/lib/xmerl/doc/src/notes.xml +++ b/lib/xmerl/doc/src/notes.xml @@ -32,21 +32,6 @@ <p>This document describes the changes made to the Xmerl application.</p> -<section><title>Xmerl 1.3.21</title> - - <section><title>Fixed Bugs and Malfunctions</title> - <list> - <item> - <p> - A typo in an error printout has been fixed.</p> - <p> - Own Id: OTP-14703 Aux Id: PR-1964 </p> - </item> - </list> - </section> - -</section> - <section><title>Xmerl 1.3.20</title> <section><title>Fixed Bugs and Malfunctions</title> diff --git a/lib/xmerl/vsn.mk b/lib/xmerl/vsn.mk index 08696606e6..31ffa6e749 100644 --- a/lib/xmerl/vsn.mk +++ b/lib/xmerl/vsn.mk @@ -1 +1 @@ -XMERL_VSN = 1.3.21 +XMERL_VSN = 1.3.20 |