Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Added text about character normalization, and changed the Risk Assessment and Automated Detection sections

...

JNI does provide methods that work with Modified UTF-8 (see [API 2013], Interface DataInput, section "Modified UTF-8"). The advantage of working with Modified UTF-8 is that it encodes \u0000 as 0xc0 0x80 instead of 0x00. This allows the use of C-style null-terminated strings that can be handled by C standard library string functions. However, arbitrary UTF-8 data cannot be expected to work correctly in JNI. Data passed to the NewStringUTF() function must be in Modified UTF-8 format. Character data read from a file or stream cannot be passed to the NewStringUTF() function without being filtered to convert the high-ASCII characters to Modified UTF-8. In other words, character data must be normalized to Modified UTF-8 before being passed to the NewStringUTF() function.

Noncompliant Code Example

...

Code Block
bgColor#CCCCFF
 

Risk Assessment

If it is assumed that Java strings are null-terminated character data is not normalized before being passed to the NewStringUTF() function then erroneous results may be obtained.

Rule

Severity

Likelihood

Remediation Cost

Priority

Level

JNI02-J

Low

Probable

HighMedium

P2P4

L3

Automated Detection

It is not feasible may be possible to automatically detect that the wrong character encoding is assumed in handling Java stringswhether character data from untrusted sources has been normalized before being passed to the NewStringUTF() function.

Bibliography