Software vulnerabilities can result when a programmer fails to consider all possible data states.
"may result in logic errors if widget_type unexpectedly assumes a different value" should have appended "or if its valid range is expanded during code maintenance and the programmer overlooks the need to add a case to the switch".
Is adding a default case really an instance of "remove dead code"? It seems like more of an exception, where unreachable code is added as a precautionary measure.
I think a useful common practice should be shown by using
default: /* "can't happen" */
which shows that it handles an internal logic error.
Non-Compliant Code Example
...
This non-compliant code example fails to consider all possible cases. This may be the correct behavior in this case, but failure to account for all the values of widget_type
may result in logic errors if widget_type
unexpectedly assumes a different value or if its valid range is expanded during code maintenance and the programmer overlooks the need to add a case to the switch.
This is particularly problematic in C, because an identifier declared as an enumeration constant has type int
. Therefore, a programmer can accidentally assign an arbitrary integer value to an enum
type as shown in this example.
...
Microsoft Visual C++ .NET with /W4 does not warn when assigning an integer value to an enum
type, or when the switch statement does not contain all possible values of the enumeration.
...
Code Block | ||
---|---|---|
| ||
enum WidgetEnum { WE_W, WE_X, WE_Y, WE_Z } widget_type;
widget_type = WE_X;
switch (widget_type) {
case WE_W:
/* ... */
break;
case WE_X:
/* ... */
break;
case WE_Y:
/* ... */
break;
case WE_Z:
/* ... */
break;
default: /* can't happen */
/* handle error condition */
break;
}
|
Adding a default case to a switch statement, even when all possible switch labels are specified, is an instance of allowable exception (MSC07-EX1) to MSC07-A. Detect and remove dead code, as the unreachable code is added as a precautionary measure.
Historical Discussion
This practice has been a subject of debate for some time, but a clear direction has emerged.
...