Skip to content

Commit 0b32965

Browse files
author
Kenji Fukuda
committed
[MERGE #5505 @kfukuda2] Fix Jshost printing of strings with embedded null characters. Fixes OS#16538950
Merge pull request #5505 from kfukuda2:nullPrintFix
2 parents 21a3963 + 34d9537 commit 0b32965

File tree

4 files changed

+8
-126
lines changed

4 files changed

+8
-126
lines changed

lib/Runtime/Base/FunctionBody.cpp

+8-4
Original file line numberDiff line numberDiff line change
@@ -4551,13 +4551,17 @@ namespace Js
45514551
}
45524552
Output::Print(_u("\n\n Line %3d: "), line + 1);
45534553
// Need to match up cchStartOffset to appropriate cbStartOffset given function's cbStartOffset and cchStartOffset
4554-
size_t i = utf8::CharacterIndexToByteIndex(source, sourceInfo->GetCbLength(), cchStartOffset, this->m_cbStartOffset, this->m_cchStartOffset);
4554+
size_t utf8SrcStartIdx = utf8::CharacterIndexToByteIndex(source, sourceInfo->GetCbLength(), cchStartOffset, this->m_cbStartOffset, this->m_cchStartOffset);
45554555

4556-
size_t lastOffset = StartOffset() + LengthInBytes();
4557-
for (;i < lastOffset && source[i] != '\n' && source[i] != '\r'; i++)
4556+
size_t utf8SrcEndIdx = StartOffset() + LengthInBytes();
4557+
char16* utf16Buf = HeapNewArray(char16, utf8SrcEndIdx - utf8SrcStartIdx + 2);
4558+
size_t utf16BufSz = utf8::DecodeUnitsIntoAndNullTerminateNoAdvance(utf16Buf, source + utf8SrcStartIdx, source + utf8SrcEndIdx, utf8::DecodeOptions::doDefault);
4559+
Assert(utf16BufSz <= utf8SrcEndIdx - utf8SrcStartIdx);
4560+
for (size_t i = 0; i < utf16BufSz && utf16Buf[i] != _u('\n') && utf16Buf[i] != _u('\r'); i++)
45584561
{
4559-
Output::Print(_u("%C"), source[i]);
4562+
Output::Print(_u("%lc"), utf16Buf[i]);
45604563
}
4564+
HeapDeleteArray(utf8SrcEndIdx - utf8SrcStartIdx + 2, utf16Buf);
45614565
Output::Print(_u("\n"));
45624566
Output::Print(_u(" Col %4d:%s^\n"), col + 1, ((col+1)<10000) ? _u(" ") : _u(""));
45634567

test/es5/hasItem.jshost.baseline

-110
This file was deleted.

test/es5/rlexe.xml

-10
Original file line numberDiff line numberDiff line change
@@ -185,16 +185,6 @@
185185
<default>
186186
<files>hasItem.js</files>
187187
<baseline>hasItem.baseline</baseline>
188-
<!-- Bug 16538950: jshost - adapt the ch change to support printing strings with U+0000 (NULL) -->
189-
<tags>exclude_jshost</tags>
190-
</default>
191-
</test>
192-
<test>
193-
<default>
194-
<files>hasItem.js</files>
195-
<baseline>hasItem.jshost.baseline</baseline>
196-
<!-- Bug 16538950: jshost - adapt the ch change to support printing strings with U+0000 (NULL) -->
197-
<tags>exclude_ch</tags>
198188
</default>
199189
</test>
200190
<test>

test/utf8/rlexe.xml

-2
Original file line numberDiff line numberDiff line change
@@ -45,14 +45,12 @@
4545
<default>
4646
<files>utf8_console_log.js</files>
4747
<baseline>utf8_console_log.baseline</baseline>
48-
<tags>exclude_jshost</tags>
4948
</default>
5049
</test>
5150
<test>
5251
<default>
5352
<files>utf8_console_log_null_embedded.js</files>
5453
<baseline>utf8_console_log_null_embedded.baseline</baseline>
55-
<tags>exclude_jshost</tags>
5654
</default>
5755
</test>
5856
</regress-exe>

0 commit comments

Comments
 (0)