HomeAbout Us A-Z IndexSearch * Contact Us Register LoginPress Shop

The Open Brand -- Problem Reporting and Interpretations System


Problem Report 0616 Details

Help Show help | Quick Search | Submit a Test Suite Support Request | Click here to view your privileges

This page provides all information on Problem Report 0616.


Report 0616 Actions


    Problem Report Number 0616
    Submitter's Classification Specification problem
    State Resolved
    Resolution Rejected (REJ)
    Problem Resolution ID REJ.X.0220
    Raised 1970-01-01 08:00
    Updated 2003-03-13 08:00
    Published null
    Product Standard Commands and Utilities V2 (UNIX 95)
    Certification Program The Open Brand certification program
    Test Suite VSC version 4.1.4
    Test Identification POSIX.cmd/printf/printf.sh 28
    Problem Summary PG4C.00056 printf "%b" "\\0000" must output a NULL character.
    Problem Text
    The implementor requests a formal interpretation, we believe the
    consultants response is incorrect. Specifically, the assumption it is
    possible to print all legal escape sequences.

    The testcase is testing printf %b "\\0000"(backslash0000).

    The specification appears to be non-specific when discussing the
    %b conversion character.

    Page 583 of the XPG4 XCU V2 states the following:

    "argument
    The strings to be written to standard output, under the control
    of format; ..."

    Page 584 of the XPG4 XCU V2 states the following:

    "-- \0ddd(backslash0ddd), where ddd is a zero-, one-, two-, or three-digit
    octal number that will be converted to a byte with the numeric values
    specified by the octal number"

    Additionally, the XCU states:

    "Bytes from the converted string will be written until the end of the
    string or the number of bytes indicated by the precision specification
    is reached. If the precision is omitted, it will be taken to be infinite,
    so all bytes up to the end of the converted string will be written."

    The phrase "until the end of the string" is ambiguous; it could be
    read to say that the "bytes will be written until the end of the
    converted string" or "bytes will be written until the end of the
    string in the argument".

    VSC has taken the latter as the correct and only interpretation, but
    this seems to be a more specific interpretation then the spec wording
    would uphold.

    This might be seen more clearly by looking at an example:

    printf %b "ABCD\\0000FGHI" (ABCDbackslashFGHI)

    in the first case printf output would be "ABCD" and in the
    second case it would be "ABCDFGHI" (octal 000 is the nul char on
    our system).
    Test Output
    ************************************************************************
    /tset/POSIX.cmd/printf/printf.ex 1 Failed


    Test Information:
    Assertion #28 (A):
    got '' for value 0000
    ************************************************************************

    Review Information

    Review Type TSMA Review
    Start Date null
    Completed null
    Status Complete
    Review Recommendation No Resolution Given
    Review Response
    We recommend this request be refused.

    XCU issue 4, version 2, page 584 states:

    o An additional conversion character, b, will be supported as
    follows. The argument will be taken to be a string that may
    contain backslash-escape sequences. The following
    backslash-escape sequences will be supported:

    ...

    - \0ddd (backslash0ddd)where ddd is a zero-, one-, two-, or three-digit
    octal number that will be converted to a byte with the numeric
    value specified by the octal number.


    The key here is the statement that

    The following backslash-escape sequences will be supported

    We believe that being supported means that legal escape sequences
    will be printed. Since \0000 (backslash0000) is one of the legal escape
    sequences it must be possible to print it.

    The argument put forth above that the "end of the string"
    referenced could be the end of the converted string is invalid
    because in that case "\0000"(backslash0000) will not lead to a NULL character
    being output.

    Using that argment, \0000(backslash0000) will evaluate to a NULL as the first
    character in the converted string. The NULL will terminate the
    string, leaving printf with an empty string. Nothing will be output.

    This is clearly not the intended output.

    Although not normative, the POSIX rationale and XCU printf
    Application Usage sections both support our belief by stating
    that printf "%b\n" "$*" is equivalent to echo "$*". This is not
    possible using the alternative logic presented for interpreting
    \0000(backslash0000) .

    Review Type Expert Group Review
    Start Date null
    Completed null
    Status Complete
    Review Resolution No Resolution Given
    Review Conclusion
    This request is being sent to POSIX for interpretation. In the interim,
    the request should be rejected.

    Review Type SA Review
    Start Date null
    Completed null
    Status Complete
    Review Resolution Rejected (REJ)
    Review Conclusion
    This request is refused.

    Problem Reporting System Options:

     

    Back   


Contact the Certification Authority