Skip to content
This repository has been archived by the owner on Jan 30, 2020. It is now read-only.

Commit

Permalink
Merge pull request zendframework/zendframework#7282 from Martin-P/hot…
Browse files Browse the repository at this point in the history
…fix/log-writer-db-array-to-string-conversion

Fix: Array to string conversion in Zend\Log\Writer\Db
  • Loading branch information
weierophinney committed Mar 10, 2015
160 parents 7d4146f + e709e4d + b652dfb + db2794e + 6fca41f + 317429f + 6753576 + 4112f92 + 6faf2bb + df3a849 + ee5efcb + 2ee5d16 + bcb4d03 + a5c61e2 + 57ffceb + a6fa26b + 9d36595 + bf0040c + 71b1a95 + 5619ba3 + c093ab0 + de13946 + 04b025f + 0933607 + 34ed3ed + 83f6472 + db74e8c + 7b75da1 + bb4c48f + 9fa3c05 + 139c0b1 + a587eef + 7a782f4 + 39cb2e2 + 31f8c80 + a9b7779 + de058f6 + 67b97f6 + 40d86d0 + b5234cc + 17b4e13 + 8af24aa + 1a9df55 + 2c85c99 + 5557fac + fe78a35 + f6430c3 + 6041a1e + 86b9031 + 674bd75 + 67a1bfb + 4d4dd8b + c655082 + dbb18b2 + 97a9134 + 80367df + 98d5255 + 7946c9f + ea67c13 + 44df0b2 + 38e090d + 7af74e7 + 8b311b1 + e2c2b94 + 51601cb + dcc1eaf + 6f4b805 + a30a64f + ee7347d + 8b04bfe + b487f00 + ecdfdf6 + d8cde75 + b7a33bb + 65ecb58 + 571d938 + 625a786 + 6fe4efc + f94838d + 76607e3 + 492076c + 17b56b8 + c5509fe + e0fa433 + 7d74e99 + 309136e + f1dd38a + 7be533f + 6a618c2 + 3a454e3 + f66ca80 + f1bebf2 + 850249d + 674d7ba + 597ff82 + ae87c49 + fb156fb + 9c474de + 1a75c72 + 47d1cd2 + a937ea3 + 4219922 + 49e380f + 5903df6 + 7a9d632 + 2ef7274 + b606220 + a09c5c7 + 21afa5c + 8faa67f + 1731915 + efa1bb3 + 5576455 + 86d3ae8 + de3fd70 + 398a3c4 + 5c56554 + 7ad896f + fa91c9b + 1372a45 + a0c8737 + e368d53 + 462b1f7 + 79675fe + a8104b9 + 91ed9d0 + b1d1358 + 6a0c90c + 5e4258f + 239c0d0 + b457c76 + a2533a4 + beb6598 + 79d0f46 + 1519723 + 5084e3b + ce75f80 + e5fd689 + 6744e82 + 6cb64b8 + 03c6da8 + 7dcfd8f + a18fe5d + 5e5ada1 + 439fdac + e6addba + 5422681 + 9ee0ccf + 899105f + 3d2e609 + 7de359b + 1ea12a5 + e232387 + 91e5fc9 + 037982a + eda5e97 + 0272b1d + 0df04d6 + c1a07a1 + 8da8474 commit 271a434
Show file tree
Hide file tree
Showing 2 changed files with 140 additions and 2 deletions.
14 changes: 12 additions & 2 deletions src/Writer/Db.php
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,12 @@ protected function mapEventIntoColumn(array $event, array $columnMap = null)
if (is_array($value)) {
foreach ($value as $key => $subvalue) {
if (isset($columnMap[$name][$key])) {
$data[$columnMap[$name][$key]] = $subvalue;
if (is_scalar($subvalue)) {
$data[$columnMap[$name][$key]] = $subvalue;
continue;
}

$data[$columnMap[$name][$key]] = var_export($subvalue, true);
}
}
} elseif (isset($columnMap[$name])) {
Expand All @@ -189,7 +194,12 @@ protected function eventIntoColumn(array $event)
foreach ($event as $name => $value) {
if (is_array($value)) {
foreach ($value as $key => $subvalue) {
$data[$name . $this->separator . $key] = $subvalue;
if (is_scalar($subvalue)) {
$data[$name . $this->separator . $key] = $subvalue;
continue;
}

$data[$name . $this->separator . $key] = var_export($subvalue, true);
}
} else {
$data[$name] = $value;
Expand Down
128 changes: 128 additions & 0 deletions test/Writer/DbTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
namespace ZendTest\Log\Writer;

use DateTime;
use ReflectionMethod;
use ZendTest\Log\TestAsset\MockDbAdapter;
use Zend\Log\Writer\Db as DbWriter;
use Zend\Log\Formatter\FormatterInterface;
Expand Down Expand Up @@ -249,4 +250,131 @@ public function testConstructWithOptions()
$registeredDb = self::readAttribute($writer, 'db');
$this->assertSame($this->db, $registeredDb);
}

/**
* @group 2589
*/
public function testMapEventIntoColumnDoesNotTriggerArrayToStringConversion()
{
$this->writer = new DbWriter($this->db, $this->tableName, array(
'priority' => 'new-priority-field',
'message' => 'new-message-field' ,
'extra' => array(
'file' => 'new-file',
'line' => 'new-line',
'trace' => 'new-trace',
)
));

// log to the mock db adapter
$priority = 2;
$message = 'message-to-log';
$extra = array(
'file' => 'test.php',
'line' => 1,
'trace' => array(
array(
'function' => 'Bar',
'class' => 'Foo',
'type' => '->',
'args' => array(
'baz',
),
),
),
);
$this->writer->write(array(
'priority' => $priority,
'message' => $message,
'extra' => $extra,
));

$this->assertContains('query', array_keys($this->db->calls));
$this->assertEquals(1, count($this->db->calls['query']));

foreach ($this->db->calls['execute'][0][0] as $fieldName => $fieldValue) {
$this->assertInternalType('string', $fieldName);
$this->assertInternalType('string', (string) $fieldValue);
}
}

/**
* @group 2589
*/
public function testMapEventIntoColumnMustReturnScalarValues()
{
$event = array(
'priority' => 2,
'message' => 'message-to-log',
'extra' => array(
'file' => 'test.php',
'line' => 1,
'trace' => array(
array(
'function' => 'Bar',
'class' => 'Foo',
'type' => '->',
'args' => array(
'baz',
),
),
),
),
);

$columnMap = array(
'priority' => 'new-priority-field',
'message' => 'new-message-field' ,
'extra' => array(
'file' => 'new-file',
'line' => 'new-line',
'trace' => 'new-trace',
));

$method = new ReflectionMethod($this->writer, 'mapEventIntoColumn');
$method->setAccessible(true);
$data = $method->invoke($this->writer, $event, $columnMap);

foreach ($data as $field => $value) {
$this->assertTrue(is_scalar($value), sprintf(
'Value of column "%s" should be scalar, %s given',
$field,
gettype($value)
));
}
}

public function testEventIntoColumnMustReturnScalarValues()
{
$event = array(
'priority' => 2,
'message' => 'message-to-log',
'extra' => array(
'file' => 'test.php',
'line' => 1,
'trace' => array(
array(
'function' => 'Bar',
'class' => 'Foo',
'type' => '->',
'args' => array(
'baz',
),
),
),
),
);

$method = new ReflectionMethod($this->writer, 'eventIntoColumn');
$method->setAccessible(true);
$data = $method->invoke($this->writer, $event);

foreach ($data as $field => $value) {
$this->assertTrue(is_scalar($value), sprintf(
'Value of column "%s" should be scalar, %s given',
$field,
gettype($value)
));
}
}
}

0 comments on commit 271a434

Please sign in to comment.