
0.9.??:
    FEATURES:
    * Added support for basic Information Object Sets driven code generation.
    * Added OER support.
    * Added LTE RRC example (Bi-Ruei, Chiu).
    * Added IEEE 1609.2 example.
    * Added SAE J2735 example.

    NOTABLE:
    * Converter example (included by default):
      * converter-sample.c renamed into converter-example.c
      * make converter-example.mk file for building that converter
      * asn1c -no-gen-example to stop generating converter-example.{c,mk}
    * asn1c -no-gen-example option to disable converter-example generation.
    * Added random value generation (-R option to converter-example).
    * Added LibFuzzer-based randomized tests for supported transfer syntaxes
      (DER, OER, UPER, XER) into tests/tests-randomized. See the following
      article to get the latest LibFuzzer-enabled clang on macOS:
        https://medium.com/@levwalkin/compile-llvm-clang-libfuzzer-b61e82718430
      then ensure the new clang is in the way:
        CC=clang CXX=clang++ ./configure --enable-Werror --enable-test-fuzzer
    * OBJECT IDENTIFIER and RELATIVE-OID API simplified.
    * uper_encode() API got new argument (breaks API compatibility).
    * asn1c -gen-XXX flags are deprecated. Use -no-gen-XXX to disable codecs.

    FIXES IN COMPILER-GENERATED OUTPUT:
      * Fix incomplete (failed) CHOICE XER decoding memory leak.
        (Severity: medium; Security impact: medium)
      * Fix REAL type overwrite conversion memory leak.
        (Severity: low; Security impact: medium)
      * Fix UPER string decoding constrained only by lower bound > 0
        (Severity: low; Security impact: none)
      * Fix UPER decoding of large [bit-]strings of size a multiple of 16K
        (Severity: low; Security impact: none)
      * Fix XER decoder crash on maliciously constructed ENUMERATED input.
        (Severity: medium; Security impact: medium)

    FIXES IN TOOLING:
      * CVE-2017-12966 verified not present.
      * Fix `unber` buffer overrun. Reported by Eric Sesterhenn.
        (Severity: low; Security impact: high)

0.9.28: 2017-03-26
    * PER decoding: avoid memory leak on error. By github.com/simo5
    * Constness patch #46 by Wim L <wiml@omnigroup.com> (41bbf1c..78d604f).
    Build issues:
    * Fixed generated file permissions introduced by earlier pull (issue/32).
    * Win32/MinGW patch #31 by Frank Morgner (frankmorgner).
    * Autoreconf fix patch by Dave Cridland (github.com/dwd)
    * Fix autoreconf-2.69 failure by github.com/brchiu
    * Fix C99 warnings. Fix by Adrien Destugues (github.com/pulkomandy).
    * C89 compliance fix by Jaroslav Imrich (github.com/jariq).
    * C standard compliance fixes by Markus Elfring (github.com/elfring).

0.9.27: 2014-Sep-17
    * Build structure fixes for portability.
    * Disable long debug of ASN.1 operations during `make check` stage.
    * Introduce --enable-ASN_DEBUG configure flag to emit long debug output.

0.9.26: 2014-Sep-11
    * Updated asn1c-usage.pdf.
    * Made -fskeletons-copy a default option; removed cmdline option.
    * Made -fnative-types a default option; removed cmdline option.
      Added -fwide-types for backwards compatibility.
    * Add -fline-refs to avoid being unfriendly to version control systems.
    * Default constraint checking fix.
      Thanks to Bartosz Marcinkiewicz <bma@megawatt.com.pl>
    * Get rid of non-standard pointer arithmetics on void* pointer.
    * PER-encoding of integers wider than 32 bits.

0.9.24:    2013-Mar-16

    * GeneralizedTime fix for working with time offsets which are not
      representable in whole hours. (Severity: low; Security impact: low)
      Thanks to IP Fabrics, Inc.
    * Added -fincludes-quoted to asn1c to generate #includes in "double"
      instead of <angle> quotes.
    * PER encoding correctness fix. (Severity: high; Security impact: low)
      Reported by Grzegorz Aksamit.
    * ENUMERATED extension values check relaxed. Reported by Gabriel Burca.
    * Fixed decimal decoding of REAL values in -fnative-types mode
      (Severity: medium; Security impact: medium)
    * Removed webcgi subproject (introduced in 2004) as useless.

