Skip to content

Commit 870bd0b

Browse files
committed
MFH
1 parent 7c92982 commit 870bd0b

File tree

1 file changed

+10
-8
lines changed

1 file changed

+10
-8
lines changed

ext/pgsql/pgsql.c

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3492,10 +3492,11 @@ PHP_FUNCTION(pg_copy_from)
34923492
#if HAVE_PQPUTCOPYDATA
34933493
while (zend_hash_get_current_data_ex(Z_ARRVAL_P(pg_rows), (void **) &tmp, &pos) == SUCCESS) {
34943494
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+
}
34993500
if (PQputCopyData(pgsql, query, strlen(query)) != 1) {
35003501
efree(query);
35013502
PHP_PQ_ERROR("copy failed: %s", pgsql);
@@ -3511,10 +3512,11 @@ PHP_FUNCTION(pg_copy_from)
35113512
#else
35123513
while (zend_hash_get_current_data_ex(Z_ARRVAL_P(pg_rows), (void **) &tmp, &pos) == SUCCESS) {
35133514
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+
}
35183520
if (PQputline(pgsql, query)==EOF) {
35193521
efree(query);
35203522
PHP_PQ_ERROR("copy failed: %s", pgsql);

0 commit comments

Comments
 (0)