91 lines
1.4 KiB
Plaintext
91 lines
1.4 KiB
Plaintext
== Why is this an issue?
|
|
|
|
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:
|
|
|
|
[source,java]
|
|
----
|
|
public enum Day {
|
|
SUNDAY, MONDAY
|
|
}
|
|
...
|
|
switch(day) {
|
|
case SUNDAY:
|
|
doSomething();
|
|
break;
|
|
case MONDAY:
|
|
doSomethingElse();
|
|
break;
|
|
}
|
|
----
|
|
|
|
== Resources
|
|
|
|
* CWE - https://cwe.mitre.org/data/definitions/478[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[]
|