From owner-sc22docs@open-std.org  Thu Mar 24 14:42:10 2005
Return-Path: <owner-sc22docs@open-std.org>
X-Original-To: sc22docs-domo
Delivered-To: sc22docs-domo@open-std.org
Received: by open-std.org (Postfix, from userid 521)
	id 71935EF75; Thu, 24 Mar 2005 14:42:10 +0100 (CET)
X-Original-To: sc22info@open-std.org
Delivered-To: sc22docs@open-std.org
Received: from email1.ansi.org (outbound.ansi.org [12.15.192.5])
	by open-std.org (Postfix) with ESMTP id A7D9BEF73
	for <sc22info@open-std.org>; Thu, 24 Mar 2005 14:42:06 +0100 (CET)
Received: by rpb2.nycrnybb.ispnetinc.net with Internet Mail Service (5.5.2653.19)
	id <19J1WMF0>; Thu, 24 Mar 2005 08:40:08 -0500
Message-ID: <FEEA109B01A4D7118B6000D0B7C9E30603C1B566@rpb2.nycrnybb.ispnetinc.net>
From: Sally Seitz <SSeitz@ansi.org>
To: sc22info@open-std.org
Subject: FW:  N 3880-Summary of Voting on SC 22 N 3838, Registration for W
	DTR 24731-Information technology-Programming languages, their environment
	s and system software interfaces-Specification for Secure C Library Funct
	ions
Date: Thu, 24 Mar 2005 08:40:02 -0500
MIME-Version: 1.0
X-Mailer: Internet Mail Service (5.5.2653.19)
Content-Type: multipart/alternative;
	boundary="----_=_NextPart_001_01C53076.FAC732C0"
Sender: owner-sc22docs@open-std.org
Precedence: bulk

This message is in MIME format. Since your mail reader does not understand
this format, some or all of this message may not be legible.

------_=_NextPart_001_01C53076.FAC732C0
Content-Type: text/plain

Please disregard earlier email.  The document location was not included.  My
apologies

 

ISO/IEC JTC 1/SC22

Programming languages, their environments and system software interfaces

Secretariat:  U.S.A.  (ANSI)

 

ISO/IEC JTC 1/SC22 N3880

 

TITLE:

Summary of Voting on SC 22 N 3838, Registration for WDTR 24731-Information
technology-Programming languages, their environments and system software
interfaces-Specification for Secure C Library Functions

 

DATE ASSIGNED: 

2005-03-24

 

SOURCE: 

SC 22 Secretariat 

 

BACKWARD POINTER: 

N/A 

 

DOCUMENT TYPE: 

Summary of Voting 

 

PROJECT NUMBER: 

22.24731

 

STATUS: 

The results of this ballot are forwarded to SC 22/WG 14 for review,
production of a disposition of comments report, and preparation of the DTR
text.  The comments of the United Kingdom can be found at:
http://www.open-std.org/jtc1/sc22/def/n3880.pdf
<http://www.open-std.org/jtc1/sc22/def/n3880.pdf> 

 

ACTION IDENTIFIER: 

ACT 

 

DUE DATE: 

N/A 

 

DISTRIBUTION: 

Text 

 

CROSS REFERENCE: 

SC 22 N3838

 

DISTRIBUTION FORM: 

Def 

 

Sally Seitz

ANSI

25 West 43rd Street

New York, NY  10036

Telephone:  (212) 642-4918 

Fax:             (212) 840-2298 

Email:  sseitz@ansi.org 

 

_____end of cover page, beginning of PDTR registration summary______________

 

 

SUMMARY OF VOTING ON

Letter Ballot Reference No:  SC22 N3838

Circulated by:                JTC 1/SC22

Circulation Date:            2004-12-14

Closing Date:                 2005-03-14

SUBJECT:  Summary of Voting on SC 22 N 3838, Registration for WDTR
24731-Information technology-Programming languages, their environments and
system software interfaces-Specification for Secure C Library Functions

 

 

The following responses have been received on the subject of registration: 

"P" Members supporting registration without comments 

6(Czech Republic, Denmark, Finland, France, Italy, Republic of Korea)

P" Members supporting registration with comments             

3 (Germany, Netherlands, United States)

"P" Members not supporting registration

2(Canada, Japan)

"P" Members abstaining                   

2 (Switzerland, United Kingdom)

"P" Members not voting                   

7 (Belgium, China, Egypt, DPR of Korea, Romania, Russian Federation,
Slovenia, Ukraine)

 

National Body Comments

 

Canada

Comments on WDTR 24731 "Specification of Secure C Library Functions"

 

Canada does not agree with the use of the word "secure" in the title

of this document. This word carries considerable baggage for the

safety and security communities and implies functionality that is 

not provided. We would suggest alternative terminology, such as 

"bounded".

 

Some of the functions provided exist or conflict with functions

provided in other domains, such as POSIX or SUS. If the behaviour is

different than these specifications, then programs that attempt to use

them may be incorrect. Even if the behaviour is the same, then the

pre-existing specification must be respected.  Examples of such

functions are:

    strtok_r, strcpy_s and strcat_s.

 

In particular, strcpy_s provides identical functionality to strlcpy

which has been in use for some time.

 

Special mention is required of strerror_s. A mechanism is required to 

predetermine the size of the string to be returned so that the buffer

can be preallocated.

 

Special mention is also made or "rand". Saying that cryptography

methods must be used is insufficient. The function specification

ignores several issues, such as blocking, enthropy and seeding of such

functions. 

 

Special mention is made of strtok_r. This function should clearly

state that any string to be read by such a function may already be

