87 lines
1.4 KiB
Plaintext
87 lines
1.4 KiB
Plaintext
include::../description.adoc[]
|
|
|
|
== Noncompliant Code Example
|
|
|
|
[source,java]
|
|
----
|
|
switch (param) { //missing default clause
|
|
case 0:
|
|
doSomething();
|
|
break;
|
|
case 1:
|
|
doSomethingElse();
|
|
break;
|
|
}
|
|
|
|
switch (param) {
|
|
default: // default clause should be the last one
|
|
error();
|
|
break;
|
|
case 0:
|
|
doSomething();
|
|
break;
|
|
case 1:
|
|
doSomethingElse();
|
|
break;
|
|
}
|
|
----
|
|
|
|
== Compliant Solution
|
|
|
|
[source,java]
|
|
----
|
|
switch (param) {
|
|
case 0:
|
|
doSomething();
|
|
break;
|
|
case 1:
|
|
doSomethingElse();
|
|
break;
|
|
default:
|
|
error();
|
|
break;
|
|
}
|
|
----
|
|
|
|
== Exceptions
|
|
|
|
If the ``++switch++`` parameter is an ``++Enum++`` and if all the constants of this enum are used in the ``++case++`` statements, then no ``++default++`` clause is expected.
|
|
|
|
|
|
Example:
|
|
|
|
----
|
|
public enum Day {
|
|
SUNDAY, MONDAY
|
|
}
|
|
...
|
|
switch(day) {
|
|
case SUNDAY:
|
|
doSomething();
|
|
break;
|
|
case MONDAY:
|
|
doSomethingElse();
|
|
break;
|
|
}
|
|
----
|
|
|
|
== See
|
|
|
|
* https://cwe.mitre.org/data/definitions/478[MITRE, CWE-478] - Missing Default Case in Switch Statement
|
|
* https://wiki.sei.cmu.edu/confluence/x/RtYxBQ[CERT, MSC01-C.] - Strive for logical completeness
|
|
|
|
ifdef::env-github,rspecator-view[]
|
|
|
|
'''
|
|
== Implementation Specification
|
|
(visible only on this page)
|
|
|
|
include::../message.adoc[]
|
|
|
|
'''
|
|
== Comments And Links
|
|
(visible only on this page)
|
|
|
|
include::../comments-and-links.adoc[]
|
|
endif::env-github,rspecator-view[]
|