Skip to content

Commit

Permalink
pg_copy_from using zend_string on success.
Browse files Browse the repository at this point in the history
  • Loading branch information
devnexen committed May 1, 2024
1 parent da8f483 commit 824f868
Showing 1 changed file with 9 additions and 7 deletions.
16 changes: 9 additions & 7 deletions ext/pgsql/pgsql.c
Original file line number Diff line number Diff line change
Expand Up @@ -3269,22 +3269,24 @@ PHP_FUNCTION(pg_copy_from)
int command_failed = 0;
PQclear(pgsql_result);
ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(pg_rows), value) {
zend_string *zquery = NULL;
zend_string *tmp = zval_try_get_string(value);
if (UNEXPECTED(!tmp)) {
return;
}
query = (char *)emalloc(ZSTR_LEN(tmp) + 2);
strlcpy(query, ZSTR_VAL(tmp), ZSTR_LEN(tmp) + 2);
if (ZSTR_LEN(tmp) > 0 && *(query + ZSTR_LEN(tmp) - 1) != '\n') {
strlcat(query, "\n", ZSTR_LEN(tmp) + 2);
zquery = zend_string_alloc(ZSTR_LEN(tmp) + 1, false);
strlcpy(ZSTR_VAL(zquery), ZSTR_VAL(tmp), ZSTR_LEN(tmp) + 2);

if (ZSTR_LEN(tmp) > 0 && *(ZSTR_VAL(zquery) + ZSTR_LEN(tmp) - 1) != '\n') {
strlcat(ZSTR_VAL(zquery), "\n", ZSTR_LEN(tmp) + 2);
}
if (PQputCopyData(pgsql, query, (int)strlen(query)) != 1) {
efree(query);
if (PQputCopyData(pgsql, ZSTR_VAL(zquery), ZSTR_LEN(zquery)) != 1) {
zend_string_release(zquery);
zend_string_release(tmp);
PHP_PQ_ERROR("copy failed: %s", pgsql);
RETURN_FALSE;
}
efree(query);
zend_string_release(zquery);
zend_string_release(tmp);
} ZEND_HASH_FOREACH_END();

Expand Down

0 comments on commit 824f868

Please sign in to comment.