
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)
      * Fix XER decoder of INTEGER, OBJECT IDENTIFIER, and RELATIVE-OID.
        In some cases an INTEGER overflow during parsing is not detected
        and incorrect value is returned to the decoder instead of an error.
        Reported by Nika Pona <npona@digamma.ai>.
        (Severity: low; 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.