0.9.22:    2008-Nov-19

    * Added -pdu=all and -pdu=<type> switches to asn1c.
    * Added PER support for most known-multiplier string types:
      IA5String, VisibleString, PrintableString, BMPString, UniversalString;
      useful types: GeneralizedTime, UTCTime, ObjectDescriptor;
      as well as REAL and OBJECT IDENTIFIER.
      TODO: SET type.
    * Added PER support for extensions in SEQUENCE.
    * Multiple enhancements by Daniele Varrazzo <daniele.varrazzo@gmail.com>
    * Fixed explicit tagging of an in-lined constructed type.
      (Severity: low; Security impact: none).
    * Memory leak fixed in SET OF / SEQUENCE OF when wrong encoding
      is encountered. (Severity: medium; Security impact: low)
    * Fixed extensibility handling of second SEQUENCE production.
      (Severity: low; Security impact: none)
    * Added DEFAULT handling for known multiplier string.
    * Added a sample OMA ULP decoder (./examples/sample.source.ULP).
    * Added full-width 32-bit integer encoding support in PER.
    * Fixed 1-byte OOB write issue with non-standard and Windows
      memory allocators (Severity: low; Security impact: medium).
      Reported by Sheng Yu.

0.9.21:    2006-Sep-17

    * skeletons/standard-modules directory is now used for standard types.
    * Fixed class field access problem (Test case 98)
      (Severity: medium; Security impact: none)
    * Refactored Information Object Classes parsing.
    * Refactored Parameterization support.
    * [typedef enum foo {}] foo_e; is now e_foo, see #1287989
    * Refactored ValueSetTypeAssignment parsing.
    * asn-decoder-template.c renamed into converter-sample.c
    * MEGACO (Media Gateway Control Protocol) decoder sample added.
    * First release of PER encoder (does not encode SETs yet).
    * Added a sample LDAP decoder (./examples/sample.source.LDAP3).
    * Added a sample 3GPP RRC decoder (./examples/sample.source.RRC).
    * Added a sample MEGACO (H.248.1) decoder (sample.source.MEGACO).

0.9.20:    2006-Mar-06

    * SET OF CHOICE, SEQUENCE OF CHOICE and a certain named S/O types
      are represented differently in XER. THIS IS AN INCOMPATIBLE CHANGE.
      (Test case 70) (Severity: low; Security impact: low)
    * asn1c: Removed -ftypes88 command line option.
    * Started PER implementation. Somewhat experimental!

0.9.19:    2005-Oct-06

    * A proper solution to circular references. No kludge flags
      should be necessary anymore to produce reference-free code:
      recursive dependencies are resolved automatically.
    * Test cases 73 & 92 keep track of various circular references.
    * Introduced compiler directives to allow finer control over the
      generated code ("--<ASN1C...>--" in comments), (Test case 93).
    * New feature for unber(1): -s <skip> bytes.
    * Mandatory elements map for SET was not getting generated properly.
      (Test case 94) (Severity: high; Security impact: low)
    * asn1c: new command line option: -fskeletons-copy.

0.9.18:    2005-Aug-14

    * The obsolete X.208 syntax is handled gracefully now (compound types'
      member names are invented on the fly). (Test case 87).
    * Generating enumeration tables for INTEGER types (Test case 88).
    * Generating enumeration tables for BIT STRING types (Test case 89).
    * Conditional INTEGER/ENUMERATED representation: long vs. INTEGER_t
      type is chosen based on PER visible constraints (Test cases 90, 91).
    * Union structures for CHOICE type are not anonymous anymore.
    * Made unber(1) program more verbose: effective structure length is
      now displayed as L="<n>" at the closing tag. (Test check-xxber.sh).
    * Fixed unber(1)'s -1 switch for indefinite encoding length.
    * New command line option for unber(1): -m to enable minimalistic mode.

0.9.17:    2005-Aug-07

    * Tagging mode is implicitly IMPLICIT if AUTOMATIC TAGS is used, #30.6.
      (Test cases 55, 86).
    * Started to use extern "C" {} in skeleton headers.
    * Introduced -finline-choice command line option to fix
      yet another class of circular references.

0.9.16:    2005-July-04

    * GeneralizedTime API now supports fractions of seconds.
      Thanks to Bent Nicolaisen <BN@JAI.com> for support.
    * ASN.1 parser has been tweaked to allow parsing something like
      "SEQUENCE----comment----", which is ambiguous for many reasons.
    * XER decoder better handles not-yet-defined future extensions.

