Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Wiki Markup
There are a number of existing libraries available for managing string data; the library selected depends on the approach adopted for managing null-terminated byte strings.  The functions defined by C99 Section 7.21, "String handling <string.h>" \[[ISO/IEC 9899-1999|AA. C References#ISO/IEC 9899-1999]\] are primarily intended for managing statically allocated strings.  However, these functions are problematic because many of the functions are insufficiently bounded.  Consequently, this standard recommends use of the ISO/IEC TR 24731-1 \[[ISO/IEC TR 24731-1-2007|AA. C References#ISO/IEC TR 24731-1-2007]\] functions for use with statically allocated arrays (see [STR07-A. Use TR 24731 for remediation of existing string manipulation code]).  These functions provide bounds-checking interfaces to protect against buffer overflows and other runtime constraint violations.

Wiki Markup
ISO/IEC TRPDTR 24731 Part II (24731-2, (in progress) offers another approach, supplying functions that allocate enough memory for their results \[[ISO/IEC WDTRPDTR 24731-2|AA. C References#ISO/IEC WDTRISO/IEC PDTR 24731-2]\]. ISO/IEC TRPDTR 24731-2 Part II provides an API that dynamically allocates the results of string functions as needed. This TR  Almost all of the APIs in this TR are also in a current International Standard.  For example, PDTR 24731-2 includes POSIX functions such as {{strdup()}} \[[ISO/IEC 9945:2003|AA. C References#ISO/IEC 9945-2003]\] as well as functions from the Linux Standard Base Core Specification such as {{asprintf()}} \[[Free Standards Group 2005ISO/IEC 23360-1:2006|AA. C References#Free Standards Group 2005References#ISO/IEC 23360-1-2006]\]. 

Wiki Markup
Another library that uses dynamic allocation is the CERT managed string library.  The managed string library described in \[[Burch 06|AA. C References#Burch06]\] was developed in response to the need for a string library that could improve the quality and security of newly developed C language programs while eliminating obstacles to widespread adoption and possible standardization. The managed string library eliminates the possibility of unbounded copies, null-termination errors, and truncation by ensuring there is always adequate space available for the resulting string (including the terminating null character).  The primary advantage of the CERT managed string library, is that the source code is freely available so that the library can be adopted and customized as required by an organization.  

...

Wiki Markup
\[[Burch 06|AA. C References#Burch06]\]
\[[CERT 06c|AA. C References#CERT 06c]\]
\[[ISO/IEC PDTR 989924731-19992|AA. C References#ISO/IEC PDTR 989924731-19992]\] Section 7.21, "String handling <string.h>"
\[[MISRA 04ISO/IEC 9945:2003|AA. C References#MISRA 04References#ISO/IEC 9945-2003]\] Rule 20.4 
\[[Seacord 05aISO/IEC 9899:1999|AA. C References#Seacord 05aReferences#ISO/IEC 9899-1999]\] ChapterSection 27.21, "StringsString handling <string.h>"
\[[ISO/IEC WDTR 24731-223360-1:2006|AA. C References#ISO/IEC WDTR 24731-223360-1-2006]\] [Extensions to the

Wiki Markup
\[[MISRA 04|AA. C Library, — Part II: Dynamic Allocation Functions|http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1248.pdf]. August, 2007.References#MISRA 04]\] Rule 20.4 
\[[Free Standards Group 2005Seacord 05a|AA. C References#Free Standards Group 2005References#Seacord 05a]\] [LinuxChapter Standard Base Core Specification 3.1|http://refspecs.freestandards.org/LSB_3.1.0/LSB-Core-generic/LSB-Core-generic.pdf]. Free Standards Group. 2005 
ISO/IEC 9945:2003 (including Technical Corrigendum 1), Information technology — Programming languages, their environments and system software interfaces — Portable Operating System Interface (POSIX®).
2, "Strings"

...

STR00-A. Represent characters using an appropriate type      07. Characters and Strings (STR)       STR02-A. Sanitize data passed to complex subsystems