mirror of
https://github.com/catchorg/Catch2.git
synced 2024-11-21 21:06:11 +01:00
Fixed GitHub Issue #70
Interleave XML entities are now encoded correctly
This commit is contained in:
parent
a162e22fa3
commit
0b09d1c089
3
.gitignore
vendored
3
.gitignore
vendored
@ -8,4 +8,5 @@ Release
|
||||
*.user
|
||||
*.xcuserstate
|
||||
.DS_Store
|
||||
xcuserdata
|
||||
xcuserdata
|
||||
CatchSelfTest.xcscheme
|
@ -294,32 +294,30 @@ namespace Catch
|
||||
const std::string& text
|
||||
)
|
||||
{
|
||||
// !TBD finish this
|
||||
if( !findReplaceableString( text, "<", "<" ) &&
|
||||
!findReplaceableString( text, "&", "&" ) &&
|
||||
!findReplaceableString( text, "\"", """ ) )
|
||||
static const char* charsToEncode = "<&\"";
|
||||
std::string mtext = text;
|
||||
std::string::size_type pos = mtext.find_first_of( charsToEncode );
|
||||
while( pos != std::string::npos )
|
||||
{
|
||||
stream() << text;
|
||||
stream() << mtext.substr( 0, pos );
|
||||
|
||||
switch( mtext[pos] )
|
||||
{
|
||||
case '<':
|
||||
stream() << "<";
|
||||
break;
|
||||
case '&':
|
||||
stream() << "&";
|
||||
break;
|
||||
case '\"':
|
||||
stream() << """;
|
||||
break;
|
||||
}
|
||||
mtext = mtext.substr( pos+1 );
|
||||
pos = mtext.find_first_of( charsToEncode );
|
||||
}
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
bool findReplaceableString
|
||||
(
|
||||
const std::string& text,
|
||||
const std::string& replaceWhat,
|
||||
const std::string& replaceWith
|
||||
)
|
||||
{
|
||||
std::string::size_type pos = text.find_first_of( replaceWhat );
|
||||
if( pos != std::string::npos )
|
||||
{
|
||||
stream() << text.substr( 0, pos ) << replaceWith;
|
||||
writeEncodedText( text.substr( pos+1 ) );
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
stream() << mtext;
|
||||
}
|
||||
|
||||
bool m_tagIsOpen;
|
||||
bool m_needsNewline;
|
||||
|
@ -157,3 +157,15 @@ TEST_CASE( "./failing/checkedelse", "" )
|
||||
{
|
||||
REQUIRE( testCheckedElse( false ) );
|
||||
}
|
||||
|
||||
TEST_CASE( "./misc/xmlentitycheck", "" )
|
||||
{
|
||||
SECTION( "embedded xml", "<test>it should be possible to embed xml characters, such as <, \" or &, or even whole <xml>documents</xml> within an attribute</test>" )
|
||||
{
|
||||
// No test
|
||||
}
|
||||
SECTION( "encoded chars", "these should all be encoded: &&&\"\"\"<<<&\"<<&\"" )
|
||||
{
|
||||
// No test
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user