CodeSonar Release 4.5, patchlevel 1: Release Notes

Official release date: November 17, 2017.

Note: Version 4.5p0 was an internal version and was not made available for general release.



Notes on Upgrading

When you upgrade your hub, you will be prompted to set the password for the special Administrator hub user account when the hub restarts. This will replace the previous Administrator password. You can reuse your previous Administrator password if it meets the hub password requirements specified in the Settings: Password Policy tab.

What's New

IPv6 Support CodeSonar now supports IPv6.
GUI There is one new page type: Python Console. A number of existing page types have been modified to add functionality.
Deleting Logs Analysis logs can now be deleted on a per-analysis basis from the Analysis page. You may wish to do this if you are trying to reduce the size of the hub database and do not anticipate any future need for any information in the logs from this analysis. If an analysis is still running when you remove its logs, any further log information that is submitted to the hub by that analysis will be ignored.
Floating Point Handling Improved handling for floating point arithmetic, including two new warning classes.
Distributed Analysis Control over aspects of the distributed analysis is now finer-grained: behavior in analysis mode and daemon mode are controlled separately.
Compiler Models There are three new compiler models, and new functionality for implementing custom compiler models in Python.
Warning Classes There are several new warning classes. In addition, category mappings for DISA and CWE have been updated to new versions. (DISA v4r3, CWE v2.11), and mappings have been added for new category TS17961, corresponding to identifiers from ISO/IEC TS 17961 "C Secure Coding Rules Technical Specification".
C/C++ Parser Upgrade CodeSonar now uses EDG version 4.12.
Presets Presets that enable sets of warning classes associated with one or more warning class categories no longer enable warning classes whose purpose is diagnostic (that is, those whose mnemonics begin with DIAG.*) even if they otherwise meet the criteria for inclusion. The affected presets are listed below: those marked with an asterisk (*) enabled the Unexercised {Call, Computation, Conditional, Control Flow, Data Flow} classes (DIAG.UNEX.*) in previous versions of CodeSonar but no longer do so.

bsi, cert*, certc*, certcpp*, certjava, disa*, disa_latest, disa_4r3, disa_3r10, misra*, misra_inc*, misra2004*, misra2004_inc*, misra2012*, misra2012_inc*, misrac++2008*, misrac++2008_inc*, pow10

New presets insider, insider_more, insider_only, java_style, disa_latest, disa_4r3, disa_3r10, ts17961,

Hub settings Max Processes: default was previously 10 on Windows systems and 40 otherwise. It's now 40 on all systems.
Configuration parameters There are several new configuration parameters, and several configuration parameters have been deleted. The factory setting for parameter REFINEMENT_BARRIER_PERIOD is now 10000 (previously 1000).
Search Several changes:
API The Python and C++ versions of the CodeSonar API are now out of beta and have full documentation. The sets of available functions and types have changed for all API implementations.
Compatibility Improvements CodeSonar is now compatible with 64-bit Windows 10 1607 or later with UEFI firmware with SecureBoot enabled.
No Longer Supported The following are no longer supported as of this release.
  • JRE 1.5 - If you want to analyze Java code, you must have JRE 1.6 or later
  • Windows XP
  • glibc versions before 2.4
  • Solaris for x86-64
Windows Requirements In order for CodeSonar to install correctly on Windows systems, the requirements are as follows.
Windows 10 (no update/SP requirements)
Windows 8.1 April 2014 update rollup
Windows 8 April 2014 update rollup
Windows 7 Service Pack 1
Windows Vista Service Pack 2
Windows Server 2016 (no update/SP requirements)
Windows Server 2012 R2 April 2014 update rollup
Windows Server 2012 April 2014 update rollup
Windows Server 2008 R2 Service Pack 1
Windows Server 2008 Service Pack 2
Now supported The following are newly supported as of this release.
  • OS X 10.7 and later (previously was only 10.7 and 10.8)
Known Issues CodeSonar is not currently compatible with Cygwin gcc v4.6 or later. Building/analyzing a CodeSonar project based on a compilation with one of these versions will result in one or more parse errors citing identifier __float128. This may be fixed in an upcoming release: please contact CodeSecure if the incompatibility causes problems for you.
CodeSonar for Binaries
  • New permitted input formats XCOFF, Mach-O
  • New flag -fat_mode, for use with Mach-O.
IDA Pro Note This version of CodeSonar works with IDA Pro versions 6.0-6.9. It does not work with versions later than 6.9.

Details

IPv6 Support

CodeSonar now supports IPv6. If you are running CodeSonar on a system that supports IPv6 addressing, the following changes apply.

Examples in this manual have been updated to include IPv6 addresses.

GUI

There is one new page type, and a number of existing page types have been modified.

New GUI Page Type

There is one new page type: Python Console. In consequence:

GUI Changes

There are several GUI changes for additional functionality.

