Versions Compared

Key

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

...

Code Block
bgColor#ccccff
public int do_operation(int a, int b) throws ArithmeticException {
  int temp;
    if( (b>0 && (a > Integer.MAX_VALUE - b)) || (a < Integer.MIN_VALUE -b) )
         throw new ArithmeticException();
       else
         temp = a + b;  //Value within range can perform the addition
      //Do  stuff return
       temp;
}

Compliant Solution (Use BigInteger Class)

...

Code Block
bgColor#ccccff
public boolean overflow(long a, long b) {
  BigInteger ba = new java.math.BigInteger(String.valueOf(a));
  BigInteger bb = new java.math.BigInteger(String.valueOf(b));
  BigInteger br = ba.add(bb);
  return (br.compareTo(BigInteger.valueOf(Long.MAX_VALUE)) == 1 ||
          br.compareTo(BigInteger.valueOf(Long.MIN_VALUE))== -1);
}

public intlong do_operation(long a, long b) throws ArithmeticException {
  if(overflow(a,b))
    throw new ArithmeticException();
  else 
    // Within range; safely perform the addition
    return a + b;
}

With use of the BigInteger class, integer overflows are definitely eliminated. However, due to increased performance costs, it should be used only when other methods are not appropriate.

...

Code Block
bgColor#FFcccc
public int do_operation(int a, int b) {
  int temp = a - b;
  // Could result in overflow
  // Perform other processing
  return temp;
}

Compliant Solution (Use Long)

...

Code Block
bgColor#ccccff
public int do_operation(int a,int b) {
  long temp = (long)a - (long)b;
  if(temp < Integer.MIN_VALUE || temp > Integer.MAX_VALUE)
    throw new ArithmeticException();
  else
    result = (int) temp;
    return temp;
}

Compliant Solution (Bounds Checking)

...

Code Block
bgColor#ccccff
public int do_operation(int a, int b) throws ArithmeticException {
  int temp;
    if( (b>0 && (a < Integer.MIN_VALUE + b)) || (a > Integer.MAX_VALUE + b) )
         throw new ArithmeticException();
       else
         temp = a - b;  //Value within range can perform the addition
       //Do stuff return
       temp;
}

Compliant Code Example (Use BigInteger Class)

...

Code Block
bgColor#ccccff
public boolean underflow(long a, long b) {
  BigInteger ba = new BigInteger(String.valueOf(a));
  BigInteger bb = new BigInteger(String.valueOf(b));
  BigInteger br = ba.subtract(bb);
  return (br.compareTo(BigInteger.valueOf(Long.MAX_VALUE)) == 1 ||
          br.compareTo(BigInteger.valueOf(Long.MIN_VALUE)) == -1);
}

public intlong do_operation(long a, long b) throws ArithmeticException {
  if(underflow(a,b))
    throw new ArithmeticException();
  else 
    // Within range; safely perform the subtraction
    return a - b;
}

Multiplication

This noncompliant code example can result in a signed integer overflow during the multiplication of the signed operands a and b. If this behavior is unanticipated, the resulting value may lead to undefined behavior.

...