diff --git a/ext/pgsql/pgsql.c b/ext/pgsql/pgsql.c index eae548266a902..484995043d448 100644 --- a/ext/pgsql/pgsql.c +++ b/ext/pgsql/pgsql.c @@ -3273,18 +3273,14 @@ PHP_FUNCTION(pg_copy_from) 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); + if (ZSTR_LEN(tmp) > 0 && ZSTR_VAL(tmp)[ZSTR_LEN(tmp)] != '\n') { + ZSTR_VAL(tmp)[ZSTR_LEN(tmp) ] = '\n'; } - if (PQputCopyData(pgsql, query, (int)strlen(query)) != 1) { - efree(query); + if (PQputCopyData(pgsql, ZSTR_VAL(tmp), ZSTR_LEN(tmp)) != 1) { zend_string_release(tmp); PHP_PQ_ERROR("copy failed: %s", pgsql); RETURN_FALSE; } - efree(query); zend_string_release(tmp); } ZEND_HASH_FOREACH_END();