Affected GUI pages/functionality Changes
Analysis Search Results
File Search Results
Home, Project Tree
Analysis: Files
Procedure Search Results
Analysis: Procedures
Project
Project Search Results
Tables of files, procedures, and analyses now offer columns for all available metrics of suitable granularity on the hub independent of whether or not they were computed for any of the table contents. A metric class is 'available' if is it present in at least one analysis that has taken place on the hub (subject to ANALYSIS_READ permission).
Chart wizard Now considers a metric class 'available' if is it present in at least one analysis that has taken place on the hub (subject to ANALYSIS_READ permission).
Global Role-Permissions
Resource Role-Permissions
Roles
Role Users
Role Ancestors
User Roles
Users
Two additional options - Root Project Tree Permissions and Root Launch Daemon Group Permissions - added to their menus of links.
Settings, Admin Settings Other Links tab now now includes a link to the hub processes log.
Analysis Comparison
(from Analysis page)
Results now show warnings in the symmetric difference over all selected analyses (previously in the union over all selected). For example:
(aid:A1 UNION aid:A2 UNION ... UNION aid:An) DIFFERENCE (aid:A1 INTERSECT aid:A2 INTERSECT ... INTERSECT aid:An)
Alerts New analysis alert type Analysis Stuck (No Slaves)
Analysis
New remove logs option.
Hub notifications
(displayed above footer in GUI pages)
New notification types:

Floating Point Handling

There are significant improvements in CodeSonar's handling of floating point arithmetic and a number of new library models for floating point operations. In consequence:

Distributed Analysis

Control over aspects of a distributed analysis is now finer-grained: the analysis process is controlled by separate sets of configuration parameters in analysis mode vs daemon mode; similarly analysis-mode slaves are controlled by a different set of configuration parameters to daemon-mode slaves.

The analysis may be remote-requesting in analysis mode, daemon mode, both, or neither.

Relevant configuration parameter changes are as follows.

Old parameter (now deleted) New Parameters
Analysis Mode Daemon Mode
REQUEST_REMOTE_SLAVES REQUEST_REMOTE_ANALYSIS_SLAVES REQUEST_REMOTE_DAEMON_SLAVES
MASTER_LISTEN_INTERFACE ANALYSIS_MASTER_LISTEN_INTERFACE DAEMON_MASTER_LISTEN_INTERFACE
REMOTE_SLAVES_LAUNCHDS REMOTE_ANALYSIS_SLAVES_LAUNCHDS REMOTE_DAEMON_SLAVES_LAUNCHDS
MASTER_USE_TLS ANALYSIS_MASTER_USE_TLS DAEMON_MASTER_USE_TLS
SLAVE_TIMEOUT ANALYSIS_SLAVE_TIMEOUT DAEMON_SLAVE_TIMEOUT
MASTER_KEEPALIVE_PERIOD ANALYSIS_MASTER_KEEPALIVE_PERIOD DAEMON_MASTER_KEEPALIVE_PERIOD

Compiler Models

There are several changes to CodeSonar compiler models.

Warning Classes

There are a number of changes to CodeSonar warning classes.

New warning classes

Many of these have a focus on security holes that can be introduced - maliciously or mistakenly - by an insider. These 'insider threat checks' can be enabled with the new insider and insider_more presets.

Others arise out of improved handling for floating point arithmetic and modeling for floating point library functions.

Name Mnemonic Notes
Possible Anti-Debugging BADFUNC.ANTIDEBUG insider
Weak Cryptography BADFUNC.WEAKCRYPTO insider
Float Division by Zero LANG.ARITH.FDIVZERO floating point
Inline Assembly Code LANG.ASM insider
Library Function Override LANG.ID.NU.LIBFN insider
sqrt on Negative Value MATH.SQRT.NEG floating point
chroot without chdir MISC.CHROOT.NOCHDIR insider
Potential Timebomb MISC.TIMEBOMB insider
Untrusted Network Host IO.UT.HOST insider
Untrusted Library Load IO.UT.LIB insider
Untrusted Network Port IO.UT.PORT insider
Untrusted Process Creation IO.UT.PROC insider

New category type: TS17961

CodeSonar now contains mappings for ISO/IEC TS 17961 "C Secure Coding Rules Technical Specification".

Changes to default enabling for Java warning classes

Previously, all Java warning classes associated with a particular third party Java tool were enabled once that tool was enabled (JAVA_ENABLE_FINDBUGS=Yes, JAVA_ENABLE_PMD=Yes, JAVA_ENABLE_THREADSAFE=Yes).

From this version of CodeSonar, Java warning classes with "Style" significance are disabled by default. They can be enabled by applying the java_style preset to the CodeSonar build/analysis, or selectively enabled with WARNING_FILTER allow rules. As always, classes that are enabled by default can be disabled with WARNING_FILTER discard rules

