ID:               16040
 Comment by:       ilatypov at infradead dot org
 Reported By:      markus dot pfefferle at web dot de
 Status:           No Feedback
 Bug Type:         PCRE related
 Operating System: Linux
 PHP Version:      4.1.1
 New Comment:

This also holds true for yesterday's CVS snapshot of PHP6, in Windows
XP.

I tried installing MediaWiki with the PHP6 snapshot and found that the
table prefix replacement in includes/db/Database.php:replaceVars()
returns corrupt data sporadically.

I found that pref_replace_callback() was the source of the corruption.

This statement:

        $ins = preg_replace_callback(
'/\/\*(?:\$wgDBprefix|_)\*\/([a-zA-Z_0-9]*)/',
            array( &$this, 'tableNameCallback' ),
            $ins );

called the tableName() method through the callback tableNameCallback().
 The former method returned a proper string but the end result in $ins
was corrupted.

On finding this earlier report, I looked closer at the
Database.tableName() method and found a call to preg_match() there.


Previous Comments:
------------------------------------------------------------------------

[2002-06-16 01:00:06] php-bugs at lists dot php dot net

No feedback was provided for this bug for over a month, so it is
being suspended automatically. If you are able to provide the
information that was originally requested, please do so and change
the status of the bug back to "Open".

------------------------------------------------------------------------

[2002-04-09 17:00:00] j...@php.net

the code below works fine for me. please provide a complete example of
code that fails.

function funcB($arr) {
  return 'whatever';
}
function funcA($arr) {
  $someotherhaystack = '%value1% foo %value2%';
  $t = preg_replace_callback("/%value([0-9]+)%/", "funcB",
$someotherhaystack);
  return $t; // $t still makes sense here
}

$haystack = '%text12% bar %text13%';
echo preg_replace_callback("/%text([0-9]+)%/", "funcA", $haystack);

------------------------------------------------------------------------

[2002-03-13 07:31:50] markus dot pfefferle at web dot de

A preg_replace_callback() that calls a callback function which in turn
makes use of a preg_replace_callback() function too, will not work
correctly. The first preg_replace_callback() will substitute gibberisch
even though the callback function returned a valid string.

Example:

function funcB($arr)
{
  ...
  return $whatever;
}

function funcA($arr)
{
  ...
  $t = preg_replace_callback("/%value([0-9]+)%/", "funcB",
$someotherhaystack)
  return $t; // $t still makes sense here
}

echo preg_replace_callback("/%text([0-9]+)%/", "funcA", $haystack);

// but whatever funcA returned, just some gibberisch is substituted for
/%text[0-9]+%/


------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=16040&edit=1

Reply via email to