Skip to content

Commit 84512a1

Browse files
committed
Fix #70825: Cannot fetch multiple values with group in ini file
If we have the position already from the last fetch, we also have to preset the current group, because it won't be read again.
1 parent bd8112a commit 84512a1

File tree

3 files changed

+74
-0
lines changed

3 files changed

+74
-0
lines changed

NEWS

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ PHP NEWS
99
- Dba:
1010
. Fixed bug #71514 (Bad dba_replace condition because of wrong API usage).
1111
(cmb)
12+
. Fixed bug #70825 (Cannot fetch multiple values with group in ini file).
13+
(cmb)
1214

1315
- Streams:
1416
. Fixed bug #72853 (stream_set_blocking doesn't work). (Laruence)

ext/dba/libinifile/inifile.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,7 @@ val_type inifile_fetch(inifile *dba, const key_type *key, int skip TSRMLS_DC) {
250250
if (skip == -1 && dba->next.key.group && dba->next.key.name && !inifile_key_cmp(&dba->next.key, key TSRMLS_CC)) {
251251
/* we got position already from last fetch */
252252
php_stream_seek(dba->fp, dba->next.pos, SEEK_SET);
253+
ln.key.group = estrdup(dba->next.key.group);
253254
} else {
254255
/* specific instance or not same key -> restart search */
255256
/* the slow way: restart and seacrch */

ext/dba/tests/bug70825.phpt

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
--TEST--
2+
Bug #70825 (Cannot fetch multiple values with group in ini file)
3+
--SKIPIF--
4+
<?php
5+
if (!extension_loaded('dba')) die('skip dba extension not available');
6+
if (!in_array('inifile', dba_handlers())) die('skip inifile handler not available');
7+
?>
8+
--FILE--
9+
<?php
10+
$filename = __DIR__ . DIRECTORY_SEPARATOR . 'bug70825.ini';
11+
12+
$db = dba_open($filename, 'n', 'inifile');
13+
dba_insert('foo', 23, $db);
14+
dba_insert('foo', 42, $db);
15+
dba_insert('foo', 1337, $db);
16+
var_dump(dba_fetch('foo', -1, $db));
17+
var_dump(dba_fetch('foo', -1, $db));
18+
var_dump(dba_fetch('foo', -1, $db));
19+
dba_close($db);
20+
unlink($filename);
21+
22+
$db = dba_open($filename, 'n', 'inifile');
23+
dba_insert(['foo', 'bar'], 23, $db);
24+
dba_insert(['foo', 'bar'], 42, $db);
25+
dba_insert(['foo', 'bar'], 1337, $db);
26+
var_dump(dba_fetch(['foo', 'bar'], -1, $db));
27+
var_dump(dba_fetch(['foo', 'bar'], -1, $db));
28+
var_dump(dba_fetch(['foo', 'bar'], -1, $db));
29+
dba_close($db);
30+
unlink($filename);
31+
32+
$db = dba_open($filename, 'n', 'inifile');
33+
dba_insert('[foo]bar', 23, $db);
34+
dba_insert('[foo]bar', 42, $db);
35+
dba_insert('[foo]bar', 1337, $db);
36+
var_dump(dba_fetch('[foo]bar', -1, $db));
37+
var_dump(dba_fetch('[foo]bar', -1, $db));
38+
var_dump(dba_fetch('[foo]bar', -1, $db));
39+
dba_close($db);
40+
unlink($filename);
41+
42+
$db = dba_open($filename, 'n', 'inifile');
43+
dba_insert('[foo]bar', 23, $db);
44+
dba_insert('[foo]bar', 42, $db);
45+
dba_insert('[foo]bar', 1337, $db);
46+
var_dump(dba_fetch('[foo]bar', 0, $db));
47+
var_dump(dba_fetch('[foo]bar', 1, $db));
48+
var_dump(dba_fetch('[foo]bar', 2, $db));
49+
dba_close($db);
50+
unlink($filename);
51+
?>
52+
==DONE==
53+
--EXPECT--
54+
string(2) "23"
55+
string(2) "42"
56+
string(4) "1337"
57+
string(2) "23"
58+
string(2) "42"
59+
string(4) "1337"
60+
string(2) "23"
61+
string(2) "42"
62+
string(4) "1337"
63+
string(2) "23"
64+
string(2) "42"
65+
string(4) "1337"
66+
==DONE==
67+
--CLEAN--
68+
<?php
69+
$filename = __DIR__ . DIRECTORY_SEPARATOR . 'bug70825.ini';
70+
unlink($filename);
71+
?>

0 commit comments

Comments
 (0)