See Java Warning Classes for full lists of default-enabled and default-disabled warning classes for each tool.

Changes to DISA STIG category marking

"Finding ID" identifiers do not persist across versions of the Defense Information Systems Agency (DISA) Application Security and Development Security Technical Implementation Guide (STIG), so we have adjusted the DISA STIG category types to specify version and release.

There is a now a separate category type for each DISA STIG version/release for which CodeSonar has mappings (previously there was only one category type: DISA) . DISA STIG categories have the form DISA-ver:id, where id is a Finding ID from the STIG and ver indicates the STIG version. As of this release there are two possible values for ver, giving two category types:

Category Type DISA STIG version/release
DISA-4r3 Version 4, release 3 (STIG release date April 28, 2017)
DISA-3r10 Version 3, release 10 (STIG release date January 23, 2015)

Configuration Parameters

There are new, modified, and deleted configuration parameters.

New Configuration Parameters

New Parameter Purpose
ANALYSIS_MASTER_KEEPALIVE_PERIOD Specifies how often the master will broadcast keepalive requests to all slaves.
ANALYSIS_MASTER_LISTEN_INTERFACE Specifies the address on which the analysis master process will listen while it is in analysis mode (to analyze the project).
ANALYSIS_MASTER_USE_TLS Specifies whether daemon master↔slave sockets should use TLS.
ANALYSIS_SLAVE_TIMEOUT The number of seconds a slave will wait for network operations with the master to time out.
DAEMON_MASTER_KEEPALIVE_PERIOD Specifies how often the master will broadcast keepalive requests to all slaves.
DAEMON_MASTER_LISTEN_INTERFACE Specifies the address on which the daemon master process will listen.
DAEMON_MASTER_USE_TLS Specifies whether daemon master↔slave sockets should use TLS.
DAEMON_SLAVE_TIMEOUT The number of seconds a slave will wait for network operations with the master to time out.
HOOK_BLACKLIST [non-Windows systems only] Advises CodeSonar to not monitor certain executables or their subprocesses.
MAX_CHROOT_CHDIR_DIST Specifies the number of lines of code after a call to chroot() within which a subsequent call to chdir() must occur to avoid issuing a chroot without chdir warning.
MIN_B64_SCORE Specifies a threshold beyond which constant strings are identified as Base64-encoded for warning classes Untrusted Network_Host, Untrusted Library Load, and Untrusted Process Creation.
MIN_ENC_SCORE Specifies a threshold beyond which constant strings are identified as encrypted for warning classes Untrusted Network_Host, Untrusted Library Load, and Untrusted Process Creation.
NETWORK_HOST_BLACKLIST Specifies process names that will trigger Untrusted Network_Host warnings.
NETWORK_HOST_WHITELIST Specifies process names that will not trigger Untrusted Network Host warnings.
NETWORK_PORT_BLACKLIST Specifies process names that will trigger Untrusted Network_Port warnings.
NETWORK_PORT_WHITELIST Specifies process names that will not trigger Untrusted Network Port warnings.
POINTED_TO_CAPACITY_DEFAULTS_TO_TYPE_BOUNDARY When the address of a portion of an aggregate is taken, and CodeSonar is not intraprocedurally aware of the size of the underlying allocation, should the "2$Buffer Overrun" warning class checker treat the pointer's capacity as the capacity of the portion (as opposed to the capacity of the underlying allocation)?
RELAXED_TOPDOWN_FUNCPTR_RESOLUTION Specifies whether or not CodeSonar can immediately exploit knowledge of function pointer resolvents that might not be known when using other possible parallel analysis schedules.
REMOTE_ANALYSIS_SLAVES_LAUNCHDS Specifies the launch daemon or daemons from which analysis slaves may be requested.
REMOTE_DAEMON_SLAVES_LAUNCHDS Specifies the launch daemon or daemons from which analysis slaves may be requested while the analysis is running in daemon mode.
REQUEST_REMOTE_ANALYSIS_SLAVES Specifies whether or not automatically-started analysis slaves can be distributed through the hub's analysis cloud.
REQUEST_REMOTE_DAEMON_SLAVES Specifies whether or not automatically-started analysis slaves can be distributed through the hub's analysis cloud while the analysis is running in daemon mode.
TIMEBOMB_IGNORE_ZERO Specifies whether or not the Potential Timebomb check should ignore comparisons against zero.
UNTRUSTED_LIB_BLACKLIST Specifies process names that will trigger Untrusted Library Load warnings.
UNTRUSTED_LIB_WHITELIST Specifies process names that will not trigger Untrusted Library Load warnings.
UNTRUSTED_PROC_BLACKLIST Specifies process names that will trigger Untrusted Process Creation warnings.
UNTRUSTED_PROC_WHITELIST Specifies process names that will not trigger Untrusted Process Creation warnings.
WEB_CONSOLE Specifies whether the Python Console and Scheme Console will be made available for the analysis (provided the hub is running with debug features enabled).

