Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

There are several national variants of ASCII. As a result, the original ASCII is often called US-ASCII. ISO/IEC 646-1991 defines a character set, similar to US-ASCII, but with code positions corresponding to US-ASCII characters @[]{|} as national use positions [ISO/IEC 646-1991]. It also gives some liberties with the characters #$^`~. In particular characters (e.g., #$^`~).  In ISO/IEC 646-1991, several national variants of ASCII are defined, assigning different letters and symbols to the national use positions. Consequently, the characters that appear in those positions, including those in US-ASCII, are less portable in international data transfer. Because of the national variants, some characters are less portable than others: they might be transferred or interpreted incorrectly.

...

An implementation is free to define its own mapping of the "nonsafe" characters. For example, when run on Red Hat Enterprise Linux 7.5, this noncompliant code example resulted in the following file name being revealed by the ls command.:

Code Block
?ngstr?m

Compliant Solution (File Name 1)

...

Recommendation

Severity

Likelihood

Detectable

Remediation CostRepairable

Priority

Level

MSC09-C

Medium

Unlikely

Yes

NoMedium

P4

L3

Automated Detection

Partially

Tool

Version

Checker

Description

Astrée
Include Page
Astrée_V
Astrée_V

bitfield-name
character-constantenum-tag-spelling
enumeration-constant-name
function-like-macro-name
global-function-name
global-object-name
global-object-name-const
header-filename
implementation-filename
local-object-name
local-object-name-const
local-static-object-name
local-static-object-name-const
object-like-macro-name
static-function-name
static-object-name
static-object-name-const
string-literal
struct-member-name
struct-tag-spelling
typedef-name
union-member-name
union-tag-spelling

Partially checked
CodeSonar

Include Page
CodeSonar_V
CodeSonar_V

PARSE.BAD.TOKEN

Bad token
Helix QAC

Include Page
Helix QAC_V
Helix QAC_V

C0285, C0286, C0287, C0288, C0289, C0299


LDRA tool suite
Include Page
LDRA_V
LDRA_V

113 S

Partially implemented
Parasoft C/C++test
Include Page
Parasoft_V
Parasoft_V
CERT_C-MSC09-a
Only use characters defined in the ISO C standardPRQA QA-C
Include Page
PRQA QA-C_vPRQA QA-C_v
RuleChecker
Include Page
RuleChecker_V
RuleChecker_V

bitfield-name
character-constantenum-tag-spelling
enumeration-constant-name
function-like-macro-name
global-function-name
global-object-name
global-object-name-const
header-filename
implementation-filename
local-object-name
local-object-name-const
local-static-object-name
local-static-object-name-const
object-like-macro-name
static-function-name
static-object-name
static-object-name-const
string-literal
struct-member-name
struct-tag-spelling
typedef-name
union-member-name
union-tag-spelling

Partially checked
Security Reviewer - Static Reviewer

Include Page
Security Reviewer - Static Reviewer_V
Security Reviewer - Static Reviewer_V

CPPOftenMisured

Fully

0285, 0286, 0287

0288, 0289, 0299

implemented
SonarQube C/C++ Plugin
Include Page
SonarQube C/C++ Plugin_V
SonarQube C/C++ Plugin_V
S1578

Related Vulnerabilities

Search for vulnerabilities resulting from the violation of this rule on the CERT website.

...