Skip to content

Commit a5196bf

Browse files
authored
ext/pdo_pgsql: updating copy from according to pgsql extension workflow. (#18175)
mainly using zend_string instead.
1 parent b6becad commit a5196bf

File tree

1 file changed

+11
-9
lines changed

1 file changed

+11
-9
lines changed

ext/pdo_pgsql/pgsql_driver.c

+11-9
Original file line numberDiff line numberDiff line change
@@ -619,27 +619,29 @@ static bool pgsql_handle_rollback(pdo_dbh_t *dbh)
619619

620620
static bool _pdo_pgsql_send_copy_data(pdo_pgsql_db_handle *H, zval *line) {
621621
size_t query_len;
622-
char *query;
622+
zend_string *query;
623623

624624
if (!try_convert_to_string(line)) {
625625
return false;
626626
}
627627

628628
query_len = Z_STRLEN_P(line);
629-
query = emalloc(query_len + 2); /* room for \n\0 */
630-
memcpy(query, Z_STRVAL_P(line), query_len);
629+
query = zend_string_alloc(query_len + 2, false); /* room for \n\0 */
630+
memcpy(ZSTR_VAL(query), Z_STRVAL_P(line), query_len + 1);
631+
ZSTR_LEN(query) = query_len;
631632

632-
if (query[query_len - 1] != '\n') {
633-
query[query_len++] = '\n';
633+
if (query_len > 0 && ZSTR_VAL(query)[query_len - 1] != '\n') {
634+
ZSTR_VAL(query)[query_len] = '\n';
635+
ZSTR_VAL(query)[query_len + 1] = '\0';
636+
ZSTR_LEN(query) ++;
634637
}
635-
query[query_len] = '\0';
636638

637-
if (PQputCopyData(H->server, query, query_len) != 1) {
638-
efree(query);
639+
if (PQputCopyData(H->server, ZSTR_VAL(query), ZSTR_LEN(query)) != 1) {
640+
zend_string_release_ex(query, false);
639641
return false;
640642
}
641643

642-
efree(query);
644+
zend_string_release_ex(query, false);
643645
return true;
644646
}
645647

0 commit comments

Comments
 (0)