1
0
mirror of https://github.com/Seldaek/monolog.git synced 2025-08-05 12:47:39 +02:00

Add name length check to the HipChatHandler

As explained in its docblock, the validation function will fall back to
a simple strlen check if mb_strlen is not available. However, that very
specific case is not one that was deemed important to support, as anyone
using UTF-8 in their code, without having mbstring available will
probably have bigger problems to worry about.

Fixes #289
This commit is contained in:
Milos Levacic
2013-12-24 21:15:02 +01:00
parent c9db00f882
commit 67a908796b
2 changed files with 39 additions and 0 deletions

View File

@@ -27,6 +27,11 @@ use Monolog\Logger;
*/ */
class HipChatHandler extends SocketHandler class HipChatHandler extends SocketHandler
{ {
/**
* The maximum allowed length for the name used in the "from" field.
*/
const MAXIMUM_NAME_LENGTH = 15;
/** /**
* @var string * @var string
*/ */
@@ -58,6 +63,10 @@ class HipChatHandler extends SocketHandler
*/ */
public function __construct($token, $room, $name = 'Monolog', $notify = false, $level = Logger::CRITICAL, $bubble = true, $useSSL = true) public function __construct($token, $room, $name = 'Monolog', $notify = false, $level = Logger::CRITICAL, $bubble = true, $useSSL = true)
{ {
if (!$this->validateName($name)) {
throw new \InvalidArgumentException('The supplied name is too long. HipChat\'s v1 API supports names up to 15 UTF-8 characters.');
}
$connectionString = $useSSL ? 'ssl://api.hipchat.com:443' : 'api.hipchat.com:80'; $connectionString = $useSSL ? 'ssl://api.hipchat.com:443' : 'api.hipchat.com:80';
parent::__construct($connectionString, $level, $bubble); parent::__construct($connectionString, $level, $bubble);
@@ -216,4 +225,26 @@ class HipChatHandler extends SocketHandler
return $batchRecord; return $batchRecord;
} }
/**
* Validates the supplied name for the "from" field.
*
* If the `mb_strlen()` function is available, it will use that, as HipChat
* allows UTF-8 characters. Otherwise, it will fall back to `strlen()`.
*
* Note that this might cause false failures in the specific case of using
* a valid name with less than 16 characters, but 16 or more bytes, on a
* system where `mb_strlen()` is unavailable.
*
* @param string $name Name to validate
* @return Boolean
*/
private function validateName($name)
{
if (function_exists('mb_strlen')) {
return (mb_strlen($name) <= static::MAXIMUM_NAME_LENGTH);
}
return (strlen($name) <= static::MAXIMUM_NAME_LENGTH);
}
} }

View File

@@ -156,4 +156,12 @@ class HipChatHandlerTest extends TestCase
$this->handler->setFormatter($this->getIdentityFormatter()); $this->handler->setFormatter($this->getIdentityFormatter());
} }
/**
* @expectedException InvalidArgumentException
*/
public function testCreateWithTooLongName()
{
$hipChatHandler = new \Monolog\Handler\HipChatHandler('token', 'room', 'SixteenCharsHere');
}
} }