Addition of Data Structure Sentinel |
Weakness ID: 464 (Weakness Base) | Status: Incomplete |
Description Summary
Extended Description
Data-structure sentinels are often used to mark the structure of data. A common example of this is the null character at the end of strings or a special sentinel to mark the end of a linked list. It is dangerous to allow this type of control data to be easily accessible. Therefore, it is important to protect from the addition or modification of sentinels.
Scope | Effect |
---|---|
Availability | Generally this error will cause the data structure to not work properly by truncating the data. |
Example 1
The following example assigns some character values to a list of characters and prints them each individually, and then as a string. The third character value is intended to be an integer taken from user input and converted to an int.
The first print statement will print each character separated by a space. However, if a non-integer is read from stdin by getc, then atoi will not make a conversion and return 0. When foo is printed as a string, the 0 at character foo[2] will act as a NULL terminator and foo[3] will never be printed.
Phases: Implementation; Architecture and Design Encapsulate the user from interacting with data sentinels. Validate user input to verify that sentinels are not present. |
Phase: Implementation Proper error checking can reduce the risk of inadvertently introducing sentinel values into data. For example, if a parsing function fails or encounters an error, it might return a value that is the same as the sentinel. |
Phase: Requirements Use a language or compiler that performs automatic bounds checking. |
Phase: Architecture and Design Use an abstraction library to abstract away risky APIs. This is not a complete solution. |
Phase: Build and Compilation Compiler-based canary mechanisms such as StackGuard, ProPolice, and Microsoft Visual Studio /GS flag. Unless this provides automatic bounds checking, it is not a complete solution. |
Phase: Operation Use OS-level preventative functionality. This is not a complete solution. |
Nature | Type | ID | Name | View(s) this relationship pertains to![]() |
---|---|---|---|---|
ChildOf | ![]() | 138 | Improper Sanitization of Special Elements | Research Concepts (primary)1000 |
ChildOf | ![]() | 461 | Data Structure Issues | Development Concepts (primary)699 |
ChildOf | ![]() | 741 | CERT C Secure Coding Section 07 - Characters and Strings (STR) | Weaknesses Addressed by the CERT C Secure Coding Standard (primary)734 |
PeerOf | ![]() | 170 | Improper Null Termination | Research Concepts1000 |
PeerOf | ![]() | 463 | Deletion of Data Structure Sentinel | Research Concepts1000 |
Mapped Taxonomy Name | Node ID | Fit | Mapped Node Name |
---|---|---|---|
CLASP | Addition of data-structure sentinel | ||
CERT C Secure Coding | STR03-C | Do not inadvertently truncate a null-terminated byte string | |
CERT C Secure Coding | STR06-C | Do not assume that strtok() leaves the parse string unchanged |
Submissions | ||||
---|---|---|---|---|
Submission Date | Submitter | Organization | Source | |
CLASP | Externally Mined | |||
Modifications | ||||
Modification Date | Modifier | Organization | Source | |
2008-07-01 | Eric Dalci | Cigital | External | |
updated Time of Introduction | ||||
2008-09-08 | CWE Content Team | MITRE | Internal | |
updated Applicable Platforms, Common Consequences, Relationships, Other Notes, Taxonomy Mappings | ||||
2008-11-24 | CWE Content Team | MITRE | Internal | |
updated Relationships, Taxonomy Mappings | ||||
2009-07-27 | CWE Content Team | MITRE | Internal | |
updated Demonstrative Examples, Description, Other Notes, Potential Mitigations, Relationships | ||||
Previous Entry Names | ||||
Change Date | Previous Entry Name | |||
2008-04-11 | Addition of Data-structure Sentinel | |||