@@ -532,14 +532,12 @@ static int pdo_odbc_handle_factory(pdo_dbh_t *dbh, zval *driver_options) /* {{{
532
532
533
533
use_direct = 1 ;
534
534
535
- size_t db_len = strlen (dbh -> data_source );
536
- bool use_uid_arg = dbh -> username != NULL && !php_memnistr (dbh -> data_source , "uid=" , strlen ("uid=" ), dbh -> data_source + db_len );
537
- bool use_pwd_arg = dbh -> password != NULL && !php_memnistr (dbh -> data_source , "pwd=" , strlen ("pwd=" ), dbh -> data_source + db_len );
535
+ bool use_uid_arg = dbh -> username != NULL && !php_memnistr (dbh -> data_source , "uid=" , strlen ("uid=" ), dbh -> data_source + dbh -> data_source_len );
536
+ bool use_pwd_arg = dbh -> password != NULL && !php_memnistr (dbh -> data_source , "pwd=" , strlen ("pwd=" ), dbh -> data_source + dbh -> data_source_len );
538
537
539
538
if (use_uid_arg || use_pwd_arg ) {
540
- char * db = (char * ) emalloc (db_len + 1 );
541
- strcpy (db , dbh -> data_source );
542
- char * db_end = db + db_len ;
539
+ char * db = (char * ) estrndup (dbh -> data_source , dbh -> data_source_len );
540
+ char * db_end = db + dbh -> data_source_len ;
543
541
db_end -- ;
544
542
if ((unsigned char )* (db_end ) == ';' ) {
545
543
* db_end = '\0' ;
@@ -593,6 +591,7 @@ static int pdo_odbc_handle_factory(pdo_dbh_t *dbh, zval *driver_options) /* {{{
593
591
594
592
pefree ((char * )dbh -> data_source , dbh -> is_persistent );
595
593
dbh -> data_source = dsn ;
594
+ dbh -> data_source_len = strlen (dsn );
596
595
if (uid && should_quote_uid ) {
597
596
efree (uid );
598
597
}
@@ -602,7 +601,7 @@ static int pdo_odbc_handle_factory(pdo_dbh_t *dbh, zval *driver_options) /* {{{
602
601
efree (db );
603
602
}
604
603
605
- rc = SQLDriverConnect (H -> dbc , NULL , (SQLCHAR * ) dbh -> data_source , strlen ( dbh -> data_source ) ,
604
+ rc = SQLDriverConnect (H -> dbc , NULL , (SQLCHAR * ) dbh -> data_source , dbh -> data_source_len ,
606
605
dsnbuf , sizeof (dsnbuf )- 1 , & dsnbuflen , SQL_DRIVER_NOPROMPT );
607
606
}
608
607
if (!use_direct ) {
0 commit comments