@@ -301,16 +301,22 @@ makeConnectString(char *connect_string, const ConnInfo *ci, UWORD len)
301
301
char xaOptStr [16 ];
302
302
#endif
303
303
ssize_t hlen , nlen , olen ;
304
- /*BOOL abbrev = (len <= 400);*/
305
- BOOL abbrev = (len < 1024 ) || 0 < ci -> force_abbrev_connstr ;
304
+ BOOL abbrev ;
306
305
UInt4 flag ;
307
306
307
+ if (len > MAX_CONNECT_STRING ) {
308
+ len = MAX_CONNECT_STRING ;
309
+ }
310
+
311
+ /*abbrev = (len <= 400);*/
312
+ abbrev = (len < 1024 ) || 0 < ci -> force_abbrev_connstr ;
313
+
308
314
MYLOG (0 , "%s row_versioning=%s\n" , __FUNCTION__ , ci -> row_versioning );
309
315
310
316
MYLOG (DETAIL_LOG_LEVEL , "force_abbrev=%d abbrev=%d\n" , ci -> force_abbrev_connstr , abbrev );
311
317
encode (ci -> password , encoded_item , sizeof (encoded_item ));
312
318
/* fundamental info */
313
- nlen = MAX_CONNECT_STRING ;
319
+ nlen = len ;
314
320
olen = snprintf (connect_string , nlen , "%s=%s;DATABASE=%s;SERVER=%s;PORT=%s;UID=%s;PWD=%s" ,
315
321
got_dsn ? "DSN" : "DRIVER" ,
316
322
got_dsn ? ci -> dsn : ci -> drivername ,
@@ -327,7 +333,7 @@ MYLOG(DETAIL_LOG_LEVEL, "force_abbrev=%d abbrev=%d\n", ci->force_abbrev_connstr,
327
333
328
334
/* extra info */
329
335
hlen = strlen (connect_string );
330
- nlen = MAX_CONNECT_STRING - hlen ;
336
+ nlen = len - hlen ;
331
337
MYLOG (DETAIL_LOG_LEVEL , "hlen=" FORMAT_SSIZE_T "\n" , hlen );
332
338
if (!abbrev )
333
339
{
@@ -474,7 +480,7 @@ MYLOG(DETAIL_LOG_LEVEL, "hlen=" FORMAT_SSIZE_T "\n", hlen);
474
480
ABBR_SSLMODE "=%s" , abbrev_sslmode (ci -> sslmode , abbrevmode , sizeof (abbrevmode )));
475
481
}
476
482
hlen = strlen (connect_string );
477
- nlen = MAX_CONNECT_STRING - hlen ;
483
+ nlen = len - hlen ;
478
484
olen = snprintf (& connect_string [hlen ], nlen , ";"
479
485
"%s" /* ABBR_CONNSETTINGS */
480
486
ABBR_FETCH "=%d;"
@@ -505,7 +511,7 @@ MYLOG(DETAIL_LOG_LEVEL, "hlen=" FORMAT_SSIZE_T "\n", hlen);
505
511
if (olen < nlen || ci -> rollback_on_error >= 0 )
506
512
{
507
513
hlen = strlen (connect_string );
508
- nlen = MAX_CONNECT_STRING - hlen ;
514
+ nlen = len - hlen ;
509
515
/*
510
516
* The PROTOCOL setting must be placed after CX flag
511
517
* so that this option can override the CX setting.
@@ -525,7 +531,7 @@ MYLOG(DETAIL_LOG_LEVEL, "hlen=" FORMAT_SSIZE_T "\n", hlen);
525
531
if (0 != flag )
526
532
{
527
533
hlen = strlen (connect_string );
528
- nlen = MAX_CONNECT_STRING - hlen ;
534
+ nlen = len - hlen ;
529
535
olen = snprintf (& connect_string [hlen ], nlen , ";"
530
536
INI_EXTRAOPTIONS "=%x;" ,
531
537
flag );
0 commit comments