Versions Compared

Key

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

...

Exceptions

Wiki Markup
*MSC09-EX1EX0*: The {{break}} statement at the end of the final case in a {{switch}} statement may be omitted.  By convention, this is the {{default}} label. The {{break}} statement serves to transfer control to the end of the {{switch}} block.  Fall-through behavior also causes control to arrive at the end of the {{switch}} block. Consequently, control transfers to the statements following the {{switch}} block without regard to the presence or absence of the {{break}} statement.  Nevertheless, the final case in a {{switch}} statement should end with a {{break}} statement, in accordance with good programming style (see \[[Rogue 2000|AA. Bibliography#Rogue 00]\]).

MSC09-EX2EX1: When multiple cases require execution of identical code, then break statements may be omitted from all cases except the last one. For example:

Code Block
bgColor#CCCCFF
int card = 11;
int value;

// Cases 11,12,13 fall through to the same case 
switch (card) {
  // MSC13-J:EX2: these three cases are treated identically 
  case 11:        // break not required
  case 12:        // break not required
  case 13: 
    value = 10; 
    break;        // break required
  default: 
    // Handle Error Condition 
}

MSC09-EX3EX2: When a case ends with a return or throw statement, the break statement may be omitted.

...

Rule

Severity

Likelihood

Remediation Cost

Priority

Level

MSC09-J

medium

unlikely

low

P6

L2

Related Vulnerabilities

...

Related Guidelines

CERT C Secure Coding Standard

MSC17-C. Finish every set of statements associated with a case label with a break statement

CERT C++ Secure Coding Standard

MSC18-CPP. Finish every set of statements associated with a case label with a break statement

<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="b6a3762f130400d0-ff526994-40ce401a-9fb89700-4efae67e2909173a06659298"><ac:plain-text-body><![CDATA[

[ISO/IEC TR 24772:2010

http://www.aitcnet.org/isai/]

"Switch Statements and Static Analysis [CLL]"

]]></ac:plain-text-body></ac:structured-macro>

MITRE CWE

CWE ID 484, "Omitted Break Statement in Switch"

...

<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="585befd7b6745850-87019ff2-48984141-b22ca2eb-f288a7d0211bedf448132ba3"><ac:plain-text-body><![CDATA[

[[JLS 2005

AA. Bibliography#JLS 05]]

[Section 14.11 The switch Statement

http://java.sun.com/docs/books/jls/third_edition/html/statements.html#14.11]

]]></ac:plain-text-body></ac:structured-macro>

<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="9054f585b298fc16-f0477578-4102426e-8dc58382-ae22ea826efc63c4fb606bc3"><ac:plain-text-body><![CDATA[

[[Rogue 2000

AA. Bibliography#Rogue 00]]

[The Elements of Java Style

http://www.ambysoft.com/books/elementsJavaStyle.html], Rule 78.

]]></ac:plain-text-body></ac:structured-macro>

...