mirror of
https://github.com/php/php-src.git
synced 2025-08-16 05:58:45 +02:00
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:
parent
269acaa363
commit
653c869348
2 changed files with 24 additions and 1 deletions
23
Zend/tests/bug61362.phpt
Normal file
23
Zend/tests/bug61362.phpt
Normal 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}
|
|
@ -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) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue