Skip to content

Commit 50bffd3

Browse files
committed
Merge branch 'PHP-8.4'
2 parents 1ce79eb + 9c6fe6b commit 50bffd3

File tree

2 files changed

+27
-2
lines changed

2 files changed

+27
-2
lines changed

ext/pgsql/pgsql.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3390,11 +3390,12 @@ static zend_result pgsql_copy_from_query(PGconn *pgsql, PGresult *pgsql_result,
33903390
if (UNEXPECTED(!tmp)) {
33913391
return FAILURE;
33923392
}
3393-
zend_string *zquery = zend_string_alloc(ZSTR_LEN(tmp) + 1, false);
3393+
zend_string *zquery = zend_string_alloc(ZSTR_LEN(tmp) + 2, false);
33943394
memcpy(ZSTR_VAL(zquery), ZSTR_VAL(tmp), ZSTR_LEN(tmp) + 1);
33953395
ZSTR_LEN(zquery) = ZSTR_LEN(tmp);
3396-
if (ZSTR_LEN(tmp) > 0 && ZSTR_VAL(zquery)[ZSTR_LEN(tmp)] != '\n') {
3396+
if (ZSTR_LEN(tmp) > 0 && ZSTR_VAL(zquery)[ZSTR_LEN(tmp) - 1] != '\n') {
33973397
ZSTR_VAL(zquery)[ZSTR_LEN(tmp)] = '\n';
3398+
ZSTR_VAL(zquery)[ZSTR_LEN(tmp) + 1] = '\0';
33983399
ZSTR_LEN(zquery) ++;
33993400
}
34003401
if (PQputCopyData(pgsql, ZSTR_VAL(zquery), ZSTR_LEN(zquery)) != 1) {

ext/pgsql/tests/gh18148.phpt

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
--TEST--
2+
Fix GH-18148 pg_copy_from() command position offset when giving explicit \n terminator
3+
--EXTENSIONS--
4+
pgsql
5+
--SKIPIF--
6+
<?php
7+
include("inc/skipif.inc");
8+
?>
9+
--FILE--
10+
<?php
11+
12+
include "inc/config.inc";
13+
$table_name = "gh18148";
14+
$db = pg_connect($conn_str);
15+
pg_query($db, "CREATE TABLE {$table_name} (a integer, b text)");
16+
var_dump(pg_copy_from( $db, $table_name, [ "1\tone\n" ] ));
17+
--CLEAN--
18+
<?php
19+
include('inc/config.inc');
20+
$db = pg_connect($conn_str);
21+
pg_query($db, "DROP TABLE IF EXISTS gh18148 cascade");
22+
?>
23+
--EXPECT--
24+
bool(true)

0 commit comments

Comments
 (0)