Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 4.0

...

Noncompliant Code Example

Wiki MarkupThis noncompliant example shows a bug in Tomcat version 4.1.24, initially discovered by Reasoning \[ [Reasoning 2003|AA. References#Reasoning 03]\]. The {{cardinality}} method was designed to return the number of occurrences of object {{obj}} in collection {{col}}. One valid use of the {{cardinality}} method is to determine how many objects in the collection are {{null}}. However, because membership in the collection is checked using the expression {{obj.equals(elt)}}, a null pointer dereference is guaranteed whenever {{obj}} is {{null}} and {{elt}} is not {{null}}.

Code Block
bgColor#FFcccc
public static int cardinality(Object obj, final Collection col) {
  int count = 0;
  if (col == null) {
    return count;
  }
  Iterator it = col.iterator();
  while (it.hasNext()) {
    Object elt = it.next();
    if ((null == obj && null == elt) || obj.equals(elt)) {  // null pointer dereference
      count++;
    }
  }
  return count;
}

...

Rule

Severity

Likelihood

Remediation Cost

Priority

Level

EXP01-J

low

likely

high

P3

L3

Automated Detection

...

Null pointer dereferences can happen in path-dependent ways. Limitations of automatic detection tools can require manual inspection of code \ [[Hovemeyer 2007|AA. References#Hovemeyer 07]\] to detect instances of null pointer dereferences. Annotations for method parameters that must be non-null can reduce the need for manual inspection by assisting automated null pointer dereference detection; use of these annotations is strongly encouraged.

Related Vulnerabilities

...

Java Web Start applications and applets particular to JDK version 1.6, prior to update 4, were affected by a bug that had some noteworthy security consequences. In some isolated cases, the application or applet's attempt to establish an HTTPS connection with a server generated a {{NullPointerException}} \[ [SDN 2008|AA. References#SDN 08]\]. The resulting failure to establish a secure HTTPS connection with the server caused a denial of service. Clients were temporarily forced to use an insecure HTTP channel for data exchange.

Related Guidelines

CERT C Secure Coding Standard

EXP34-C. Do not dereference null pointers

CERT C++ Secure Coding Standard

EXP34-CPP. Ensure a null pointer is not dereferenced<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="4582d625-bbbc-43bc-81d0-58bdb9c0fc96"><ac:plain-text-body><![CDATA[

[ISO/IEC TR 24772:2010http://www.aitcnet.org/isai/]

Null Pointer Dereference [XYH] ] ]></ac:plain-text-body></ac:structured-macro>

MITRE CWE

CWE-476. NULL pointer dereference

Bibliography

<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="9d9a2f25-ccb4-449a-93cb-8ac62897c753"><ac:plain-text-body><![CDATA[

[[API 2006AA. References#API 06] ]

[Method doPrivileged()

http://java.sun.com/javase/6/docs/api/java/security/AccessController.html#doPrivileged(java.security.PrivilegedAction)]

]]></ac:plain-text-body></ac:structured-macro>

<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="db8547e3-db6e-411f-8fe2-bc06cdff8fd3"><ac:plain-text-body><![CDATA[

[[Hovemeyer 2007AA. References#Hovemeyer 07] ]

 

]]></ac:plain-text-body></ac:structured-macro>

<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="edb36d9e-e159-4d48-be9d-ed7aaf6af36c"><ac:plain-text-body><![CDATA[

[ [Reasoning 2003AA. References#Reasoning 03]]

Defect ID 00-0001 ]]></ac:plain-text-body></ac:structured-macro>

 

Null Pointer Dereference <ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="d5d30a5c-38d4-45d3-a018-46db48e06c68"><ac:plain-text-body><![CDATA[

[ [SDN 2008AA. References#SDN 08]]

[Bug ID 6514454http://bugs.sun.com/bugdatabase/view_bug.do?bug_id= 6514454]
]]></ac:plain-text-body></ac:structured-macro>

...

      02. Expressions (EXP)      EXP02-J. Use the two-argument Arrays.equals() method to compare the contents of arrays