0.9.15: 2005-July-02

    * Compiler now checks 64-bit overflows in constraints range handling
      code. No effect on the code produced by the compiler.
    * Compiler support for tagged and marked parametrized members.
    * Empty tags to element map avoided.
    * Compiled code GCC 4.x compatibility.

0.9.14:    2005-Apr-29

    * Fixed check-70.-fnative-integers.c test (it was failing
      when no test directory was found).

0.9.13:    2005-Apr-24

    * Added extra const qualifiers into the support code.
    * More RFC variations supported in crfc2asn1.pl.
    * Refined string values compatibility. (Test cases 77, 78).
    * Support for ContainedSubtype constraints. (Test case 16).
    * Parsing support for CONSTRAINED BY. (Test case 79).
    * Support for CharsDefn (Quadruple and Tuple, most used in
      ASN1-CHARACTER-MODULE) (Test case 80).
    * Pretty-printing support for WITH COMPONENT[S]. (Test case 82).
    * Streamed OCTET STRING decoding of large values: fixed allocation
      problem introduced in 0.9.9. (Severity: high; Security impact: medium)
      Reported by Yann Grossel <olrick@users.sourceforge.net>.
    * Fixed BASIC-XER encoding of REAL numbers.

0.9.12:    2005-Mar-10

    * Fixed a name clash in produced constraint checking code.
    * #includes are now in single quotes (to solve a name
      clash with system's <time.h> on a Win32 system).
    * Small refinement of XML DTD generation (`asn1c -X`).
    * Relaxed XER processing rules to skip extra whitespace
      in some more places. It also skips XML comments (although
      XML comments in XER are prohibited by X.693, #8.2.1).
      (Test case 70) (Severity: medium; Security impact: none)
      Reported by <Dominique.Nerriec@alcatel.fr>.
    * Constraints on primitive types being defined are now supported.
      (Test case 74) (Severity: low; Security impact: none)
    * XMLValueList generation fixed for CHOICE type.
      (Severity: medium; Security impact: none)
    * Added the GSM TAP3 decoder into ./examples/sample.source.TAP3

0.9.11:    2005-Mar-04

    * Released -fcompound-names to fix the name clashes in the code
      produced by the asn1c.
    * Released -fno-include-deps to avoid #including non-critical
      external dependencies.
    * Compiler is taught to produce compilable code for yet another class
      of circular ASN.1 type references.
    * X.693:8.3.4 prohibits anything but SignedNumber; fixed XER codec.
    * Fixed ENUMERATED identifier to value conversion in XER.
      Reported by <jacque.celaire@caramail.com>.
    * If the compiled file contents are the same as in already existing
      file (left from previous compilation), the old file is retained.
      This prevents thrashing `make` dependencies if amount of changes in
      the original ASN.1 module(s) is small.

0.9.10:    2005-Feb-25

    * Completed the XER XMLValueList encoding and decoding.
    * Native integer type is now using "long".
    * Fixed #1150856. Reported by <vvvy@users.sourceforge.net>.
    * Some WIN32 portability fixes.

0.9.9:    2005-Feb-22

    * First release of XER (XML) decoding implementation (somewhat
      experimental).
    * ANY allocation routine fixed.
      Reported by <mikko.ahonen@elma.net>.
    * Fixed tag parsing (tags like "[ 0 ]" were not supported).
    * Compiler now checks for duplicate ASN.1 types across modules.

0.9.8:    2005-Jan-17

    * [NEW PLATFORM] Compiled and tested on Linux @ alpha64 (LP64).
      Some code needed to be fixed regarding int-long conversions
      (mostly inside the test suite), and floating point handling
      code needed to be restructured to handle signalling NAN and
      other floating point exceptions quietly. Smooth transition!
    * [NEW PLATFORM] Compiled and tested on Sun Solaris 9 @ sparc.
      Improved includes/defines of/for system headers.
    * -X command line option added to asn1c to generate XML DTD.
    * Empty SEQUENCE and SET clauses are now allowed.
    * Removed confusion between &xNN; and &#xNN; in enber and unber.
    * Removed order dependency in DEFAULT references to ENUMERATED
      identifiers (./tests/68-*-OK.asn1).
    * ber_dec_rval_t renamed into asn_dec_rval_t: more generality.
    * Extensions in CHOICE types are properly marked as non-pointers
      (Test case 59) (Severity: medium; Security impact: medium)
      Reported by <roman.pfender@sdm.de>.
    * Tagged CHOICE type is now supported again.
      (Test case 59) (Severity: low; Security impact: low)
      Reported by <orlinkata@dir.bg>.
    * Implemented der_encode_to_buffer() procedure.

0.9.7.1:    2004-Oct-12

    * Fixed automatic tagging for extensions of compound types.
    * Fixed ParametrizedReference parsing: {} are now recognized.

0.9.7:    2004-Oct-11

    * Finished CXER implementation by adding SET and SET OF canonical
      ordering support.
    * Fixed unber(1) limits controlling logic.
    * Removed C99'izm from the x509dump, now understood by older compilers.
    * Enhanced UTF8String constraint validation, now it checks
      for the minimal encoding length; API of UTF8String_length() changed.
    * Fixed SEQUENCE dealing with premature termination of the
      optionals-laden indefinite length structure. The code was previously
      refusing to parse such structures.
    * Fixed explicitly tagged ANY type encoding and decoding
      (Severity: medium; Security impact: low).
    * Fixed CHOICE code spin when indefinite length structures appear
      in the extensions (Severity: medium; Security impact: medium).
      Reported by <siden@ul-gsm.ru>.
    * BIT STRING now stores the number of unused octets in a separate field.

0.9.6:    2004-Sep-29

    * Added several security firewalls: decoder's stack usage control
      and the stricter checking of the TLV length.
    * Implemented BASIC-XER encoding support (X.693).
    * Implemented unber(1) and enber(1) for BER<->XML translation.
    * Implemented CGI for online ASN.1 compilation (asn1c/webcgi).
    * Implemented the sample X.509 decoder (./examples/sample.source.PKIX1).
    * NamedType is now supported for SET OF/SEQUENCE OF type.
    * Added -fno-constraints option to asn1c, which disabled generation of
      ASN.1 subtype constraints checking code.
    * Added ASN1C_ENVIRONMENT_VERSION and get_asn1c_environment_version().
    * Fixed ANY type decoding (Severity: high; Security impact: low).
    * Fixed BER decoder restartability problem with certain primitive
      types (BOOLEAN, INTEGER, and REAL). The problem occured when the
      encoding of such type is split between several bytes.
      (Severity: high; Security impact: low)
    * Support for cross-referencing type definitions (updated ./tests/43-*).
    * Fixed pretty-printing of the REAL type. Added lots of test cases.
    * Renamed asn1_* into asn_* in function and type names.
    * Updated documentation.

0.9.5:    2004-Sep-17

    * Fixed CER (common BER) decoder code. See check-25.c/VisibleString
      case for details. X.690 specifies that inner structures in BER
      encoding must be tagged by stripping off the outer tag for each
      subsequent containment level. See also X.690: 8.21.5.4 and
      the "Spouse" case in A.3.
      (Severity: medium; Security impact: low)
    * Added converters between any generic type and the ANY type.
    * Parser fixed: Information Object Class fields may be taged.
    * Parser fixed: tagged types inside SEQUENCE OF/SET OF support.
    * Improved DEFAULT Value parsing and pretty-printing.
    * Condition on distinct tags checker was incorrectly dealing with
      tagged CHOICE types. Fixed. Modified tests/37-indirect-choice-OK.asn1
    * Improved type name generation code ("struct foo" vs "foo_t").
    * Fixed constraint checking code incorrectly dealing with imported
      types with constraint values defined in other modules.
    * Real REAL support! (Haven't tested denormals support yet!)
      See skeletons/tests/check-REAL.c

0.9.4:    2004-Sep-10

    * More support for recursive type definitions.
    * Explicit support for ANY type decoding.
    * Refactored tags processing code.
    * Fixed constraints checking code: non-exploitable buffer overflow.
      (Severity: medium; Security impact: low)

0.9.3:    2004-Sep-07

    * Extended constraints support in parametrized types.
    * Better support for parametrization and constraints handling.
    * Better handling of recursive type definitions.
    * Added support for ANY type.

0.9.2:    2004-Aug-24

    * More flexible subtype constraints handling, with relaxed
      PER visibility rules for actual constraints checking code generator.
    * Indirect references in constraints resolver code fixed.
    * Avoided compilation warning on gcc 3.3.3 systems.
    * Better ValueSet printing.

0.9.1:    2004-Aug-23

    * Documentation updated: doc/asn1c-usage.pdf
    * Fixed OBJECT IDENTIFIER human-readable printing.
      Reported by <siden@ul-gsm.ru>.

0.9:    2004-Aug-23

    * Reworked subtype constraints handling, aiming at PER-applicability.
    * BOOLEAN and NULL are now implemented in terms of native int type.
    * Compiler now links in only necessary skeleton files.
    * -t option added to asn1c to ease manual BER/CER/DER decoding.
    * Added support COMPONENTS OF construct.
    * Numerous parser fixes and enhancements.
    * Better constraint failure reporting.

0.8.19:    2004-Aug-18

    * Fixed BER encoder (problem encoding large tag values)
      (Severity: medium; Security impact: low)

0.8.18:    2004-Aug-12

    * Parser: fixed multiple IMPORTS problem (incorrect assertion).
    * Parser: constraints extensibility parsing fix.

0.8.17:    2004-Aug-11

    * Improved compiler output: duplicate #includes eliminated.
    * Win32 portability fixes.
    * More compatibility with C++ or non-GCC compilers.

0.8.16:    2004-Jul-22

    * Fixed application-level problem in SET OF/SEQUENCE OF array cleanup.
      (Severity: medium; Security impact: low)
    * Improved asn_GT2time() and added asn_time2{GT,UT}() functions.
    * BIT STRING pretty-printing.

0.8.15:    2004-Jul-20

    * Fixed parser: memory leak in free_struct code for SET OF/SEQUENCE OF.
      (Severity: high; Security impact: medium)
    * Fixed parser: invalid memory reference in code constructing tags.
      (Test case 48) (Severity: high; Security impact: medium)
      When encoding data for certain ASN.1 specifications containing
      explicit tags, the tag is always written incorrectly due to
      incorrect memory reference. The encoding will almost always produce
      unparseable data and might well reference unmapped region so program
      would produce segmentation violation. Fortunately, memory is
      read, not written, so remote exploits cannot execute arbitrary
      code and triggering unmapped memory reference is highly unlikely
      even it attacker knows the code (basically, the compiler should place
      asn1_DEF_... right before the end of the mapped memory region, which
      is extremely rare).
    * Improved INTEGER type printing.

0.8.14:    2004-Jun-30

    * Fixed compiler: extensibility of CHOICE and SET type has not been
      taken into account during table construction.
      (Test case 47) (Severity: high; Security impact: low)

0.8.13:    2004-Jun-29

    * Fixed compiler: the skip values for IMPLICIT tagging were broken
      in some complex cases where one type is defined using another.
      (Test case 46) (Severity: medium; Security impact: low).
    * Added -fknown-extern-type command line parameter to asn1c.
    * Removed -N command line flag and underlying functionality
      to honor KISS principle.

0.8.12:    2004-Jun-17

    * RELATIVE-OID and OBJECT IDENTIFIER encoders/decoders are not bound
      anymore to an integer type of specific size (unsigned long). The
      size of an integer must be provided explicitly.
      See {OBJECT_IDENTIFIER|RELATIVE_OID}_{get|set}_arcs().
    * SEQUENCE BER decoder fixed again for complex CHOICE case
      (Test case 44) (Severity: medium; Security impact: low).

0.8.11:    2004-Jun-05

    * Enforced stricter conformance with C standards.
    * SEQUENCE BER decoder is now equipped with the sorted map
      in case of complex CHOICE descendants. Test case 44 created.

0.8.10:    2004-Jun-02

    * Added const qualifier where necessary.
    * Changed position of outmost_tag fetcher within asn1_TYPE_descriptor_t
      structure.

0.8.9:    2004-May-26

    * Added *_{get|set}_arcs_*() functions for OBJECT IDENTIFIER
      and RELATIVE-OID, together with test cases.

0.8.8:    2004-May-09

    * Introduced subtype constraints support (incomplete!).
    * Fixed compiler. If the last member of the SEQUENCE is OPTIONAL
      and absent in the encoding, and the type is extensible (...) or
      EXTENSIBILITY IMPLIED flag is set, then the structure could not
      be correctly decoded. (Severity: high; Security impact: low).
    * Compiler: fixed recursive ASN.1 types inclusion (Severity: low,
      Security impact: none).
    * Parser: IMPORTS/FROM fixes, now allowing multiple sections.
    * NEW PLATFORM: Compiled and tested on MacOS X (@ PowerPC).
      No major portability issues experienced.

0.8.7:    2004-Apr-11    T-version-0-8-7

    * Fixed SEQUENCE BER decoder: if the last member of the SEQUENCE is
      OPTIONAL and absent in the encoding, RC_FAIL was returned instead
      of RC_OK (Severity: high; Security impact: low).
    * Added test case to check the above problem.
    * Added test case to check -fnative-integers mode.

0.8.6:    2004-Apr-03    T-version-0-8-6

    * Fixed compiler output for embedded ASN.1 structures.

0.8.5:    2004-Mar-28    T-version-0-8-5

    * Fixed ber_tlv_length() computation problem (Severity: high,
      Security impact: none).
      Reported by <vss@high.net.ru>

0.8.4:    2004-Mar-22

    * Removed RC_ITAG enumeration element from BER decoder.
      This return code did not have much practical value.

0.8.3:    2004-Mar-14    T-version-0-8-3

    * Fixed SET::BER decoder: restart after reaching a buffer boundary
      weas broken (Severity: high; Security impact: low).
    * Fixed OCTET STRING::BER decoder: restart after reaching a buffer
      boundary was broken (Severity: high; Security impact: low).
      Reported by <vss@high.net.ru>
    * Added test cases to check decoders restartability.
    * Slightly more general INTEGER2long decoder.
    * Allowed nested /* C-type */ comments, as per X.680:2002.

0.8.2:    2004-Mar-01    T-version-0-8-2

    * Fixed SEQUENCE BER decoder: an OPTIONAL element was required, where
      should not have been (Severity: major; Security impact: low).
    * Fixed print_struct pointer inheritance.
    * Added -fno-c99 and -funnamed-unions

0.8.1:    2004-Feb-22

    * -R switch to asn1c: Omit support code, compile only the tables.
    * Introduced NativeInteger pseudotype.
    * Corrected the informal print_struct()'s output format.

0.8.0:    2004-Feb-03    T-version-0-8-0

    * Some documentation is created (a .pdf and a short manual page).
    * Last touches to the code.

0.7.9:    2004-Feb-01    T-version-0-7-9

    * Human readable printing support.
    * Support for implicit (standard) constraints.

0.7.8:    2004-Jan-31

    * SET now rejects duplicate fields in the data stream.

0.7.7:    2004-Jan-25

    * Added types: GeneralizedTime and UTCTime.

0.7.6:    2004-Jan-24    T-version-0-7-6

    * DER encoding of a SET OF now involves dynamic sorting.

0.7.5:    2004-Jan-24    T-version-0-7-5

    * DER encoding of a SET with untagged CHOICE
      now involves dynamic sorting.

0.7.0:    2004-Jan-19    T-version-0-7-0

    * A bunch of DER encoders is implemented.

0.6.6:    2004-Jan-11

    * Implemented CHOICE decoder.
    * Implemented destructors support.

0.6.5:    2004-Jan-03

    * Implemented SET decoder.
    * Implemented SET OF and SEQUENCE OF decoders.

0.6.4:    2003-Dec-31

    * Implemented BOOLEAN, NULL, ENUMERATED decoders.
    * Implemented OCTET STRING decoder.
    * Implemented BIT STRING decoder.

0.6:    2003-Dec-30

    * First decoding of a BER-encoded structure!

0.5:    2003-Dec-28

    * Framework and most of the compiler backbone coding done.

0.1:    2003-Nov-28

    * Programming started.

=== Bug importance disclosure terms ===

SEVERITY.
    This term applies to the frequence the particular construct is used
    in the real world. The higher the frequency, the more chances of triggering
    this bug.
    low:    The ASN.1 specifications which could trigger
            this kind of bug are not widespread.
    medium: The particular ASN.1 construct is used quite often,
            so the chance of triggering an error is considerable.
    high:   This fix is considered urgent, or the particular ASN.1
            construct triggering this bug is in wide use.

SECURITY IMPACT.
    This term applies to the amount of potential damage a bug exploitation
    could cause.
    none:   No malicious exploitation is possible.
    low:    The local exploitation is unlikely; the remote exploitation
            is not possible.
    medium: The remote exploitation is possible when a particular ASN.1
            construct is being used. If possible, only hard failure, spin
            or memory leak are the possible outcome: no shellcode
            injection could possibly be carried by the attack.
    high:   The remote shellcode injection is possible, or the bug is
            otherwise remotely exploitable for most specifications.