effectively unbounded, and while it may be bounded by the buffer in

strtok_s, the effects of inputting the original unbounded string may

already have occured.

 

Germany

German Comment on document ISO/IEC JTC 1/SC 22 N3838

ISO/IEC WDTR 24731

Information technology-Programming languages, their environments and system
software interfaces-Specification for Secure C Library Functions:

 

 

1) sprintf_s and other read functions with the exception of strnlen need to
be addressed somehow.

 

2) it is worth to consider, whether strncpy_s and strncat_s variants  with
one parameter for length should be added.  Zero-termination is in that case
assumed.  

 

3) it is worth to consider offering a feature, simply aborting the program
upon buffer length overrun.  Such an option could be activated conditionally
via #pragma or #define. 

 

(End of comment)

 

Japan

As already described in our comment on NWIP ballot, we think it is extremely
hard to make the C programming language secure by just adding a set of new
functions leaving the existing insecure ones untouched. To make the C
programming language truly secure it is necessary to abolish the existing
insecure features like pointer operations and some dangerous functions. We
strongly request WG14 to produce the rationale or annex which clearly states
the following points:

1) Clearly state the policy and criteria for introduction of new functions
For example, we think that gets_s() is redundant and should be eliminated
from the TR because the functionality of gets_s() can be covered by existing
fgets() function. So, please make clear the reason of adding gets_s()
besides fgets().

2) Clearly and concretely state what kinds of security hole exist in the
current ISO C standard(syntax and libraries).

3) Clearly explain what kind of vulnerability is fixed for each proposed
function one-by-one.

 For example, we cannot understand what is improved in wctomb_s() from the
original wctomb(). Please provide the explanation of the advantage of
wctomb_s() over wctomb().

4) Give the guide for secure programming by using the proposed functions.

 

Netherlands

The Netherlands votes 'yes' on the Registration of WDTR 24731 with the
following comments:

 

1 - Section 3.1, the definition of the term 'diagnosed undefined behavior'
is unclear; change to behavior, that is invoked by the use of a nonportable
or erroneous program construct or of erroneous data,and that an
implementation shall diagnose by, in effect, calling an
implementation-defined function.

 

2 - Section 5.3, para 2; replace 2nd sentence by If a function that has
parameters of type rsize_t is called with values for those parameters that
are greater than RSIZE_MAX the behaviour shall be diagnosed undefined
behaviour.

 

3 - Section 5.3, para 4, last sentence: replace 'diagnosable' by
'diagnosed'.

 

4 - Section 5.5.2.1, para 5, first sentence: replace 'diagnosable' by
'diagnosed'.

 

United States

Set 1:

 

1.  WG14/N1089 is a good start on a rationale.  There should be one, either
included in the TR or in a separate document.

 

2.  The rationale should discuss why there are not _s versions of the
following functions, and the general philosophy involving minimizing
performance impact.

 

strchr, strcspn, strpbrk, strrchr, strspn, strstr

 

3.  The following functions are missing the specification that they open a
file for exclusive access.

 

tmpfile_s, fopen_s, freopen_s

 

4.  From the editor's report, it appears that sprintf_s and snprintf_s will
do essentially if not exactly the same thing.  Maybe only one of them is
needed.

 

5.  It would be best for the committee to spend some more time discussing
the notion of diagnosed undefined behavior.  This is a new invention for the
C standard.

 

##########

 

Set 2:

 

Page numbers refer to within the document, not the PDF page number.

 

Page v:  End of paragraph 6: Extra(?) "*".

 

Page 1: Should ISO/IEC 9899:1999/Cor 2:2004 be added to list of references?

 

Page 7+: Consider changing "bug" to "programming error".

 

Page 7: Footnote 9: Consider changing "constant expression" to "integer
constant expression".

 

Page 13: Paragraph 7 / Example 2: The end of that example says: "No
assignment to /s/ occurs.".  Where is that requirement in normative text?
Also, this seems like a large burden to place on the implementation
(requires a temporary buffer to hold the input string until that string's
length is known).  Better would be s[0] is set to a null character, and the
other elements of /s/ are unspecified.

 

Page 14/15: Footnote 13: Is on wrong page and overlays the section number.
Can the same footnote be referenced by three different sections (which are
on different pages)?

 

Page 16: 5.4.4.1p4: Consider adding: "and the other elements of /s/ are
unspecified".

 

Page 17: 5.5.1.1p2:  Consider adding: "maxsize == 0" to the list of
diagnosed undefined behavior.

 

Page 20: 5.5.2.2:  Why does qsort_s return void instead of errno_t?

How does it indicate failure?

 

Page 24: 5.6.1.2: End of paragraph 3: Extra(?) "*".

 

Page 28: 5.6.2.2p4: The 'm' in 'm+n' should be italic.

 

Page 31: 5.6.4.1p5: Why are there three '.' characters used to overwrite the
end of the string (Answer could go in a footnote)?

Would it be useful to show some examples both with and without the
overwrite?

 

Page 33: 5.7.2.1p2: Is the broken down time before or after the 1900 has
been added to it?  Why 0 rather than -999 (which fits in a 4 digit field)?

 

Page 37: 5.8.1.1: What happens if the string is longer than the space to
store it?  Is the first character set to null character?

 

Page 38: Footnote 28 extends too far down the page.

 

Pages 39-40:  Footnote 29 is referenced from two pages.

 

Page 46: 5.8.2.2.2p4: The 'm' in '-m+n' should be italic.

 

##########

 

Set 3:

 

