Fix #61362: Exception::getTraceAsString and ::__toString scramble Unicode

The logic in smart_str_append_escaped() relies on unsigned values of c, so we
have to declare it as such.
This commit is contained in:
Christoph M. Becker 2015-06-17 16:56:04 +02:00 committed by Nikita Popov
parent 269acaa363
commit 653c869348
2 changed files with 24 additions and 1 deletions

23
Zend/tests/bug61362.phpt Normal file
View file

@ -0,0 +1,23 @@
--TEST--
Bug #61362 (Exception::getTraceAsString, Exception::__toString not able to handle unicode)
--FILE--
<?php
function test($arg){
throw new Exception();
}
try {
test('тест');
}
catch(Exception $e) {
echo $e->getTraceAsString(), "\n";
echo (string)$e;
}
?>
--EXPECTF--
#0 %s(%d): test('\xD1\x82\xD0\xB5\xD1\x81\xD1\x82')
#1 {main}
Exception in %s:%d
Stack trace:
#0 %s(%d): test('\xD1\x82\xD0\xB5\xD1\x81\xD1\x82')
#1 {main}

View file

@ -427,7 +427,7 @@ static void smart_str_append_escaped(smart_str *str, const char *s, size_t l) {
str->s->len += len;
for (i = 0; i < l; ++i) {
char c = s[i];
unsigned char c = s[i];
if (c < 32 || c == '\\' || c > 126) {
*res++ = '\\';
switch (c) {