@@ -3492,10 +3492,11 @@ PHP_FUNCTION(pg_copy_from)
3492
3492
#if HAVE_PQPUTCOPYDATA
3493
3493
while (zend_hash_get_current_data_ex (Z_ARRVAL_P (pg_rows ), (void * * ) & tmp , & pos ) == SUCCESS ) {
3494
3494
convert_to_string_ex (tmp );
3495
- query = (char * )emalloc (Z_STRLEN_PP (tmp ) + 2 );
3496
- strcpy (query , Z_STRVAL_PP (tmp ));
3497
- if (* (query + Z_STRLEN_PP (tmp )- 1 ) != '\n' )
3498
- strcat (query , "\n" );
3495
+ query = (char * )emalloc (Z_STRLEN_PP (tmp ) + 2 );
3496
+ strlcpy (query , Z_STRVAL_PP (tmp ), Z_STRLEN_PP (tmp ) + 2 );
3497
+ if (Z_STRLEN_PP (tmp ) > 0 && * (query + Z_STRLEN_PP (tmp ) - 1 ) != '\n' ) {
3498
+ strlcat (query , "\n" , Z_STRLEN_PP (tmp ) + 2 );
3499
+ }
3499
3500
if (PQputCopyData (pgsql , query , strlen (query )) != 1 ) {
3500
3501
efree (query );
3501
3502
PHP_PQ_ERROR ("copy failed: %s" , pgsql );
@@ -3511,10 +3512,11 @@ PHP_FUNCTION(pg_copy_from)
3511
3512
#else
3512
3513
while (zend_hash_get_current_data_ex (Z_ARRVAL_P (pg_rows ), (void * * ) & tmp , & pos ) == SUCCESS ) {
3513
3514
convert_to_string_ex (tmp );
3514
- query = (char * )emalloc (Z_STRLEN_PP (tmp ) + 2 );
3515
- strcpy (query , Z_STRVAL_PP (tmp ));
3516
- if (* (query + Z_STRLEN_PP (tmp )- 1 ) != '\n' )
3517
- strcat (query , "\n" );
3515
+ query = (char * )emalloc (Z_STRLEN_PP (tmp ) + 2 );
3516
+ strlcpy (query , Z_STRVAL_PP (tmp ), Z_STRLEN_PP (tmp ) + 2 );
3517
+ if (Z_STRLEN_PP (tmp ) > 0 && * (query + Z_STRLEN_PP (tmp ) - 1 ) != '\n' ) {
3518
+ strlcat (query , "\n" , Z_STRLEN_PP (tmp ) + 2 );
3519
+ }
3518
3520
if (PQputline (pgsql , query )== EOF ) {
3519
3521
efree (query );
3520
3522
PHP_PQ_ERROR ("copy failed: %s" , pgsql );
0 commit comments