Age | Commit message (Collapse) | Author |
|
* dev:
Fix binary construction with huge literal sizes
beam_load.c: Add overflow check of tag values
beam_makeops: Add some sanity checks
Fix construction of <<0:((1 bsl 32)-1)>>
|
|
* bjorn/erts/loader-related-bs-bugs/OTP-9284:
Fix binary construction with huge literal sizes
beam_load.c: Add overflow check of tag values
beam_makeops: Add some sanity checks
Fix construction of <<0:((1 bsl 32)-1)>>
|
|
* lukas/asn1/remove_unused_record_warnings/OTP-9448:
Remove some superflous includes which caused inlined modules to have lots of compile warnings
|
|
Constructing binaries using the bit syntax with literals sizes
that would not fit in an Uint will either cause an emulator crash
or the loading to be aborted.
Use the new TAG_o tag introduced in the previous commit to make sure
that the attempt to create huge binary literals will generate a
system_limit exception at run-time.
|
|
The handling of large values for other tags than TAG_i (integer) is
buggy. Any tag value equal to or greater than 2^40 (5 bytes) will
abort loading. Tag values fitting in 5 bytes will be truncated to 4
bytes values.
Those bugs cause real problems because the bs_init2/6 and
bs_init_bits/6 instructions unfortunately use TAG_u to encode literal
sizes (using TAG_i would have been a better choice, but it is too late
to change that now). Any binary size that cannot fit in an Uint
should cause a system_limit exception at run-time, but instead the
buggy handling will either cause an emulator crash (for values in the
range 2^32 to 2^40-1) or abort loading.
In this commit, implement overflow checking of tag values as a
preparation for fixing the binary construction instructions. If any
tag value cannot fit in an Uint (except for TAG_i), change the
tag to the special TAG_o overflow tag.
|
|
We want to make sure that a tag/type name is not defined more than
once and that we don't define too many primitive tags. Primitive
tags must be named with lowercase letters (or they will be confused
with variable names in transformations in the ops.tab file).
|
|
Attempting to construct <<0:((1 bsl 32)-1)>>, the largest bitstring
allowed in a 32 bit emulator, would cause an emulator crash because
of integer overflow.
Fix the problem by using an Uint64 to avoid integer overflow.
Do not attempt to handle construction of <<0:((1 bsl 64)-1>> in
a 64-bit emulator, because that will certainly cause the emulator
to terminate anyway because of insufficient memory.
|
|
compile warnings
|
|
* lukas/asn1/ber_encode_nif/OTP-9441:
Update to use enif_alloc instead of malloc
Make performance code more generic and migrate per/ber NBAP perormance suites to use the generic code
Update code genaration to call nif/erlang depending on what is configured
Remove export_all and only export is_nif_loadable
Add documentation for ber encode nif optmization
Fix bug in counting length of empty composite types
Fix bug where composite types with more then one element would be encoded in reverse
Add pubkey performance tests
Update ber encode nif to use a linked list memry buffer
Create a nif for ber encode
Extract generic is_nif_loadable function from decode
|
|
|
|
suites to use the generic code
|
|
|
|
|
|
|
|
|
|
reverse
|
|
Add performance tests for cert_pem and dsa_pem. These tests are not
automatically when testing asn1.
|
|
The encoded ber binary is now a linked list of memory buffers which
is written to from the back while allocating more segments as needed
|
|
|
|
|
|
* lukas/public_key/use_asn1_nif/OTP-9414:
Both encode and decode nifs are now available in the asn1rt
Start using asn1 nifs for OTP-PUB-KEY.asn1 asn1 will use an erlang fallback if the nifs are not found
|
|
* lukas/asn1/driver_to_nifs/OTP-9419: (26 commits)
Update decode_open_type to use nifs if configured to do so
Add -deprecated attributes
Update tag to be ints instead of longs
Update asn1 nif to handle calls with an empty binary
Add obsolete warning for driver option
Correct mistake in driver -> nif translation
Cannot be a binary as decode creates tuples
Remove DRIVER target from opt target
Update documentation with replacement of driver with nif
return 0 as error code when an unknown error happens
Remove all modules relating to drivers and make all functions obsolete.
Remove driver support for per encoding Handle the new error messages from the asn1 nifs Remove dead code for erlang optimized per decode
Remove driver support for ber decoding Handle the new error messages from the asn1 nifs Make ber nif decoding use the erlang fallback if the nif could not be loaded. This is useful for application which use inline (such as public_key) and want to work without the nifs, but should use them if they exist
Add load, upgrade and purge functions for asn1 nifs
Add better error messages to nifs
Exclude nif module from cover
Expand per and ber performance suites with parallel asn1 runs
Add documentation for nif interface
Fix bootstrap problem
Add nif vs driver vs erlang performance tests for per encode and ber decode. Results now suggest that nifs are 15% faster than driver for per and 5% faster for ber. Erlang is inbetween nif and driver for ber, but about 50% slower than driver for per.
...
|
|
|
|
|
|
This is in order to circumvent a bug in enif_make_ulong in R14B03 for halfword
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Handle the new error messages from the asn1 nifs
Remove dead code for erlang optimized per decode
|
|
Handle the new error messages from the asn1 nifs
Make ber nif decoding use the erlang fallback if the nif could not be loaded. This is useful for application which use inline (such as public_key) and want to work without the nifs, but should use them if they exist
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Results now suggest that nifs are 15% faster than driver for per and 5% faster for ber. Erlang is inbetween nif and driver for ber, but about 50% slower than driver for per.
|
|
|
|
|
|
|
|
|
|
nif enabled asn1
|
|
|
|
major
* lukas/asn1/sof_length_and_default_optimizations/OTP-9440:
Use lists:mapfoldl instead for a tiny performance gain
Move fixopt to do more work in ct than rt for opimized per_bin
Optmized encode_length by doing some calculations at compile time rather than runtime
Optmized decode_length by doing some calculations as compile time rather than runtime
|
|
|