Modified Configuration Parameters

Modified Parameter Change
REFINEMENT_BARRIER_PERIOD Factory setting is now 10000 (previously 1000).

Deleted Configuration Parameters

Deleted Parameter Notes
MASTER_KEEPALIVE_PERIOD Replaced by ANALYSIS_MASTER_KEEPALIVE_PERIOD and DAEMON_MASTER_KEEPALIVE_PERIOD.
MASTER_LISTEN_INTERFACE Replaced by ANALYSIS_MASTER_LISTEN_INTERFACE and DAEMON_MASTER_LISTEN_INTERFACE.
MASTER_USE_TLS Replaced by ANALYSIS_MASTER_USE_TLS and DAEMON_MASTER_USE_TLS.
PRETEND_FLOAT_IS_INT CodeSonar no longer ignores floating point numbers, so this parameter is no longer necessary.
REMOTE_SLAVES_LAUNCHDS Replaced by REMOTE_ANALYSIS_SLAVES_LAUNCHDS and REMOTE_DAEMON_SLAVES_LAUNCHDS.
REQUEST_REMOTE_SLAVES Replaced by REQUEST_REMOTE_ANALYSIS_SLAVES and REQUEST_REMOTE_DAEMON_SLAVES.
SCHEME_WEB_CONSOLE Replaced by WEB_CONSOLE .
SLAVE_TIMEOUT Replaced by ANALYSIS_SLAVE_TIMEOUT and DAEMON_SLAVE_TIMEOUT.
VISUALIZATION Visualization is now always enabled.

API Changes

There are substantial changes to the CodeSonar API.

C++ and Python APIs are out of beta

The C++ and Python implementations of the CodeSonar API are now out of beta.

New API Functions and Types

There are several new API functions and types.

Element C++ Python C Scheme

Functions

  - - cs_uint64_hash_seed()
cs_uint64_hash64_seed()
cs_string_hash_seed()
cs_string_hash64()
-
  ast_field::as_sfileinst() ast_field.as_sfileinst() - -
  point::has_ast() point.has_ast() - -
  point_set::to_int_pair_set_in_sfileinst point_set.to_int_pair_set_in_sfileinst() cs_pdg_vertex_set_to_int_pair_set_in_sfid() -
  sfileinst::asts_at() sfileinst.asts_at() - -
  sfileinst::child_at() sfileinst.child_at() cs_file_sfid_get_child_at() file-sfid-get-child-at
  sfileinst::offset_to_line() sfileinst.offset_to_line() - -
  sfileinst::offset_to_line_column() sfileinst.offset_to_line_column() - -
  sfileinst::parent_line() sfileinst.parent_line() cs_file_sfid_get_parent_line() file-sfid-get-parentline
  symbol::has_ast() symbol.has_ast() - -
  symbol::source_compunit() symbol.source_compunit() cs_abs_loc_source_uid() abs-loc-source-uid
Types
  file_offset - cs_file_offset -
new xr_kind, xr_role, xr_kind_role static members new xr_kind, xr_role, xr_kind_role attributes cs_ast_field_type, cs_ast_field_variant AST_FIELD

Modified API functions and types

There are many modified API functions and types.

C++ Python C Scheme Change

Functions

ast_field::ast_field() ast_field() (type updates) ast-set-field! Additionally overloaded to allow creating an AST field whose value is a source file instance
ast::operator[] ast.get(), ast_field.__getitem__() cs_ast_get_field() ast-field Set of possible return types extended to include source file instance values.
- ast.to_dict(), ast_pattern.match() - - Set of possible key-value pair types in returned dict extended to include source file instance values.
ast_field::operator[] ast_field.get(), ast_field.__getitem__() - - Set of possible return types extended to include source file instance values.
 - ast_field.value()  - - Set of possible return types extended to include source file instance values.
int_pair_set::to_point_set() int_pair_set.to_point_set() cs_int_pair_set_to_pdg_vertex_set int-pair-set-to-pdg-vertex-set Signature and semantics: now take a source file instance argument instead of a compilation unit argument.
point::charpos() point.charpos() cs_pdg_vertex_charpos() pdg-vertex-charpos Signature and semantics: now describes character positions as a set of character positions in a specified source file instance.
  • C++, Python, Scheme: return type change
  • C: additional out parameter of type cs_sfid
sfileinst::line_offset() sfileinst.line_offset() cs_file_get_line_offset() file-get-line-offset Signature and semantics: now provides offset within a source file instance (previously was within a compilation unit).
  • C++, Scheme: return type change
  • Python: return type remains int
  • C: out parameter type change.
