PQescapeBytea v 7.2.3 BUG?

Started by Reid Thompsonabout 23 years ago3 messages
#1Reid Thompson
reid.thompson@ateb.com

should
sprintf(buffer, "%c", 0x5C);
readsz = 1;
buffer2Ptr =(unsigned char *) PQescapeBytea(buffer, readsz, &esclen);
for (ctr = 0; ctr < strlen(buffer2Ptr); ctr++)
{
printf("char[%d] is [%c]\n", ctr, buffer2Ptr[ctr]);
}
printf("esclen is [%d]\n", esclen);
printf("buffer2Ptr is [%s]\n", buffer2Ptr);

result in the following output?

char[0] is [\]
char[1] is [\]
char[2] is [\]
char[3] is [\]
esclen is [5]
buffer2Ptr is [\\\\]

OR should it result in
char[0] is [\]
char[1] is [\]
esclen is [3]
buffer2Ptr is [\\]

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Reid Thompson (#1)
Re: PQescapeBytea v 7.2.3 BUG?

Reid Thompson <reid.thompson@ateb.com> writes:

should
sprintf(buffer, "%c", 0x5C);
readsz = 1;
buffer2Ptr =(unsigned char *) PQescapeBytea(buffer, readsz, &esclen);
for (ctr = 0; ctr < strlen(buffer2Ptr); ctr++)
{
printf("char[%d] is [%c]\n", ctr, buffer2Ptr[ctr]);
}
printf("esclen is [%d]\n", esclen);
printf("buffer2Ptr is [%s]\n", buffer2Ptr);
result in the following output?

char[0] is [\]
char[1] is [\]
char[2] is [\]
char[3] is [\]
esclen is [5]
buffer2Ptr is [\\\\]

Looks okay to me. Note the 7.2 manual mistakenly claims that esclen
doesn't include the trailing null in the output. According to the
current manual, it does.

regards, tom lane

#3Joe Conway
mail@joeconway.com
In reply to: Reid Thompson (#1)
Re: PQescapeBytea v 7.2.3 BUG?

Reid Thompson wrote:

should

[...snip...]

result in the following output?

char[0] is [\]
char[1] is [\]
char[2] is [\]
char[3] is [\]
esclen is [5]
buffer2Ptr is [\\\\]

OR should it result in
char[0] is [\]
char[1] is [\]
esclen is [3]
buffer2Ptr is [\\]

It should result in the former:

test=# select '\\\\'::bytea as string, length('\\\\'::bytea) as length;
string | length
--------+--------
\\ | 1
(1 row)

HTH,

Joe