...
Also see the related rule MET06-J. Do not invoke overridable methods in clone().
Noncompliant Code Example
This noncompliant code example invokes an overridable method from the readObject() method.
| Code Block | ||
|---|---|---|
| ||
private void readObject(final ObjectInputStream stream) throws
IOException, ClassNotFoundException {
overridableMethod();
stream.defaultReadObject();
}
public void overridableMethod() {
// ...
}
|
Compliant Solution
This compliant solution removes the call to the overridable method. When removing such calls is infeasible, ensure that the overridable method is declared private or final.
| Code Block | ||
|---|---|---|
| ||
private void readObject(final ObjectInputStream stream) throws
IOException, ClassNotFoundException {
stream.defaultReadObject();
}
|
Exceptions
| Wiki Markup |
|---|
*SER11-EX1:* "The {{readObject}} methods will often call {{java.io.ObjectInputStream.defaultReadObject}}, which is an overridable method" \[[SCG 2009|AA. Bibliography#SCG 09]\]. Such calls are permitted. |
Risk Assessment
Invoking overridable methods from the readObject() method can lead to initialization errors.
Rule | Severity | Likelihood | Remediation Cost | Priority | Level |
|---|---|---|---|---|---|
SER11-J | low | probable | medium | P4 | L3 |
Related Vulnerabilities
Search for vulnerabilities resulting from the violation of this rule on the CERT website.
Bibliography
<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="6030da7a5974c5e0-e84d2ae5-407b472c-939695e0-1648477e0a55a4d83f294e95"><ac:plain-text-body><![CDATA[ | [[API 2006 | AA. Bibliography#API 06]] |
| ]]></ac:plain-text-body></ac:structured-macro> |
<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="40ff23fbd9949543-148f1856-41254209-a2b2806a-a7ab692480153dbf0a5ff8b2"><ac:plain-text-body><![CDATA[ | [[SCG 2009 | AA. Bibliography#SCG 09]] | Guideline 4-4 Prevent constructors from calling methods that can be overridden | ]]></ac:plain-text-body></ac:structured-macro> |
<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="fbfae026cf937110-20f9dab7-45a44195-8c9e88c9-ff7748aa2649224d931b29e5"><ac:plain-text-body><![CDATA[ | [[Bloch 2008 | AA. Bibliography#Bloch 08]] | Item 17: "Design and document for inheritance or else prohibit it" | ]]></ac:plain-text-body></ac:structured-macro> |
...