sfileinst::line_range() sfileinst.line_range() cs_file_get_line_range() file-get-line-range Signature and semantics: now describes a line range as a pair of source file instance offsets (previously was a pair of compilation unit offsets).
  • C++, Scheme: return type change
  • Python: return type remains (int,int)
  • C: out parameters type change.
(new) (new) cs_file_get_line_num() file-get-line-num Semantics and signature: now takes a source file instance argument instead of a compilation unit argument.
(new) (new) cs_file_get_linecol() file-get-linecol Semantics and signature: now takes a source file instance argument instead of a compilation unit argument.
(replaced) (replaced) cs_file_asts_at() file-asts-at Semantics and signature: now takes
  • a source file instance argument instead of a compilation unit argument, and
  • a source file line argument instead of a compilation unit line argument.
(replaced) (replaced) ( replaced) pdg-vertex-set-to-int-pair-set Semantics and signature: now takes a source file instance argument instead of a compilation unit argument.

Types

ast_field_type static members ast_field_type attributes cs_ast_field_type, cs_ast_field_variant AST_FIELD Extended to account for AST fields that contain source file instances.
ast_class static members ast_class attributes enum symbol sets for AST classes AST_CLASS Many changes to set of AST classes, see ASTs below.
ast_ordinal static members ast_ordinal attributes enum symbol sets for AST ordinals AST_ORDINAL Many changes to set of AST ordinals, see ASTs below.

Cross-referencing Type Changes

Cross-referencing "kind", "role", and "kind-role" types have been expanded to allow finer discrimination.

Description New Modified Deleted
Kind "variable" split into set of more specific kinds. Kinds local static variable, local variable, global variable, parameter, file static variable.
Kind-roles for these new kinds: see Kind-Usage Pairs
- Kind "variable" and its associated kind-roles.
Kind function split into set of more specific kinds. Kinds static function, static method, method.
Kind-roles for these new kinds: see Kind-Usage Pairs
Kind function now only used for non-static functions. -
Kind type split into set of more specific kinds. Kind tag.
Kind-roles for tag kind: see Kind-Usage Pairs
Role "tag"; kind-role (type, tag).
Kind type no longer includes enum, struct, or union type tags. -
Other New kind-role (template type, constructor initialization). - -

Notes:

C Header File Changes

There are several new C API headers, as shown in the following table.

