You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 15 Next »

Exceptions should only be used to denote exceptional conditions. They should not be used for ordinary control flow purposes.

Noncompliant Code Example

This noncompliant code example attempts to concatenate a few string elements of array c and store the result as the first element. It uses an ArrayIndexOutOfBoundsException to detect the end of the array and initialize the value of variable i to 0 in the catch block. However, if some element of the array is null, a NullPointerException results. This exception is caught and ignored, a violation of EXC09-J. Do not catch NullPointerException. Consequently, the variable i is not initialized to 0 as expected.

String c[] = new String[3];
c[0] = "value1";
c[1] = "value2";
c[2] = "value3";
	
int i;
c[1] = null; // gets null value

try {
  i = 0;
  while(true) {	         
    c[0] = c[0].concat(c[i + 1]); // Concatenate and store in c[0]  
    i++;
  }
} catch (ArrayIndexOutOfBoundsException e) {
  i = 0; // Attempts to initialize i to 0
} catch (NullPointerException npe) {
  // Ignores
}

The real purpose of exception handling is to detect and recover from exceptional conditions and not to willfully transfer control flow. Besides, performance wise, the exception-based idiom is far slower than the standard code block. It also prevents certain optimizations that JVM would otherwise perform.

Compliant Solution

This compliant solution uses a standard for loop to concatenate the strings.

String c[] = new String[3];
c[0] = "value1";
c[1] = "value2";
c[2] = "value3";

int i;
for (i = 1; i < c.length; i++) {
  c[0] = c[0].concat(c[i]);
}
i = 0; // Initialize i to 0 after operation

Risk Assessment

The use of exceptions for anything but detecting and handling exceptional conditions can result in performance degradation and poor design.

Rule

Severity

Likelihood

Remediation Cost

Priority

Level

EXC10- J

low

unlikely

medium

P2

L3

Automated Detection

TODO

Related Vulnerabilities

Search for vulnerabilities resulting from the violation of this rule on the CERT website.

References

[[Bloch 01]] Item 39: "Use exceptions only for exceptional conditions"
[[JLS 05]]


CON02-J. Facilitate thread reuse by using Thread Pools      11. Concurrency (CON)      CON04-J. Do not call overridable methods from synchronized regions

  • No labels