1. The TR leaves it up to the implementation to determine the value

    of RSIZE_MAX.  The most useful value will often depend on both the

    implementation and the application, so many/most implementations

    will provide a way for an application to specify the value (at

    run-time).  On the other hand, some implementations may choose to

    make the value an unalterable translation-time constant.  We would

    like to see a specified means to set the value of RSIZE_MAX, with a

    status return indicating whether or not the value was successfully

    set.  One thought might be to do this through a function-like macro

    in stdint.h, e.g. "errno_t SET_RSIZE_MAX(size_t)".  An

    implementation that did not support an application's setting the

    value at run-time would not define the macro.  Otherwise, an

    invocation of the macro would return zero if the value was

    successfully set, or a non-zero value to indicate failure (e.g. an

    inappropriate value was specified or the application was built in a

    way to disallow run-time modification of the value).

 

2. The definition of diagnosed undefined behavior as calling an

    implementation defined function might benefit from examples of the

    name ans signature of such a function - not as a requirement, simply

    to encourage more than one implementation to make the same choices.

 

3. The memcpy_s function does not list overlap between input and output

    among its diagnosed undefined behaviors.  Is that solely because the

    language does not define pointer comparison between distinct

    objects, or is it considered a practical difficulty for real

    implementations?  In fact, the wording of "take on unspecified

    values", seems to preclude overlap from being diagnosed.  That's

    puzzling, as diagnosing memcpy calls that ought to be memmove calls

    is certainly a useful capability.

 

##########

 

Set 4:

 

1.  In some cases there seems to be change for the sake of it from what

     is either already standard or defacto standard.

 

     The common change seems to be return values that were char* with

     error being NULL being changed to this new errno_t type which is

     really just an int.

 

     strcpy_s        strlcpy

     strcat_s        strlcat

     asctime_s       asctime_r

     gtime_s         gtime_r

     localtime_s     localtime_r

 

