Skip to content

Commit 3609350

Browse files
Fixed negation of LONG_MIN in ext/pdo_sqlite/pdo_sqlite.c
1 parent c34b84e commit 3609350

File tree

2 files changed

+20
-2
lines changed

2 files changed

+20
-2
lines changed

ext/pdo_sqlite/pdo_sqlite.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@ static int php_pdosqlite3_stream_seek(php_stream *stream, zend_off_t offset, int
205205
switch(whence) {
206206
case SEEK_CUR:
207207
if (offset < 0) {
208-
if (sqlite3_stream->position < (size_t)(-offset)) {
208+
if (sqlite3_stream->position < -(size_t)(offset)) {
209209
sqlite3_stream->position = 0;
210210
*newoffs = -1;
211211
return -1;
@@ -243,7 +243,7 @@ static int php_pdosqlite3_stream_seek(php_stream *stream, zend_off_t offset, int
243243
sqlite3_stream->position = sqlite3_stream->size;
244244
*newoffs = -1;
245245
return -1;
246-
} else if (sqlite3_stream->size < (size_t)(-offset)) {
246+
} else if (sqlite3_stream->size < -(size_t)(offset)) {
247247
sqlite3_stream->position = 0;
248248
*newoffs = -1;
249249
return -1;

ext/pdo_sqlite/tests/bug20927.phpt

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
--TEST--
2+
PDO_SQLITE: fseek() with PHP_INT_MIN on sqlite blob stream (UBSan regression test)
3+
--EXTENSIONS--
4+
pdo
5+
pdo_sqlite
6+
--FILE--
7+
<?php
8+
$db = new Pdo\Sqlite('sqlite::memory:');
9+
$db->exec('CREATE TABLE test (id STRING, data BLOB)');
10+
$insert_stmt = $db->prepare("INSERT INTO test (id, data) VALUES (?, ?)");
11+
$insert_stmt->bindValue(1, 'a', PDO::PARAM_STR);
12+
$insert_stmt->bindValue(2, 'TEST TEST', PDO::PARAM_LOB);
13+
$insert_stmt->execute();
14+
$stream = $db->openBlob('test', 'data', 1);
15+
var_dump(fseek($stream, PHP_INT_MIN, SEEK_END));
16+
?>
17+
--EXPECT--
18+
int(-1)

0 commit comments

Comments
 (0)