New C Headers Contents
cs_edge_label.h
(including cs_edge_label_inl.h)
cs_edge_label operations previously in cs_utility.h, cs_utility_inl.h.
cs_hash.h New seeded hash functions cs_uint64_hash_seed(), cs_uint64_hash64_seed()
cs_language.h cs_language operations previously in cs_source_files.h
cs_pdg_vertex_syntax.h cs_pdg_vertex_syntax_kind and cs_pdg_vertex_syntax_element operations previously in cs_pdg_vertex.h.
cs_string64.h cs_string and cs_string64 operations previously in cs_utility.h.
New hash functions cs_string_hash_seed() and cs_string_hash64()
cs_string64_type.h cs_string64 and related type declarations previously in cs_types.h.
cs_sysutil.h System utility operations and macros previously in cs_utility.h.
cs_types_common.h A number of definitions (typedef, #define) that were previously elsewhere.
  • previously in cs_types.h: cs_language, cs_ast_class, cs_ast_value, CS_EDGE_LABEL_STATIC_NULL, CS_SF_STATIC_NULL, CS_SFID_STATIC_NULL, CS_AST_STATIC_NULL, cs_edge_label, cs_uid, cs_sf, cs_sfid, cs_file_path, cs_const_file_path, cs_line, cs_column, cs_file_offset, cs_syntax_kind, cs_ast, cs_ast_family, cs_ast_ordinal
  • previously in cs_pdg_vertex.h: cs_vertex_syntax_kind, cs_vertex_syntax_element
  • previously in cs_xref.h: cs_xr_kind, cs_xr_role, cs_xr_kind_role, cs_xref_tuple
cs_val64.h CS_VAL64_* macros.
cs_xref_common.h Some operations on cs_xr_kind, cs_xr_kind_role, cs_xr_role previously in cs_xref.h.

Several C API headers have been split with some of their previous content going to new headers

Header in CodeSonar 4.4 Changes for CodeSonar 4.5
cs_source_files.h cs_language operations moved to language.h, cs_language typedef moved to cs_types_common.h.
cs_pdg_vertex.h cs_vertex_syntax_kind and cs_vertex_syntax_element typedefs moved to cs_types_common.h.
cs_types.h cs_string64 and related typedefs moved to cs_string64_type.h.
cs_utility.h
(including cs_utility_inl.h)
cs_string and cs_string64 operations moved to cs_string64.h, cs_edge_label functionality moved to cs_edge_label.h,
system utility operations and macros moved to cs_sysutil.h.
cs_xref.h Type declarations moved to cs_types_common.h, some operations moved to cs_xref_common.h

Deleted API Functions and Types

The following API elements have been deleted. These deletions fall into two categories.

Element C++ Python C Scheme
Deleted Functions using Compilation Unit Offset/Line (replacement source file instance function noted in parentheses)
  compunit::asts_at
(use sfileinst::asts_at())
compunit.asts_at
(use sfileinst.asts_at())
(argument change) (argument change)
  compunit::read
(use sfileinst::read())
compunit.read()
(use sfileinst.read())
cs_file_get_characters_in_uid()
(use cs_file_get_characters())
file-get-characters-in-uid
(use file-get-characters)
  - - csonar_add_sfi_finish_visitor()
(use csonar_add_sfi_visitor())
codesonar:add-sfi-finish-visitor
(use codesonar:add-sfi-visitor)
  point::compunit_line
(use point::file_line())

point.compunit_line
(use point.file_line())

cs_pdg_vertex_uid_line()
(use cs_pdg_vertex_file_line())
pdg-vertex-uid-line
(use pdg-vertex-file-line)
  point_set::to_int_pair_set_in_compunit
(use point_set::to_int_pair_set_in_sfileinst())
point_set.to_int_pair_set_in_compunit
(use point_set.to_int_pair_set_in_sfileinst())
cs_pdg_vertex_set_to_int_pair_set_in_uid
cs_pdg_vertex_set_to_int_pair_set_in_source_file
(use cs_pdg_vertex_set_to_int_pair_set_in_sfid)
(argument change)
  procedure::compunit_line()
(use procedure::file_line())
procedure.compunit_line()
(use procedure.file_line())
cs_pdg_uid_line()
(use cs_pdg_file_line())
pdg-uid-line
(use pdg-file-line)
  symbol::compunit_line
(use symbol::file_line())
symbol.compunit_line
(use symbol.file_line())
cs_abs_loc_uid_line()
(use cs_abs_loc_file_line())
abs-loc-uid-line
(use abs-loc-file-line)
Deleted Conversion Functions for Compilation Unit Offset/Line (removed as redundant)
  compunit::line_to_sfile_line
compunit.line_to_sfile_line
cs_uid_unitline_to_sf_line()
uid-unitline->sf-line
  compunit::line_to_sfileinst_line compunit.line_to_sfileinst_line cs_uid_unitline_to_sfid_line() uid-unitline->sfid-line
  compunit::offset_range_to_sfileinst_range compunit.offset_range_to_sfileinst_range cs_file_get_range file-get-range
  compunit::offset_to_line() compunit.offset_to_line() cs_uid_off_to_uid_line() file-uid-off->uid-line
  compunit::offset_to_sfileinst_line() compunit.offset_to_sfileinst_line() (argument change) (argument change)
  compunit::offset_to_sfileinst_line_column() compunit.offset_to_sfileinst_line_column()
(argument change) (argument change)
  sfileinst::line_to_compunit_line() sfileinst.line_to_compunit_line() cs_file_sfid_line_to_uid_line() file-sfid-line->uid-line
  sfileinst::line_to_compunit_offset() sfileinst.line_to_compunit_offset() cs_file_sfid_line_to_uid_off() file-sfid-line->uid-off
Deleted Types for Compilation Unit Offset/Line
  compunit_line
compunit_line_pair
(used raw int) cs_unitline
cs_offset
 ULINE
Deleted Types for Crossreferencing (see Crossreferencing Type Changes for full details and replacements)
  static members xr_kind::VAR, xr_kind_role::VAR_* static members xr_kind.VAR, xr_kind_role.VAR_* enum symbols csxrk_var, csxrkr_var_* equivalent symbols in the Scheme space

ASTs

There are many changes related to C/C++ ASTs.

New C/C++ AST Classes

There is one new unnormalized C/C++ AST class and one new normalized C/C++ AST class.

Modified C/C++ AST Classes

Modified Unnormalized C/C++ AST Classes
  cc:asm-entry csao_uc_position attribute replaced by csao_uc_sfid and csao_uc_line attributes.
  cc:asm-operand csao_uc_position attribute replaced by csao_uc_sfid and csao_uc_line attributes.
  cc:base-class csao_uc_position attribute replaced by csao_uc_sfid and csao_uc_line attributes.
  cc:class-struct-union csao_uc_position attribute replaced by csao_uc_sfid and csao_uc_line attributes.
  cc:constant csao_uc_position attribute replaced by csao_uc_sfid and csao_uc_line attributes.
  cc:constructor-init csao_uc_position attribute replaced by csao_uc_sfid and csao_uc_line attributes.
  cc:enum csao_uc_position attribute replaced by csao_uc_sfid and csao_uc_line attributes.
  cc:exception-specification csao_uc_position attribute replaced by csao_uc_sfid and csao_uc_line attributes.
  cc:expr csao_uc_position attribute replaced by csao_uc_sfid and csao_uc_line attributes.
  cc:field csao_uc_position attribute replaced by csao_uc_sfid and csao_uc_line attributes.
  cc:handler csao_uc_position attribute replaced by csao_uc_sfid and csao_uc_line attributes.
  cc:label csao_uc_gnu_unused attribute replaced by csao_uc_maybe_unused attribute.
csao_uc_position attribute replaced by csao_uc_sfid and csao_uc_line attributes.
  cc:lambda-capture csao_uc_position attribute replaced by csao_uc_sfid and csao_uc_line attributes.
  cc:macro csao_uc_position attribute replaced by csao_uc_sfid and csao_uc_line attributes.
  cc:namespace csao_uc_position attribute replaced by csao_uc_sfid and csao_uc_line attributes.
  cc:param-type csao_uc_position attribute replaced by csao_uc_sfid and csao_uc_line attributes.
  cc:pragma csao_uc_position attribute replaced by csao_uc_sfid and csao_uc_line attributes.
  cc:routine csao_uc_operator_name_kind attribute type changed to opname_kind_cpp (previously opname_kind_builtin).
csao_uc_gnu_unused attribute replaced by csao_uc_maybe_unused attribute.
csao_uc_position attribute replaced by csao_uc_sfid and csao_uc_line attributes.
  cc:statement csao_uc_position attribute replaced by csao_uc_sfid and csao_uc_line attributes.
  cc:switch-case-entry csao_uc_position attribute replaced by csao_uc_sfid and csao_uc_line attributes.
  cc:template csao_uc_position attribute replaced by csao_uc_sfid and csao_uc_line attributes.
  cc:template-parameter csao_uc_position attribute replaced by csao_uc_sfid and csao_uc_line attributes.
  cc:typeref csao_uc_position attribute replaced by csao_uc_sfid and csao_uc_line attributes.
  cc:using-decl csao_uc_position attribute replaced by csao_uc_sfid and csao_uc_line attributes.
  cc:vla-dimension csao_uc_position attribute replaced by csao_uc_sfid and csao_uc_line attributes.
  cc:variable csao_uc_specifier_position attribute replaced by csao_uc_specifier_line attribute.
csao_uc_gnu_unused attribute replaced by csao_uc_maybe_unused attribute.
csao_uc_position attribute replaced by csao_uc_sfid and csao_uc_line attributes.
Modified Normalized C/C++ AST Classes
  c:array New attribute csao_nc_is_c11_atomic.
  c:builtin-type New attribute csao_nc_is_c11_atomic.
  c:class New attribute csao_nc_is_c11_atomic.
  c:complex New attribute csao_nc_is_c11_atomic.
  c:csm-type-qualifiers New attribute csao_nc_is_c11_atomic.
  c:fixed-point New attribute csao_nc_is_c11_atomic.
  c:float New attribute csao_nc_is_c11_atomic.
  c:imaginary New attribute csao_nc_is_c11_atomic.
  c:integer New attribute csao_nc_is_c11_atomic.
  c:noexcept-expr C name now csac_nc_noexceptexpr, C++/Python name now NC_NOEXCEPTEXPR.
  c:pointer New attributes csao_nc_is_nullable, csao_nc_is_nonnull, csao_nc_is_null_unspecified, csao_nc_is_c11_atomic.
  c:ptr-to-member New attributes csao_nc_class_type and csao_nc_pointed_to.
  c:routine csao_nc_operator_name_kind attribute now has type opname_kind_cpp.
  c:routine-type New attributes csao_nc_return_type_defaulted, csao_nc_prototyped.
  c:struct New attribute csao_nc_is_c11_atomic.
  c:union New attribute csao_nc_is_c11_atomic.
  c:vector-type New attribute csao_nc_is_c11_atomic.
  c:void New attribute csao_nc_is_c11_atomic.

C/C++ AST Ordinal Changes

New Ordinals Deleted Ordinals
For normalized C/C++ ASTs
  • csao_nc_prototyped
  • csao_nc_class_type
  • csao_nc_description
  • csao_nc_is_c11_atomic
  • csao_nc_is_nonnull
  • csao_nc_is_nullable
  • csao_nc_is_null_unspecified
  • csao_nc_kind
  • csao_nc_location
  • csao_nc_return_type_defaulted
  • csao_uc_declared_type
  • csao_uc_is_formerly_incomplete
  • csao_uc_is_parenthesized
  • csao_uc_line
  • csao_uc_is_static
  • csao_uc_maybe_unused
  • csao_uc_prototyped
  • csao_uc_sfid
  • csao_uc_specifier_line
For unnormalized C/C++ ASTs n/a
  • csao_uc_gnu_unused
  • csao_uc_position
  • csao_uc_prototyped
  • csao_uc_specifier_position

C/C++ AST Helper Enumeration Changes

New Helper Enumerations -
Deleted Helper Enumerations opname_kind_builtin (symbols csae_c_bfk_*)
Modified Helper Enumerations type_qualifier New symbols:
  • csae_c_tqt_c11_atomic
  • csae_c_tqt_nullable
  • csae_c_tqt_nonnull
  • csae_c_tqt_null_unspecified
attribute_kind New symbols:
  • csae_c_ak_allocator
  • csae_c_ak_attr_using_prefix
  • csae_c_ak_enable_if
  • csae_c_ak_fallthrough
  • csae_c_ak_maybe_unused
  • csae_c_ak_nodiscard
opname_kind_cpp New symbol csae_c_onk_await

Customer Tickets Fixed

NUMBER NAME NOTES
4981 False Positive: Treatment of large constant addresses yields False-Positive Null Pointer Dereference warnings fixed
6745 [EDGcpfe/12504] Parse Error: incomplete type not allowed with FieldT (qualifiers on constructor) fixed
8034 Parse error: inline namespace fixed
8947 Unreachable path with call to function that never returns fixed
12003 Symmetric difference via analysis comparison UI Analysis comparison now shows warnings in the symmetric difference over all selected analyses (previously in the union over all selected).
14904 False Negative: Buffer Overrun not detected after procedure call fixed
15255 Show alert if frontendrun has status crashed "Parse Error" alerts are now also issued if the CodeSonar front end has crashed.
16242 False Negative: Can't resolve leak with loop in path fixed
16751 --display_error_number flag erroneously consumes other arguments fixed
16317 Update Green Hills model to handle cases with no source file specified on command line fixed
16610 RBAC Bug: Strange behavior when Anyone is given Sign-In fixed
16297 Custom metric plugin not displaying correctly on metrics page fixed
16440 MISRA: Unused Macro warning is by translation unit, and not by program fixed
16300 Data race search very slow on linux-2.6.37 fixed
16632 [EDGcpfe/17640] case sensitivity in find_assembly_by_path fixed
16673 [EDGcpfe/17720] Front End crash: assertion failed fixed
16767 Exception: AttributeError with search sequence fixed
16830 QNX -lang-c++/-lang-c flag results in parse errors fixed
16872 Catastrophic Error: CodeSonar front end fails when hand written assembly files used in GHC fixed
16878 Exception: Launchd authentication failure leaks password on exception fixed
16902 Bug when sorting results with Indigo fixed
16913 One of the cert-cpp-mapping.csv links is mispointed fixed
16949 Include Analysis page URL in analysis log The Analysis Log now includes lines
codesonar: Analysis initialized.
codesonar: Live progress and results are visible at:
codesonar: apage_url
where apage_url is the URL of the corresponding Analysis page.
16998 [EDGcpfe/17933] vacuous destructor calls under C++/CLI fixed
16999 False Negative: lost Missing Return Value in Win32CoupledProjects.build fixed
17001 Change to endian flags for armcl 5.2.6 TI CodeComposer Compiler Models updated
17002 [EDGcpfe/17935] MS compat: 0xE+.. fixed
17019 False Positive: Conversion to Function Pointer Rule 11.1 fixed
17029 wrong scope for destructor call fixed
17044 Report Generation: Nonsense numbers in reports fixed
17040 [EDGcpfe/17960] EDG only supports __has_include() macro for clang fixed
17082 Null FSIFLIST_T dereference (under fe_file_info_stable_compare) fixed
17096 Compiler model for arm-none-eabi-gcc Default settings now map the arm-none-eabi-gcc and arm-none-eabi-g++ compilers to the gcc compiler model (previously they were mapped to the armcc model).
17103 Internal error: assertion failed: pop_object_lifetime_full fixed
17139 Include note that Eclipse plugin can only do anonymous analysis submission Information added to additional documentation locations.
17152 MISRA C++ False Positive: "Multiple External Definitions" (MISRA C++:2008 Rule 6.3.2) fixed
17172 [EDGcpfe/18045] expression must have a constant value, make_tuple c++11 fixed
17203 Feature Request: Make the Hub IPv6 friendly See IPv6 Support, above.
17371 Hookcs code signing on Win 10 fixed
17373 Exception: Report generation replaces the session with a chart style fixed
17566 False Positive: Uninitialized Variable fixed
17595 Very slow query fixed
17906 Library Models: CodeSonar not recognizing delete and delete[] fixed
17925 pnode_tags_retrieve( &ctx->tags, lop.pn, &sub_tag ) exited with CS_ELEMENT_NOT_PRESENT fixed
17930 Document the --pending_instantiations flag for EDG frontend See --pending_instantiations
18087 Order of configuration file processing needs adjustment in the documentation Additional configuration files specified with -conf-file are loaded at the same time as configuration presets specified with -preset, with order determined by their order in the command line. (Documentation previously stated that additional configuration files were loaded last). See Configuration Files: Configuration File Loading for details.