2.  For many of the functions defined in this TR, it appears that very

     similar or identical alternatives are already available. In those

     cases, I'm not sure it makes sense to ignore prior art by defining

     new replacements. Some examples:

 

     A. tmpfile_s() is identical to the existing tmpfile() except for

        the style of returning the resulting FILE *.

 

     B. tmpnam_s() is almost the same as the existing tmpnam_r() except

        it includes an argument for the size of the destination buffer.

        More important, however, is the fact that it is still unsafe due

        to race conditions with others who might create the same files.

        Safe usage requires the use of tmpfile() or mkstemp() instead.

 

     C. strcpy_s() is equivalent to strlcpy(). It seems like providing

        yet another safe version of strcpy() would be confusing at

        best.

 

     D. fscanf_s() and related variants are just like the current

        routines except they require a size parameter for buffers that

        hold the result of %c, %s, and %[ formats. That's very useful,

        but I believe this feature could be added to the existing

        scanf() family in a compatible way. What's needed is a format

        modifier to indicate that the size is specified by a parameter,

        like the * in printf() format strings. Since scanf() already

        uses * for assignment suppression, a different character would

        be needed, but one could choose any unused format character and

        remain compatible with the existing scanf() functions.

 

3.  A comprehensive Rationale for the TR should be provided.

 

4.  The issues (including missing features) raised in the Secure TR

     Editor's Report, SC22 WG14 N1089, should be addressed.  N1089 is

     available at

      <http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1089.pdf>
http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1089.pdf

 

5.  The committee should consider adding the following functions

     described in N1089:

 

     fprintf_s, printf_s, snprintf_s, sprintf, vfprintf_s, vprintf_s,

     vsnprintf_s, vsprintf_s, fwprintf_s, swprintf_s, vfwprintf_s,

     vwprintf_s, wprintf_s, vswprintf_s, mbstowcs_s, wcstombs_s,

     mbsrtowcs_s, wcsrtombs_s, wcrtomb_s

 

6.  The committee should consider adding support for optional

     truncation during string copy.  See  _TRUNCATE  in N1089.

 

7.  A footnote should be added explaining that the tmpfile_s, fopen_s,

     and freopen_s functions should open their files in a "safe" mode

     giving exclusive (non-shared) access.

 

8.  The committee should carefully consider the issues around

     "diagnosed undefined behavior," including:

   A.  the name of the term

   B.  the model of behavior

   C.  where the description of diagnosed undefined behavior should

       appear in a subclause specifying a function (in the

       "Description" section, in the "Returns" section, or in a new

       section labeled "Diagnosed Undefined Behavior").

 

 

 

 

 

 

 

Sally Seitz

Program Manager

ANSI

25 West 43rd Street

New York, NY 10036

Phone: (212) 642-4918

Fax: (212) 840-2298

 


------_=_NextPart_001_01C53076.FAC732C0
Content-Type: text/html
Content-Transfer-Encoding: quoted-printable

<html xmlns:v=3D"urn:schemas-microsoft-com:vml" =
xmlns:o=3D"urn:schemas-microsoft-com:office:office" =
xmlns:w=3D"urn:schemas-microsoft-com:office:word" =
xmlns:st1=3D"urn:schemas-microsoft-com:office:smarttags" =
xmlns=3D"http://www.w3.org/TR/REC-html40">

<head>
<META HTTP-EQUIV=3D"Content-Type" CONTENT=3D"text/html; =
charset=3Dus-ascii">


<meta name=3DGenerator content=3D"Microsoft Word 11 (filtered medium)">
<o:SmartTagType =
namespaceuri=3D"urn:schemas-microsoft-com:office:smarttags"
 name=3D"PlaceType"/>
<o:SmartTagType =
namespaceuri=3D"urn:schemas-microsoft-com:office:smarttags"
 name=3D"PlaceName"/>
<o:SmartTagType =
namespaceuri=3D"urn:schemas-microsoft-com:office:smarttags"
 name=3D"State"/>
<o:SmartTagType =
namespaceuri=3D"urn:schemas-microsoft-com:office:smarttags"
 name=3D"Street"/>
<o:SmartTagType =
namespaceuri=3D"urn:schemas-microsoft-com:office:smarttags"
 name=3D"country-region"/>
<o:SmartTagType =
namespaceuri=3D"urn:schemas-microsoft-com:office:smarttags"
 name=3D"PostalCode"
 downloadurl=3D"http://www.5iamas-microsoft-com:office:smarttags"/>
<o:SmartTagType =
namespaceuri=3D"urn:schemas-microsoft-com:office:smarttags"
 name=3D"address" =
downloadurl=3D"http://www.5iamas-microsoft-com:office:smarttags"/>
<o:SmartTagType =
namespaceuri=3D"urn:schemas-microsoft-com:office:smarttags"
 name=3D"City" =
downloadurl=3D"http://www.5iamas-microsoft-com:office:smarttags"/>
<o:SmartTagType =
namespaceuri=3D"urn:schemas-microsoft-com:office:smarttags"
 name=3D"place" downloadurl=3D"http://www.5iantlavalamp.com/"/>
<o:SmartTagType =
namespaceuri=3D"urn:schemas-microsoft-com:office:smarttags"
 name=3D"PersonName" downloadurl=3D"http://www.microsoft.com"/>
<!--[if !mso]>
<style>
st1\:*{behavior:url(#default#ieooui) }
</style>
<![endif]-->
<style>
<!--
 /* Font Definitions */
 @font-face
	{font-family:Batang;
	panose-1:2 3 6 0 0 1 1 1 1 1;}
@font-face
	{font-family:"\@Batang";
	panose-1:0 0 0 0 0 0 0 0 0 0;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
	{margin:0in;
	margin-bottom:.0001pt;
	font-size:12.0pt;
	font-family:"Times New Roman";}
a:link, span.MsoHyperlink
	{color:blue;
	text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
	{color:purple;
	text-decoration:underline;}
p
	{mso-margin-top-alt:auto;
	margin-right:0in;
	mso-margin-bottom-alt:auto;
	margin-left:0in;
	font-size:12.0pt;
	font-family:"Times New Roman";}
span.EmailStyle18
	{mso-style-type:personal;
	font-family:Arial;
	color:windowtext;}
span.EmailStyle19
	{mso-style-type:personal;
	font-family:Arial;
	color:navy;}
span.EmailStyle22
	{mso-style-type:personal-reply;
	font-family:Arial;
	color:navy;}
@page Section1
	{size:8.5in 11.0in;
	margin:1.0in 1.25in 1.0in 1.25in;}
div.Section1
	{page:Section1;}
-->
</style>

</head>

<body lang=3DEN-US link=3Dblue vlink=3Dpurple>

<div class=3DSection1>

<p class=3DMsoNormal><font size=3D3 face=3D"Times New Roman"><span =
style=3D'font-size:
12.0pt'>Please disregard earlier email.&nbsp; The document location was =
not
included.&nbsp; My apologies</span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>ISO/IEC JTC =
1/SC22<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>Programming languages, their environments =
and system
software interfaces<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>Secretariat:&nbsp; <st1:place =
w:st=3D"on"><st1:country-region
 w:st=3D"on">U.S.A.</st1:country-region></st1:place>&nbsp; =
(ANSI)<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>ISO/IEC JTC 1/SC22 =
N3880<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>TITLE:<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>Summary of Voting on SC 22 N 3838, =
Registration for WDTR
24731-Information technology-Programming languages, their environments =
and
system software interfaces-Specification for Secure C Library =
Functions<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>DATE ASSIGNED: <o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>2005-03-<font color=3Dnavy><span =
style=3D'color:navy'>24</span></font><o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>SOURCE: <o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>SC 22 Secretariat =
<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>BACKWARD POINTER: =
<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>N/A <o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>DOCUMENT TYPE: <o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>Summary of Voting =
<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>PROJECT NUMBER: =
<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>22.24731<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>STATUS: <o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>The results of this ballot are forwarded to =
SC 22/WG
14 for review, production of a disposition of comments report, and =
preparation
of the DTR text.&nbsp; The comments of the <st1:place =
w:st=3D"on"><st1:country-region
 w:st=3D"on">United Kingdom</st1:country-region></st1:place> can be =
found at: <a
href=3D"http://www.open-std.org/jtc1/sc22/def/n3880.pdf">http://www.open=
-std.org/jtc1/sc22/def/n3880.pdf</a><o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>ACTION IDENTIFIER: =
<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>ACT <o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>DUE DATE: <o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>N/A <o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>DISTRIBUTION: <o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>Text <o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>CROSS REFERENCE: =
<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>SC 22 N3838<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>DISTRIBUTION FORM: =
<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>Def <o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><st1:PersonName w:st=3D"on"><font size=3D2 =
face=3D"Courier New"><span
 style=3D'font-size:10.0pt;font-family:"Courier New"'>Sally =
Seitz</span></font></st1:PersonName><font
size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;font-family:"Courier =
New"'><o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>ANSI<o:p></o:p></span></font></p>

<p class=3DMsoNormal><st1:Street w:st=3D"on"><st1:address
 style=3D"BACKGROUND-POSITION: left bottom; BACKGROUND-IMAGE: =
url(res://ietag.dll/#34/#1001); BACKGROUND-REPEAT: repeat-x"
 tabIndex=3D"0" w:st=3D"on"><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:
  10.0pt;font-family:"Courier New"'>25 West 43rd =
Street</span></font></st1:address></st1:Street><font
size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;font-family:"Courier =
New"'><o:p></o:p></span></font></p>

<p class=3DMsoNormal><st1:place w:st=3D"on"><st1:City w:st=3D"on"><font =
size=3D2
  face=3D"Courier New"><span =
style=3D'font-size:10.0pt;font-family:"Courier New"'>New
  York</span></font></st1:City><font size=3D2 face=3D"Courier =
New"><span
 style=3D'font-size:10.0pt;font-family:"Courier New"'>, <st1:State =
w:st=3D"on">NY</st1:State>&nbsp;
 <st1:PostalCode =
w:st=3D"on">10036</st1:PostalCode></span></font></st1:place><font
size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;font-family:"Courier =
New"'><o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>Telephone:&nbsp; (212) 642-4918 =
<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier =
New"'>Fax:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;
(212) 840-2298 <o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>Email:&nbsp; sseitz@ansi.org =
<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>_____end of cover page, beginning of PDTR
registration summary______________<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>SUMMARY OF VOTING =
ON<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>Letter Ballot Reference No:&nbsp; SC22 =
N3838<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>Circulated by:&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp;JTC
1/SC22<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>Circulation
Date:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
2004-12-14<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>Closing =
Date:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
2005-03-14<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>SUBJECT:&nbsp; Summary of Voting on SC 22 N =
3838,
Registration for WDTR 24731-Information technology-Programming =
languages, their
environments and system software interfaces-Specification for Secure C =
Library
Functions<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>The following responses have been received =
on the
subject of registration: <o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&quot;P&quot; Members supporting =
registration
without comments <o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>6(<st1:PlaceName =
w:st=3D"on">Czech</st1:PlaceName> <st1:PlaceType
w:st=3D"on">Republic</st1:PlaceType>, <st1:country-region =
w:st=3D"on">Denmark</st1:country-region>,
<st1:country-region w:st=3D"on">Finland</st1:country-region>, =
<st1:country-region
w:st=3D"on">France</st1:country-region>, <st1:country-region =
w:st=3D"on">Italy</st1:country-region>,
<st1:place w:st=3D"on"><st1:PlaceType =
w:st=3D"on">Republic</st1:PlaceType> of <st1:PlaceName
 =
w:st=3D"on">Korea</st1:PlaceName></st1:place>)<o:p></o:p></span></font><=
/p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>P&quot; Members supporting registration with
comments&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;
<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>3 (<st1:country-region =
w:st=3D"on">Germany</st1:country-region>,
<st1:country-region w:st=3D"on">Netherlands</st1:country-region>, =
<st1:place
w:st=3D"on"><st1:country-region w:st=3D"on">United =
States</st1:country-region></st1:place>)<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&quot;P&quot; Members not supporting =
registration<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>2(<st1:country-region =
w:st=3D"on">Canada</st1:country-region>,
<st1:place w:st=3D"on"><st1:country-region =
w:st=3D"on">Japan</st1:country-region></st1:place>)<o:p></o:p></span></f=
ont></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&quot;P&quot; Members
abstaining&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>2 (<st1:country-region =
w:st=3D"on">Switzerland</st1:country-region>,
<st1:place w:st=3D"on"><st1:country-region w:st=3D"on">United =
Kingdom</st1:country-region></st1:place>)<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&quot;P&quot; Members not
voting&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>7 (<st1:country-region =
w:st=3D"on">Belgium</st1:country-region>,
<st1:country-region w:st=3D"on">China</st1:country-region>, =
<st1:country-region
w:st=3D"on">Egypt</st1:country-region>, DPR of <st1:country-region =
w:st=3D"on">Korea</st1:country-region>,
<st1:country-region w:st=3D"on">Romania</st1:country-region>, =
<st1:country-region
w:st=3D"on">Russian Federation</st1:country-region>, =
<st1:country-region w:st=3D"on">Slovenia</st1:country-region>,
<st1:place w:st=3D"on"><st1:country-region =
w:st=3D"on">Ukraine</st1:country-region></st1:place>)<o:p></o:p></span><=
/font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>National Body =
Comments<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><st1:place w:st=3D"on"><st1:country-region =
w:st=3D"on"><b><font
  size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;font-family:"Courier New";
  =
font-weight:bold'>Canada</span></font></b></st1:country-region></st1:pla=
ce><b><font
size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;font-family:"Courier New";
font-weight:bold'><o:p></o:p></span></font></b></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>Comments on WDTR 24731 &quot;Specification =
of Secure
C Library Functions&quot;<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><st1:place w:st=3D"on"><st1:country-region =
w:st=3D"on"><font
  size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;font-family:"Courier =
New"'>Canada</span></font></st1:country-region></st1:place><font
size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;font-family:"Courier New"'>
does not agree with the use of the word &quot;secure&quot; in the =
title<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>of this document. This word carries =
considerable
baggage for the<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>safety and security communities and implies
functionality that is <o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>not provided. We would suggest alternative
terminology, such as <o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier =
New"'>&quot;bounded&quot;.<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>Some of the functions provided exist or =
conflict
with functions<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>provided in other domains, such as POSIX or =
SUS. If
the behaviour is<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>different than these specifications, then =
programs
that attempt to use<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>them may be incorrect. Even if the behaviour =
is the
same, then the<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>pre-existing specification must be =
respected.&nbsp;
Examples of such<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>functions are:<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp;&nbsp; strtok_r, strcpy_s and =
strcat_s.<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>In particular, strcpy_s provides identical
functionality to strlcpy<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>which has been in use for some =
time.<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>Special mention is required of strerror_s. A
mechanism is required to <o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>predetermine the size of the string to be =
returned
so that the buffer<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>can be =
preallocated.<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>Special mention is also made or =
&quot;rand&quot;.
Saying that cryptography<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>methods must be used is insufficient. The =
function
specification<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>ignores several issues, such as blocking, =
enthropy
and seeding of such<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>functions. <o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>Special mention is made of strtok_r. This =
function
should clearly<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>state that any string to be read by such a =
function
may already be<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>effectively unbounded, and while it may be =
bounded
by the buffer in<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>strtok_s, the effects of inputting the =
original
unbounded string may<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>already have =
occured.<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><st1:place w:st=3D"on"><st1:country-region =
w:st=3D"on"><b><font
  size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;font-family:"Courier New";
  =
font-weight:bold'>Germany</span></font></b></st1:country-region></st1:pl=
ace><b><font
size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;font-family:"Courier New";
font-weight:bold'><o:p></o:p></span></font></b></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>German Comment on document ISO/IEC JTC 1/SC =
22 N3838<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>ISO/IEC WDTR =
24731<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>Information technology-Programming =
languages, their
environments and system software interfaces-Specification for Secure C =
Library
Functions:<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>1) sprintf_s and other read functions with =
the
exception of strnlen need to be addressed =
somehow.<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>2) it is worth to consider, whether =
strncpy_s and
strncat_s variants&nbsp; with one parameter for length should be =
added.&nbsp; Zero-termination
is in that case assumed.&nbsp; <o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>3) it is worth to consider offering a =
feature,
simply aborting the program upon buffer length overrun.&nbsp; Such an =
option
could be activated conditionally via #pragma or #define. =
<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>(End of =
comment)<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><st1:place w:st=3D"on"><st1:country-region =
w:st=3D"on"><b><font
  size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;font-family:"Courier New";
  =
font-weight:bold'>Japan</span></font></b></st1:country-region></st1:plac=
e><b><font
size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;font-family:"Courier New";
font-weight:bold'><o:p></o:p></span></font></b></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>As already described in our comment on NWIP =
ballot,
we think it is extremely hard to make the C programming language secure =
by just
adding a set of new functions leaving the existing insecure ones =
untouched. To
make the C programming language truly secure it is necessary to abolish =
the
existing insecure features like pointer operations and some dangerous
functions. We strongly request WG14 to produce the rationale or annex =
which
clearly states the following points:<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>1) Clearly state the policy and criteria for =
introduction
of new functions&nbsp; For example, we think that gets_s() is redundant =
and
should be eliminated from the TR because the functionality of gets_s() =
can be
covered by existing fgets() function. So, please make clear the reason =
of
adding gets_s() besides fgets().<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>2) Clearly and concretely state what kinds =
of
security hole exist in the current ISO C standard(syntax and =
libraries).<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>3) Clearly explain what kind of =
vulnerability is
fixed for each proposed function =
one-by-one.<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;For example, we cannot understand what =
is
improved in wctomb_s() from the original wctomb(). Please provide the
explanation of the advantage of wctomb_s() over =
wctomb().<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>4) Give the guide for secure programming by =
using
the proposed functions.<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><st1:place w:st=3D"on"><st1:country-region =
w:st=3D"on"><b><font
  size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;font-family:"Courier New";
  =
