[ 
https://issues.apache.org/jira/browse/PROTON-2249?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Kim van der Riet updated PROTON-2249:
-------------------------------------
    Summary: [Proton-c] AMQP char type does not handle null chars correctly 
from pn_inspect()  (was: [Proton-c] AMQP char type does not always print 
correctly from pn_inspect())

> [Proton-c] AMQP char type does not handle null chars correctly from 
> pn_inspect()
> --------------------------------------------------------------------------------
>
>                 Key: PROTON-2249
>                 URL: https://issues.apache.org/jira/browse/PROTON-2249
>             Project: Qpid Proton
>          Issue Type: Bug
>            Reporter: Kim van der Riet
>            Priority: Major
>
> The *{{pn_inspect()}}* method returns a string representation of the 
> inspected AMQP type.
> While testing an array of type char in which the first char had value 0x0, it 
> was observed that this method is not correctly printing the array, but is 
> being truncated:
> {noformat}
> "@PN_CHAR["
> {noformat}
> and prevents effective checking of the array contents in the test.
> The formatting of simple AMQP types is set in the *{{pni_inspect_atom()}}* 
> method. The use of the {{%c}} formatting code to print the char is causing 
> null chars to terminate the string which is being treated as a c-string. The 
> following suggested change fixes this issue and prefixes each char with 'U' 
> to indicate it is UTF-32:
> {noformat}
> diff --git a/c/src/core/codec.c b/c/src/core/codec.c
> index b50f286b..1f9185f7 100644
> --- a/c/src/core/codec.c
> +++ b/c/src/core/codec.c
> @@ -129,7 +129,8 @@ int pni_inspect_atom(pn_atom_t *atom, pn_string_t *str)
>   case PN_INT:
>     return pn_string_addf(str, "%" PRIi32, atom->u.as_int);
>   case PN_CHAR:
> -   return pn_string_addf(str, "%c", atom->u.as_char);
> +   if (isprint(atom->u.as_char)) return pn_string_addf(str, "U'%c'", 
> atom->u.as_char);
> +   return pn_string_addf(str, "U'\\x%" PRIx32 "'", atom->u.as_char);
>   case PN_ULONG:
>     return pn_string_addf(str, "%" PRIu64, atom->u.as_ulong);
>   case PN_LONG:
> {noformat}
> and the array prints as:
> {noformat}
> "@PN_CHAR[U'\x0', U'5', U'a', U'Z', U'\x7f']"
> {noformat}
> The following are improved:
>  * Each char is surrounded by single quotes {{'\''}}
>  * Each char is prefixed by 'U' to indicate it is UTF-32 (see 
> [https://en.cppreference.com/w/cpp/language/character_literal)|https://en.cppreference.com/w/cpp/language/character_literal]
>  * Printable chars print as the char itself, non-printable chars print as the 
> hex ordinal value.
> Thoughts?



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@qpid.apache.org
For additional commands, e-mail: dev-h...@qpid.apache.org

Reply via email to