Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: reordered text

...

This noncompliant code example subclasses the Mutable class with a MutableProtector subclass. In this class, invoking the getter method getArray() does not allow modification of the private internal state of the class, in accordance with OBJ05-J. Defensively copy private mutable class members before returning their references.  However, an untrusted invoker may call the method setArray() and modify the Mutable object..  

Code Block
bgColor#ffcccc
langjava
class MutableProtector extends Mutable {
	@Override
    public int[] getArray() {
        return super.getArray().clone();
    }
}
// ...
private Mutable mutable = new MutableProtector();
public Mutable getMutable() {return mutable;} // May be safely invoked by untrusted caller having read ability

In this class, invoking the getter method getArray() does not allow modification of the private internal state of the class, in accordance with OBJ05-J. Defensively copy private mutable class members before returning their references.  However, an untrusted invoker may call the method setArray() and modify the Mutable object..

Compliant Solution

In general, sensitive classes can be transformed into safe-view objects by providing appropriate wrappers for all methods defined by the core interface, including the mutator methods. The wrappers for the mutator methods must throw an UnsupportedOperationException so that clients cannot perform operations that affect the immutability property of the object.

...

The MutableProtector wrapper class overrides the getArray() method and clones the array. Although calling code gets a copy of the mutable object's array, the original array remains unchanged and inaccessible. The overriding setArray() method is also overridden to throw throws an exception if the caller attempts to use this method on the returned object. This object can be passed to untrusted code when read-access to the data is permissible.

...