font-weight:bold'>Netherlands</span></font></b></st1:country-region></st=
1:place><b><font
size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;font-family:"Courier New";
font-weight:bold'><o:p></o:p></span></font></b></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>The <st1:place =
w:st=3D"on"><st1:country-region =
w:st=3D"on">Netherlands</st1:country-region></st1:place>
votes 'yes' on the Registration of WDTR 24731 with the following =
comments:<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>1 - Section 3.1, the definition of the term
'diagnosed undefined behavior' is unclear; change to behavior, that is =
invoked
by the use of a nonportable or erroneous program construct or of =
erroneous data,and
that an implementation shall diagnose by, in effect, calling an
implementation-defined function.<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>2 - Section 5.3, para 2; replace 2nd =
sentence by If
a function that has parameters of type rsize_t is called with values =
for those
parameters that are greater than RSIZE_MAX the behaviour shall be =
diagnosed
undefined behaviour.<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>3 - Section 5.3, para 4, last sentence: =
replace
'diagnosable' by 'diagnosed'.<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>4 - Section 5.5.2.1, para 5, first sentence: =
replace
'diagnosable' by 'diagnosed'.<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><st1:place w:st=3D"on"><st1:country-region =
w:st=3D"on"><font
  size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;font-family:"Courier New"'>United
  States</span></font></st1:country-region></st1:place><font size=3D2
