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.

...

Code Block
bgColor#ffcccc
langc
#include <fcntl.h>
#include <sys/stat.h>

int main(void) {
   char *file_name = "&#xBB;&#xA3;???&#xAB;\xe5ngstr\xf6m";
   mode_t mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH;

   int fd = open(file_name, O_CREAT | O_EXCL | O_WRONLY, mode);
   if (fd == -1) {
      /* Handle error */
   }
}

An implementation is free to define its own mapping of the "nonsafe" characters. For example, when tested run on a Red Hat Enterprise Linux distribution7.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)

...

Partially implemented

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
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

0285
0286
0287
0288
0289
0299

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
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.

...