Sorry it's unclear to me where I should report bugs... (we found one with HCL Informix 15 CSDK)
We detected a defect in the ESQL/C libs when using a CONNECT TO with USER/USING clause.
The cc address sanitizer shows a heap buffer overflow...
Try attached sample on Linux x86:
$ INFORMIXC="cc -fsanitize=address" esql -o test0041.bin test0041.ec
$ ./test0041.bin
=================================================================
==610935==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x603000006ec8 at pc 0x7f5b2ee4a731 bp 0x7ffeacf66360 sp 0x7ffeacf65b10
READ of size 25 at 0x603000006ec8 thread T0
#0 0x7f5b2ee4a730 in __interceptor_strlen ../../../../src/libsanitizer/sanitizer_common/sanitizer_common_interceptors.inc:389
#1 0x7f5b2f67e49a in _iqset2err (/opt3/dbs/ifx/HCL-CSDK-15.0.0.0/lib/esql/libifsql15a.so+0x3449a)
#2 0x7f5b2f65d1eb in proc_srvrresp (/opt3/dbs/ifx/HCL-CSDK-15.0.0.0/lib/esql/libifsql15a.so+0x131eb)
#3 0x7f5b2f65e1c4 in asf_connect (/opt3/dbs/ifx/HCL-CSDK-15.0.0.0/lib/esql/libifsql15a.so+0x141c4)
#4 0x7f5b2f65e8e1 in sqli_connect_open (/opt3/dbs/ifx/HCL-CSDK-15.0.0.0/lib/esql/libifsql15a.so+0x148e1)
#5 0x5590b266e3a5 in main (/home/sf/dbvendors/informix/problems/test0041.bin+0x13a5)
#6 0x7f5b2eb67249 in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58
#7 0x7f5b2eb67304 in __libc_start_main_impl ../csu/libc-start.c:360
#8 0x5590b266e130 in _start (/home/sf/dbvendors/informix/problems/test0041.bin+0x1130)
0x603000006ec8 is located 0 bytes to the right of 24-byte region [0x603000006eb0,0x603000006ec8)
allocated by thread T0 here:
#0 0x7f5b2eeb83b7 in __interceptor_calloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:77
#1 0x7f5b2f577ee4 in meAlloc (/opt3/dbs/ifx/HCL-CSDK-15.0.0.0/lib/esql/libifos15a.so+0x14ee4)
#2 0x7f5b2f614297 in ascOptBin (/opt3/dbs/ifx/HCL-CSDK-15.0.0.0/lib/libifasf15a.so+0x28297)
#3 0x7f5b2f60ea33 in ascBinary (/opt3/dbs/ifx/HCL-CSDK-15.0.0.0/lib/libifasf15a.so+0x22a33)
#4 0x7f5b2f610305 in pfConReq (/opt3/dbs/ifx/HCL-CSDK-15.0.0.0/lib/libifasf15a.so+0x24305)
#5 0x7f5b2f609bff in cmReqSync (/opt3/dbs/ifx/HCL-CSDK-15.0.0.0/lib/libifasf15a.so+0x1dbff)
#6 0x7f5b2f60a964 in cmConReq (/opt3/dbs/ifx/HCL-CSDK-15.0.0.0/lib/libifasf15a.so+0x1e964)
#7 0x7f5b2f5ffa71 in ascRequest (/opt3/dbs/ifx/HCL-CSDK-15.0.0.0/lib/libifasf15a.so+0x13a71)
#8 0x7f5b2f602058 in ASF_Call (/opt3/dbs/ifx/HCL-CSDK-15.0.0.0/lib/libifasf15a.so+0x16058)
#9 0x7f5b2f65df9e in asf_connect (/opt3/dbs/ifx/HCL-CSDK-15.0.0.0/lib/esql/libifsql15a.so+0x13f9e)
#10 0x7f5b2f65e8e1 in sqli_connect_open (/opt3/dbs/ifx/HCL-CSDK-15.0.0.0/lib/esql/libifsql15a.so+0x148e1)
#11 0x5590b266e3a5 in main (/home/sf/dbvendors/informix/problems/test0041.bin+0x13a5)
#12 0x7f5b2eb67249 in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58
SUMMARY: AddressSanitizer: heap-buffer-overflow ../../../../src/libsanitizer/sanitizer_common/sanitizer_common_interceptors.inc:389 in __interceptor_strlen
Shadow bytes around the buggy address:
0x0c067fff8d80: fa fa 00 00 00 00 fa fa 00 00 00 04 fa fa fd fd
0x0c067fff8d90: fd fd fa fa fd fd fd fa fa fa fd fd fd fa fa fa
0x0c067fff8da0: fd fd fd fa fa fa fd fd fd fa fa fa fd fd fd fd
0x0c067fff8db0: fa fa fd fd fd fd fa fa fd fd fd fa fa fa fd fd
0x0c067fff8dc0: fd fa fa fa 00 00 05 fa fa fa 00 00 00 00 fa fa
=>0x0c067fff8dd0: fd fd fd fd fa fa 00 00 00[fa]fa fa fa fa fa fa
0x0c067fff8de0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c067fff8df0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c067fff8e00: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c067fff8e10: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c067fff8e20: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
Shadow byte legend (one shadow byte represents 8 application bytes):
Addressable: 00
Partially addressable: 01 02 03 04 05 06 07
Heap left redzone: fa
Freed heap region: fd
Stack left redzone: f1
Stack mid redzone: f2
Stack right redzone: f3
Stack after return: f5
Stack use after scope: f8
Global redzone: f9
Global init order: f6
Poisoned by user: f7
Container overflow: fc
Array cookie: ac
Intra object redzone: bb
ASan internal: fe
Left alloca redzone: ca
Right alloca redzone: cb
==610935==ABORTING
#include <stdlib.h>
#include <stdio.h>
#include <signal.h>
#include <string.h>
void check_sqlcode(const char *msg)
{
printf(">> [%s]: sqlcode=%d\n", msg, sqlca.sqlcode);
if (sqlca.sqlcode != 0 && sqlca.sqlcode != 100)
exit(1);
}
int main(int argc, char ** argv)
{
EXEC SQL BEGIN DECLARE SECTION;
const char * un = "informix";
const char * up = "fourjs";
EXEC SQL END DECLARE SECTION;
EXEC SQL CONNECT TO "testdb1" USER :un USING :up;
check_sqlcode("CONNECT TO");
return 0;
}