face=3D"Courier New"><span =
style=3D'font-size:10.0pt;font-family:"Courier =
New"'><o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>Set 1:<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>1.&nbsp; WG14/N1089 is a good start on a
rationale.&nbsp; There should be one, either included in the TR or in a
separate document.<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>2.&nbsp; The rationale should discuss why =
there are
not _s versions of the following functions, and the general philosophy =
involving
minimizing performance impact.<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>strchr, strcspn, strpbrk, strrchr, strspn, =
strstr<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>3.&nbsp; The following functions are missing =
the
specification that they open a file for exclusive =
access.<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>tmpfile_s, fopen_s, =
freopen_s<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>4.&nbsp; From the editor's report, it =
appears that
sprintf_s and snprintf_s will do essentially if not exactly the same
thing.&nbsp; Maybe only one of them is =
needed.<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>5.&nbsp; It would be best for the committee =
to spend
some more time discussing the notion of diagnosed undefined =
behavior.&nbsp;
This is a new invention for the C =
standard.<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>##########<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>Set 2:<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>Page numbers refer to within the document, =
not the
PDF page number.<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>Page v:&nbsp; End of paragraph 6: Extra(?)
&quot;*&quot;.<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>Page 1: Should ISO/IEC 9899:1999/Cor 2:2004 =
be added
to list of references?<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>Page 7+: Consider changing &quot;bug&quot; =
to
&quot;programming error&quot;.<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>Page 7: Footnote 9: Consider changing =
&quot;constant
expression&quot; to &quot;integer constant expression&quot;.<o:p></o:p><=
/span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>Page 13: Paragraph 7 / Example 2: The end of =
that
example says: &quot;No assignment to /s/ occurs.&quot;.&nbsp; Where is =
that requirement
in normative text?&nbsp; Also, this seems like a large burden to place =
on the
implementation (requires a temporary buffer to hold the input string =
until that
string's length is known).&nbsp; Better would be s[0] is set to a null
character, and the other elements of /s/ are =
unspecified.<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>Page 14/15: Footnote 13: Is on wrong page =
and
overlays the section number.&nbsp; Can the same footnote be referenced =
by three
different sections (which are on different =
pages)?<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>Page 16: 5.4.4.1p4: Consider adding: =
&quot;and the
other elements of /s/ are =
unspecified&quot;.<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>Page 17: 5.5.1.1p2:&nbsp; Consider adding:
&quot;maxsize =3D=3D 0&quot; to the list of diagnosed undefined =
behavior.<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>Page 20: 5.5.2.2:&nbsp; Why does qsort_s =
return void
instead of errno_t?<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>How does it indicate =
failure?<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>Page 24: 5.6.1.2: End of paragraph 3: =
Extra(?)
&quot;*&quot;.<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>Page 28: 5.6.2.2p4: The 'm' in 'm+n' should =
be
italic.<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>Page 31: 5.6.4.1p5: Why are there three '.'
characters used to overwrite the end of the string (Answer could go in =
a
footnote)?<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>Would it be useful to show some examples =
both with
and without the overwrite?<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>Page 33: 5.7.2.1p2: Is the broken down time =
before
or after the 1900 has been added to it?&nbsp; Why 0 rather than -999 =
(which
fits in a 4 digit field)?<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>Page 37: 5.8.1.1: What happens if the string =
is
longer than the space to store it?&nbsp; Is the first character set to =
null
character?<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>Page 38: Footnote 28 extends too far down =
the page.<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>Pages 39-40:&nbsp; Footnote 29 is referenced =
from
two pages.<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>Page 46: 5.8.2.2.2p4: The 'm' in '-m+n' =
should be
italic.<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>##########<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>Set 3:<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>1. The TR leaves it up to the implementation =
to
determine the value<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp;&nbsp; of RSIZE_MAX.&nbsp; The =
most
useful value will often depend on both the<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp;&nbsp; implementation and the
application, so many/most implementations<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp;&nbsp; will provide a way for an
application to specify the value (at<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp;&nbsp; run-time).&nbsp; On the =
other
hand, some implementations may choose to<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp;&nbsp; make the value an =
unalterable
translation-time constant.&nbsp; We would<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp;&nbsp; like to see a specified =
means to
set the value of RSIZE_MAX, with a<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp;&nbsp; status return indicating =
whether
or not the value was successfully<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp;&nbsp; set.&nbsp; One thought =
might be
to do this through a function-like macro<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp;&nbsp; in stdint.h, e.g. =
&quot;errno_t
SET_RSIZE_MAX(size_t)&quot;.&nbsp; An<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp;&nbsp; implementation that did =
not
support an application's setting the<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp;&nbsp; value at run-time would =
not
define the macro.&nbsp; Otherwise, an<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp;&nbsp; invocation of the macro =
would
return zero if the value was<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp;&nbsp; successfully set, or a =
non-zero
value to indicate failure (e.g. an<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp;&nbsp; inappropriate value was =
specified
or the application was built in a<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp;&nbsp; way to disallow run-time
modification of the value).<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>2. The definition of diagnosed undefined =
behavior as
calling an<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp;&nbsp; implementation defined =
function
might benefit from examples of the<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp;&nbsp; name ans signature of =
such a
function - not as a requirement, simply<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp;&nbsp; to encourage more than =
one
implementation to make the same choices.<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>3. The memcpy_s function does not list =
overlap
between input and output<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp;&nbsp; among its diagnosed =
undefined
behaviors.&nbsp; Is that solely because =
the<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp;&nbsp; language does not define =
pointer
comparison between distinct<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp;&nbsp; objects, or is it =
considered a
practical difficulty for real<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp;&nbsp; implementations?&nbsp; In =
fact,
the wording of &quot;take on unspecified<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp;&nbsp; values&quot;, seems to =
preclude
overlap from being diagnosed.&nbsp; That's<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp;&nbsp; puzzling, as diagnosing =
memcpy
calls that ought to be memmove calls<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp;&nbsp; is certainly a useful =
capability.<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>##########<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>Set 4:<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>1.&nbsp; In some cases there seems to be =
change for
the sake of it from what<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp; is either already =
standard
or defacto standard.<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp; The common change =
seems to
be return values that were char* with<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp; error being NULL =
being
changed to this new errno_t type which is<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp; really just an =
int.<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;
strcpy_s&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =
strlcpy<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;
strcat_s&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =
strlcat<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;
asctime_s&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =
asctime_r<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;
gtime_s&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; gtime_r<o:p></o:=
p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;
localtime_s&nbsp;&nbsp;&nbsp;&nbsp; =
localtime_r<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>2.&nbsp; For many of the functions defined =
in this
TR, it appears that very<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp; similar or =
identical
alternatives are already available. In =
those<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp; cases, I'm not sure =
it
makes sense to ignore prior art by =
defining<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp; new replacements. =
Some
examples:<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp; A. tmpfile_s() is =
identical
to the existing tmpfile() except for<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =
the style
of returning the resulting FILE *.<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp; B. tmpnam_s() is =
almost the
same as the existing tmpnam_r() except<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =
it
includes an argument for the size of the destination =
buffer.<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =
More
important, however, is the fact that it is still unsafe =
due<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =
to race
conditions with others who might create the same =
files.<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =
Safe
usage requires the use of tmpfile() or mkstemp() =
instead.<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp; C. strcpy_s() is =
equivalent
to strlcpy(). It seems like providing<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =
yet
another safe version of strcpy() would be confusing =
at<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =
best.<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp; D. fscanf_s() and =
related
variants are just like the current<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =
routines
except they require a size parameter for buffers =
that<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp; =
&nbsp;&nbsp;&nbsp;hold the
result of %c, %s, and %[ formats. That's very =
useful,<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =
but I
believe this feature could be added to the =
existing<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =
scanf()
family in a compatible way. What's needed is a =
format<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =
modifier
to indicate that the size is specified by a =
parameter,<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =
like the
* in printf() format strings. Since scanf() =
already<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =
uses *
for assignment suppression, a different character =
would<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =
be
needed, but one could choose any unused format character =
and<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =
remain
compatible with the existing scanf() =
functions.<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>3.&nbsp; A comprehensive Rationale for the =
TR should
be provided.<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>4.&nbsp; The issues (including missing =
features)
raised in the Secure TR<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp; Editor's Report, =
SC22 WG14
N1089, should be addressed.&nbsp; N1089 is<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp; available =
at<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp; <a
href=3D"http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1089.pdf"><font=
 size=3D3
color=3Dblack><span style=3D'font-size:12.0pt;color:windowtext;text-deco=
ration:
none'>http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1089.pdf</span></=
font></a><o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>5.&nbsp; The committee should consider =
adding the
following functions<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp; described in =
N1089:<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp; fprintf_s, =
printf_s,
snprintf_s, sprintf, vfprintf_s, =
vprintf_s,<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp; vsnprintf_s, =
vsprintf_s,
fwprintf_s, swprintf_s, vfwprintf_s,<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp; vwprintf_s, =
wprintf_s, vswprintf_s,
mbstowcs_s, wcstombs_s,<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp; mbsrtowcs_s, =
wcsrtombs_s,
wcrtomb_s<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>6.&nbsp; The committee should consider =
adding
support for optional<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp; truncation during =
string
copy.&nbsp; See&nbsp; _TRUNCATE&nbsp; in =
N1089.<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>7.&nbsp; A footnote should be added =
explaining that
the tmpfile_s, fopen_s,<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp; and freopen_s =
functions
should open their files in a &quot;safe&quot; =
mode<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp; giving exclusive
(non-shared) access.<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>8.&nbsp; The committee should carefully =
consider the
issues around<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp; &quot;diagnosed =
undefined
behavior,&quot; including:<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp; A.&nbsp; the name of the =
term<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp; B.&nbsp; the model of =
behavior<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp; C.&nbsp; where the description =
of
diagnosed undefined behavior should<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; appear =
in a
subclause specifying a function (in the<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&quot;Description&quot; section, in the &quot;Returns&quot; section, or =
in a
new<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; section =
labeled
&quot;Diagnosed Undefined Behavior&quot;).<o:p></o:p></span></font></p>

<p><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;font-family:
"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;font-family:
"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><st1:PersonName w:st=3D"on"><strong><b><font =
size=3D3
 face=3DArial><span style=3D'font-size:12.0pt;font-family:Arial'>Sally =
Seitz</span></font></b></strong></st1:PersonName><o:p></o:p></p>

<p class=3DMsoNormal><em><i><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'>Program =
Manager</span></font></i></em><o:p></o:p></p>

<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'>ANSI</span></font><o:p></o:p></p>

<p class=3DMsoNormal><st1:Street w:st=3D"on"><st1:address =
w:st=3D"on"><font size=3D2
  face=3DArial><span style=3D'font-size:10.0pt;font-family:Arial'>25 =
West 43rd
  Street</span></font></st1:address></st1:Street><o:p></o:p></p>

<p class=3DMsoNormal><st1:place w:st=3D"on"><st1:City w:st=3D"on"><font =
size=3D2
  face=3DArial><span style=3D'font-size:10.0pt;font-family:Arial'>New =
York</span></font></st1:City><font
 size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;font-family:Arial'>, <st1:State
 w:st=3D"on">NY</st1:State> <st1:PostalCode =
w:st=3D"on">10036</st1:PostalCode></span></font></st1:place><o:p></o:p><=
/p>

<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'>Phone: (212) 642-4918</span></font><o:p></o:p></p>

<p class=3DMsoNormal><font size=3D2 face=3DArial><span =
style=3D'font-size:10.0pt;
font-family:Arial'>Fax: (212) 840-2298</span></font><o:p></o:p></p>

<p class=3DMsoNormal><font size=3D3 face=3D"Times New Roman"><span =
style=3D'font-size:
12.0pt'><o:p>&nbsp;</o:p></span></font></p>

</div>

</body>

</html>

------_=_NextPart_001_01C53076.FAC732C0--
