Age | Commit message (Collapse) | Author |
|
There are two different definitions of the EXTERNAL data type in ASN.1:
the original from 1990 and an updated from 1994. Both defintions
are encoded in the same way (in BER). There are still
systems in use that use the old definition of EXTERNAL, so the
asn1 application must still support both.
It has been decided that the asn1 application should handle both
the forms without any compiler options. Internally the asn1 application
uses the 1990 definition. The encode functions will accept both
definitions, but translate the 1994 format to the 1990 format
if needed. When decoding, it will decode to the 1990 definition format
first and then translate to the 1994 defintion format.
One problem with this approach is that the conversion to the 1994
format may not be loss-less (where the 1990 defintion had a CHOICE
between an OPEN TYPE, OCTET STRING, or BIT STRING, the 1994 definition
only supports an OCTET STRING), and therefore it might not be possible
to correctly re-encode the data in the 1990 format.
It seems that the only reliable way to handle that problem is to not
do the conversion to the 1994 format if the conversion is not
loss-less. (There is an attempt when translating to the 1990 format
to recover the CHOICE alternative based on the Erlang type of
the data value, but that is neither reliable nor future-proof.)
That is, when decoding an EXTERNAL value, the resulting
tuple could either conform to the 1990 or 1994 definition, and
applications must be prepared to handle that.
The mail conversation where this issue was first reported can be
found here:
http://erlang.org/pipermail/erlang-questions/2011-April/057697.html
Reported-by: Harald Welte <[email protected]>
|
|
|
|
Dialyzer will warn for default clauses that cannot possible match.
|
|
|
|
In the BER run-time code (asn1rtt_ber), there is a general function
for decoding a string:
decode_restricted_string(Tlv, Range, StringType, TagsIn)
But the StringType argument is not important. It is only used
internally in asn1rtt_ber to distinguish universal strings and BMP
strings from other strings. By slightly refactoring the string
decoding code, we can eliminate the StringType argument and a
subsequent run-time test on the string type. That will slightly reduce
code size, slightly increase speed, and eliminate Dialyzer warnings.
|
|
Refactor decoding of BIT STRINGs so that the run-time code does
not spend testing conditions that are known already at compile-time
(which wastes time and produces unnecessary Dialyzer warnings).
There are three ways to decode BIT STRINGs:
1) To a list of bit names (and {bit,Position} for unnamed positions)
if the BIT STRING type has any bit names.
2a) To a list of ones and zeros if there are no named bits, and the
compact_bit_string option was NOT given.
2b) To a {Unused,Bin} tuple if there are no named bits compact_bit_string
option WAS given.
Structure the decoding functions in the same way.
|
|
Always pre-encode the values for the enumeration. Clean up the
code and let the per and uper back-ends share the code.
|
|
|
|
We are about to remove the old asn1rt* modules, so we must remove
the calls that eldap make to them. Since the calls are just a
sanity check, we can just remove the calls. Just doing the decode
will do roughly the same tests and generate similar exceptions.
|
|
enif_make_new_binary() cannot return NULL, so while at it,
remove the check for return value of enif_make_new_binary()
being NULL.
|
|
Also make sure that the error handling is contained within the
asn1rt_nif module and does not leak out to generated code.
|
|
|
|
|
|
|
|
|
|
The template modules (asn1rtt_*.erl) are based on the existing
run-time modules, but with some simplifications and improvements,
for example:
The run-time functions for BER encoding took a Constraint argument which
was not used. It has been eliminated, along with the unused StringType
argument for the encode_restricted_string function.
The Range argument for decode_enumerated() has been dropped since it
was not used.
|
|
|
|
|
|
* fredrik/ssh/ssh-internal-error/OTP-10731:
Fixed internal error on when client and server can not agree o which authmethod to use
|
|
* fredrik/ssh/port_in_use_error:
Fixed bug which lead to crash in startup of daemon, if port was in use
|
|
* ia/ssl/simplify-addition-of-keyexchange-algorithms/OTP-10709:
SSL: simplify server key encoding, decoding and signature handling
SSL: unify the different implementations signature check implementations
|
|
* anders/diameter/length_error/OTP-10693:
More testcases in traffic suite
Test diameter_packet answers
Ensure correct setting of 3xxx result code
|
|
|
|
This and record/list encode more systematically.
|
|
|
|
A bad AVP Length (resulting in excess bytes from decode) but no other
errors caused the request to fail when attempting to set Result-Code.
A protocol error in combination with a 5xxx error caused the latter to
be set in an answer-message.
|
|
* nox/enable-silent-rules/OTP-10726:
Implement ./otp_build configure --enable-silent-rules
|
|
* egil/fix-LM_TRY_ENABLE_CFLAG:
Fix LM_TRY_ENABLE_CFLAG to use correct environment
|
|
* bjorn/kernel/undefined-function-handler/OTP-10617:
Teach error_handler to call '$handle_undefined_function'
|
|
* bjorn/remove-parameterized-modules/OTP-10616:
Remove support for parameterized modules
xref_SUITE: Don't test parameterized modules
shell_SUITE: Don't test parameterized modules
erl_expand_records_SUITE: Don't test parameterized modules
erl_eval: Don't test parameterized modules
|
|
|
|
|
|
* nox/rm-reverse-eta-conversion/OTP-10682:
Don't use fun references in cprof_SUITE
Make trace_local_SUITE work without the reverse eta conversion
Remove the reverse eta-conversion from v3_kernel
|
|
* nox/promote-inline_list_funcs/OTP-10690:
Raise a function_clause error with the right arguments when inlining
Properly guard against badly-typed arguments when inlining
Make inlined list functions fail with function_clause
Document compiler option 'inline_list_funcs'
Silence some wrong warnings triggered by inline_list_funcs
|
|
authmethod to use
|
|
Conflicts:
erts/vsn.mk
|
|
|
|
|
|
server key encoding depends to the negotiated key exchange. Before
the encoding was limited to diffie-hellman keys. This changes allows
to select the key structure to decode and verify. It also consolidates
the transport encoding of the parameters into one place.
|
|
ssl_handshake and ssl_connection where doing essentially the same when
checking a public key signature. This unify both into a single function
|
|
global_SUITE registers the name 'test_server' in the global registry
for what seems to be only historical reasons. Exactly how it happened
is lost in the mists of time, but I think the following is a reasonable
reconstruction:
* At one point in time, the test_server application started to do
a global registration of a 'test_server' process to support
embedded systems when the test_server application was run on both a
host and a target system.
* global_SUITE had to be modified to take the pre-existing
'test_server' registration into account.
* When Erlang/OTP switched to using common_test, global_SUITE was
modified to register the 'test_server' name itself in commit
8bd07f450816eaaae52d28740d89ead1f930cd02 (since the test_server
application does not register the 'test_server' name when run
under control of common_test).
To slightly reduce the size of global_SUITE, remove the redundant
registration and stop expecting 'test_server' to be registered.
|
|
* bjorn/remove-packages/OTP-10348:
compile: Remove vestiges of package support
Remove documentation about packages
|
|
* sal/get_env/OTP-10694:
Moved documentation in a separate entry
Removed obsolete ?line macro
Add application:get_key/3
|
|
* mh/escript_emulator_flags_vs_shebang/OTP-10691:
escript to accept emulator arguments when script file has no shebang
|
|
* anders/diameter/application_id/OTP-10655:
Check application id in answers in traffic suite
Fix setting of Application-ID
|
|
* anders/diameter/timeout_event/OTP-10628:
Add event suite
Send CER/CEA timeout events as documented
|
|
* anders/diameter/start_event/OTP-10618:
Fix timing of service start event
|
|
* anders/diameter/packet_return/OTP-10614:
Add missing error handling clause for handle_request packet return
|
|
* anders/diameter/make_packet/OTP-10609:
Fix diameter_service:make_prepare_header/2
|
|
|