mirror of
https://github.com/genodelabs/genode.git
synced 2025-02-20 17:52:52 +00:00
Xml_generator: fix and test missing '\0'
Ensure that a '\0' always appears at the end of the ouput of the XML generator. Previously, exceptions during the Node(...) constructor might have prevented this. This commit also extends the xml_generator test to drive a harder test on exceptions in the Xml_generator. Issue #2953
This commit is contained in:
parent
85d589a49c
commit
364f69edad
@ -329,6 +329,7 @@ class Genode::Xml_generator
|
||||
if (dst) {
|
||||
node(name, func);
|
||||
_out_buffer.append('\n');
|
||||
_out_buffer.append('\0');
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -30,46 +30,56 @@ run_genode_until "--- XML generator test finished ---.*\n" 30
|
||||
grep_output {^\[init -> test-xml_generator}
|
||||
|
||||
compare_output_to {
|
||||
[init -> test-xml_generator] --- XML generator test started ---
|
||||
[init -> test-xml_generator] result:
|
||||
[init -> test-xml_generator]
|
||||
[init -> test-xml_generator] <config xpos="27" ypos="34">
|
||||
[init -> test-xml_generator] <box width="320" height="240"/>
|
||||
[init -> test-xml_generator] <label name="a test">
|
||||
[init -> test-xml_generator] <sub_label/>
|
||||
[init -> test-xml_generator] <another_sub_label>
|
||||
[init -> test-xml_generator] <sub_sub_label/>
|
||||
[init -> test-xml_generator] </another_sub_label>
|
||||
[init -> test-xml_generator] </label>
|
||||
[init -> test-xml_generator] <bool true="true" false="false"/>
|
||||
[init -> test-xml_generator] <signed int="-1" long="-2" longlong="-3"/>
|
||||
[init -> test-xml_generator] <unsigned int="1" long="2" longlong="3"/>
|
||||
[init -> test-xml_generator] </config>
|
||||
[init -> test-xml_generator]
|
||||
[init -> test-xml_generator] used 307 bytes
|
||||
[init -> test-xml_generator] buffer exceeded (expected error)
|
||||
[init -> test-xml_generator]
|
||||
[init -> test-xml_generator] exception on level3 (expected exception value=10)
|
||||
[init -> test-xml_generator] exception on level3 (expected exception value=11)
|
||||
[init -> test-xml_generator] exception on level3 (expected exception value=12)
|
||||
[init -> test-xml_generator]
|
||||
[init -> test-xml_generator] used 180 bytes, result:
|
||||
[init -> test-xml_generator]
|
||||
[init -> test-xml_generator] <config>
|
||||
[init -> test-xml_generator] <level1>
|
||||
[init -> test-xml_generator] <level2>
|
||||
[init -> test-xml_generator] <level3>
|
||||
[init -> test-xml_generator] <level4/>
|
||||
[init -> test-xml_generator] </level3>
|
||||
[init -> test-xml_generator] <level3>
|
||||
[init -> test-xml_generator] <level4/>
|
||||
[init -> test-xml_generator] </level3>
|
||||
[init -> test-xml_generator] <level3>
|
||||
[init -> test-xml_generator] <level4/>
|
||||
[init -> test-xml_generator] </level3>
|
||||
[init -> test-xml_generator] </level2>
|
||||
[init -> test-xml_generator] </level1>
|
||||
[init -> test-xml_generator] </config>
|
||||
[init -> test-xml_generator]
|
||||
[init -> test-xml_generator] --- XML generator test finished ---
|
||||
[init -> test-xml_generator] --- XML generator test started ---
|
||||
[init -> test-xml_generator]
|
||||
[init -> test-xml_generator] used 308 bytes, result:
|
||||
[init -> test-xml_generator]
|
||||
[init -> test-xml_generator] <config xpos="27" ypos="34">
|
||||
[init -> test-xml_generator] <box width="320" height="240"/>
|
||||
[init -> test-xml_generator] <label name="a test">
|
||||
[init -> test-xml_generator] <sub_label/>
|
||||
[init -> test-xml_generator] <another_sub_label>
|
||||
[init -> test-xml_generator] <sub_sub_label/>
|
||||
[init -> test-xml_generator] </another_sub_label>
|
||||
[init -> test-xml_generator] </label>
|
||||
[init -> test-xml_generator] <bool true="true" false="false"/>
|
||||
[init -> test-xml_generator] <signed int="-1" long="-2" longlong="-3"/>
|
||||
[init -> test-xml_generator] <unsigned int="1" long="2" longlong="3"/>
|
||||
[init -> test-xml_generator] </config>
|
||||
[init -> test-xml_generator]
|
||||
[init -> test-xml_generator] buffer exceeded (expected error)
|
||||
[init -> test-xml_generator]
|
||||
[init -> test-xml_generator] exception with value 10 on level 4 (expected error)
|
||||
[init -> test-xml_generator] exception with value 20 on level 8 (expected error)
|
||||
[init -> test-xml_generator] exception with value 30 on level 4 (expected error)
|
||||
[init -> test-xml_generator] exception with value 11 on level 4 (expected error)
|
||||
[init -> test-xml_generator] exception with value 21 on level 8 (expected error)
|
||||
[init -> test-xml_generator] exception with value 31 on level 4 (expected error)
|
||||
[init -> test-xml_generator] exception with value 12 on level 4 (expected error)
|
||||
[init -> test-xml_generator] exception with value 22 on level 8 (expected error)
|
||||
[init -> test-xml_generator] exception with value 32 on level 4 (expected error)
|
||||
[init -> test-xml_generator] exception with value 40 on level 2 (expected error)
|
||||
[init -> test-xml_generator]
|
||||
[init -> test-xml_generator] used 419 bytes, result:
|
||||
[init -> test-xml_generator]
|
||||
[init -> test-xml_generator] <config>
|
||||
[init -> test-xml_generator] <level1>
|
||||
[init -> test-xml_generator] <level2 attr1="2271560481">
|
||||
[init -> test-xml_generator] <level3 attr1="Hallo" attr2="123000">
|
||||
[init -> test-xml_generator] <level4_1 attr1="true" attr2="Welt"/>
|
||||
[init -> test-xml_generator] <level4_2/>
|
||||
[init -> test-xml_generator] </level3>
|
||||
[init -> test-xml_generator] <level3 attr1="Hallo" attr2="123001">
|
||||
[init -> test-xml_generator] <level4_1 attr1="true" attr2="Welt"/>
|
||||
[init -> test-xml_generator] <level4_2/>
|
||||
[init -> test-xml_generator] </level3>
|
||||
[init -> test-xml_generator] <level3 attr1="Hallo" attr2="123002">
|
||||
[init -> test-xml_generator] <level4_1 attr1="true" attr2="Welt"/>
|
||||
[init -> test-xml_generator] <level4_2/>
|
||||
[init -> test-xml_generator] </level3>
|
||||
[init -> test-xml_generator] </level2>
|
||||
[init -> test-xml_generator] </level1>
|
||||
[init -> test-xml_generator] </config>
|
||||
[init -> test-xml_generator]
|
||||
[init -> test-xml_generator] --- XML generator test finished ---
|
||||
}
|
||||
|
@ -71,21 +71,89 @@ static size_t xml_with_exceptions(char *dst, size_t dst_len)
|
||||
{
|
||||
xml.node("level2", [&] ()
|
||||
{
|
||||
xml.attribute("attr1", 0x87654321ULL);
|
||||
for (unsigned i=0; i < 3; i++) {
|
||||
try {
|
||||
xml.node("level3_exception", [&] ()
|
||||
{
|
||||
throw 10 + i;
|
||||
xml.attribute("attr1", 1234);
|
||||
xml.attribute("attr2", 4321);
|
||||
xml.attribute("attr3", 2143);
|
||||
xml.node("level4_exception", [&] ()
|
||||
{
|
||||
xml.attribute("attr1", "Hallo");
|
||||
xml.node("level5_exception_1", [&] ()
|
||||
{
|
||||
xml.attribute("attr1", true);
|
||||
xml.attribute("attr2", false);
|
||||
});
|
||||
xml.node("level5_exception_2", [&] () { });
|
||||
throw 10 + i;
|
||||
});
|
||||
});
|
||||
} catch (unsigned error) {
|
||||
Genode::log("exception on level3 (expected exception value=", error, ")");
|
||||
Genode::log("exception with value ", error, " on level 4 (expected error)");
|
||||
}
|
||||
xml.node("level3", [&] ()
|
||||
{
|
||||
xml.node("level4", [&] () { });
|
||||
xml.attribute("attr1", "Hallo");
|
||||
xml.attribute("attr2", 123000 + i);
|
||||
xml.node("level4_1", [&] () {
|
||||
xml.attribute("attr1", true);
|
||||
xml.attribute("attr2", "Welt");
|
||||
});
|
||||
try {
|
||||
xml.node("level4_exception", [&] ()
|
||||
{
|
||||
xml.attribute("attr1", "Welt");
|
||||
xml.attribute("attr2", 2143);
|
||||
xml.attribute("attr3", false);
|
||||
xml.attribute("attr3", 0x12345678ULL);
|
||||
xml.node("level5_exception_1", [&] () { });
|
||||
xml.node("level5_exception_2", [&] () { });
|
||||
xml.node("level5_exception_3", [&] ()
|
||||
{
|
||||
xml.node("level6_exception", [&] ()
|
||||
{
|
||||
xml.attribute("attr1", 0x12345678ULL);
|
||||
xml.node("level7_exception_3", [&] ()
|
||||
{
|
||||
xml.node("level8_exception_1", [&] () { });
|
||||
xml.node("level8_exception_2", [&] () { });
|
||||
xml.node("level8_exception_3", [&] () { });
|
||||
xml.node("level8_exception_4", [&] ()
|
||||
{
|
||||
throw 20 + i;
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
} catch (unsigned error) {
|
||||
Genode::log("exception with value ", error, " on level 8 (expected error)");
|
||||
}
|
||||
xml.node("level4_2", [&] () { });
|
||||
try {
|
||||
xml.node("level4_exception", [&] ()
|
||||
{
|
||||
xml.attribute("attr1", "Welt");
|
||||
xml.attribute("attr2", 2143);
|
||||
throw 30 + i;
|
||||
});
|
||||
} catch (unsigned error) {
|
||||
Genode::log("exception with value ", error, " on level 4 (expected error)");
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
try {
|
||||
xml.node("level2_exception", [&] ()
|
||||
{
|
||||
throw 40;
|
||||
});
|
||||
} catch (int error) {
|
||||
Genode::log("exception with value ", error, " on level 2 (expected error)");
|
||||
}
|
||||
});
|
||||
});
|
||||
return xml.used();
|
||||
@ -105,7 +173,7 @@ void Component::construct(Genode::Env &env)
|
||||
* corresponding run script).
|
||||
*/
|
||||
size_t used = fill_buffer_with_xml(dst, sizeof(dst));
|
||||
log("result:\n\n", Cstring(dst), "\nused ", used, " bytes");
|
||||
log("\nused ", used, " bytes, result:\n\n", Cstring(dst));
|
||||
|
||||
/*
|
||||
* Test buffer overflow
|
||||
|
Loading…
x
Reference in New Issue
Block a user