mirror of
https://github.com/genodelabs/genode.git
synced 2025-02-21 18:06:50 +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) {
|
if (dst) {
|
||||||
node(name, func);
|
node(name, func);
|
||||||
_out_buffer.append('\n');
|
_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}
|
grep_output {^\[init -> test-xml_generator}
|
||||||
|
|
||||||
compare_output_to {
|
compare_output_to {
|
||||||
[init -> test-xml_generator] --- XML generator test started ---
|
[init -> test-xml_generator] --- XML generator test started ---
|
||||||
[init -> test-xml_generator] result:
|
[init -> test-xml_generator]
|
||||||
[init -> test-xml_generator]
|
[init -> test-xml_generator] used 308 bytes, result:
|
||||||
[init -> test-xml_generator] <config xpos="27" ypos="34">
|
[init -> test-xml_generator]
|
||||||
[init -> test-xml_generator] <box width="320" height="240"/>
|
[init -> test-xml_generator] <config xpos="27" ypos="34">
|
||||||
[init -> test-xml_generator] <label name="a test">
|
[init -> test-xml_generator] <box width="320" height="240"/>
|
||||||
[init -> test-xml_generator] <sub_label/>
|
[init -> test-xml_generator] <label name="a test">
|
||||||
[init -> test-xml_generator] <another_sub_label>
|
[init -> test-xml_generator] <sub_label/>
|
||||||
[init -> test-xml_generator] <sub_sub_label/>
|
[init -> test-xml_generator] <another_sub_label>
|
||||||
[init -> test-xml_generator] </another_sub_label>
|
[init -> test-xml_generator] <sub_sub_label/>
|
||||||
[init -> test-xml_generator] </label>
|
[init -> test-xml_generator] </another_sub_label>
|
||||||
[init -> test-xml_generator] <bool true="true" false="false"/>
|
[init -> test-xml_generator] </label>
|
||||||
[init -> test-xml_generator] <signed int="-1" long="-2" longlong="-3"/>
|
[init -> test-xml_generator] <bool true="true" false="false"/>
|
||||||
[init -> test-xml_generator] <unsigned int="1" long="2" longlong="3"/>
|
[init -> test-xml_generator] <signed int="-1" long="-2" longlong="-3"/>
|
||||||
[init -> test-xml_generator] </config>
|
[init -> test-xml_generator] <unsigned int="1" long="2" longlong="3"/>
|
||||||
[init -> test-xml_generator]
|
[init -> test-xml_generator] </config>
|
||||||
[init -> test-xml_generator] used 307 bytes
|
[init -> test-xml_generator]
|
||||||
[init -> test-xml_generator] buffer exceeded (expected error)
|
[init -> test-xml_generator] buffer exceeded (expected error)
|
||||||
[init -> test-xml_generator]
|
[init -> test-xml_generator]
|
||||||
[init -> test-xml_generator] exception on level3 (expected exception value=10)
|
[init -> test-xml_generator] exception with value 10 on level 4 (expected error)
|
||||||
[init -> test-xml_generator] exception on level3 (expected exception value=11)
|
[init -> test-xml_generator] exception with value 20 on level 8 (expected error)
|
||||||
[init -> test-xml_generator] exception on level3 (expected exception value=12)
|
[init -> test-xml_generator] exception with value 30 on level 4 (expected error)
|
||||||
[init -> test-xml_generator]
|
[init -> test-xml_generator] exception with value 11 on level 4 (expected error)
|
||||||
[init -> test-xml_generator] used 180 bytes, result:
|
[init -> test-xml_generator] exception with value 21 on level 8 (expected error)
|
||||||
[init -> test-xml_generator]
|
[init -> test-xml_generator] exception with value 31 on level 4 (expected error)
|
||||||
[init -> test-xml_generator] <config>
|
[init -> test-xml_generator] exception with value 12 on level 4 (expected error)
|
||||||
[init -> test-xml_generator] <level1>
|
[init -> test-xml_generator] exception with value 22 on level 8 (expected error)
|
||||||
[init -> test-xml_generator] <level2>
|
[init -> test-xml_generator] exception with value 32 on level 4 (expected error)
|
||||||
[init -> test-xml_generator] <level3>
|
[init -> test-xml_generator] exception with value 40 on level 2 (expected error)
|
||||||
[init -> test-xml_generator] <level4/>
|
[init -> test-xml_generator]
|
||||||
[init -> test-xml_generator] </level3>
|
[init -> test-xml_generator] used 419 bytes, result:
|
||||||
[init -> test-xml_generator] <level3>
|
[init -> test-xml_generator]
|
||||||
[init -> test-xml_generator] <level4/>
|
[init -> test-xml_generator] <config>
|
||||||
[init -> test-xml_generator] </level3>
|
[init -> test-xml_generator] <level1>
|
||||||
[init -> test-xml_generator] <level3>
|
[init -> test-xml_generator] <level2 attr1="2271560481">
|
||||||
[init -> test-xml_generator] <level4/>
|
[init -> test-xml_generator] <level3 attr1="Hallo" attr2="123000">
|
||||||
[init -> test-xml_generator] </level3>
|
[init -> test-xml_generator] <level4_1 attr1="true" attr2="Welt"/>
|
||||||
[init -> test-xml_generator] </level2>
|
[init -> test-xml_generator] <level4_2/>
|
||||||
[init -> test-xml_generator] </level1>
|
[init -> test-xml_generator] </level3>
|
||||||
[init -> test-xml_generator] </config>
|
[init -> test-xml_generator] <level3 attr1="Hallo" attr2="123001">
|
||||||
[init -> test-xml_generator]
|
[init -> test-xml_generator] <level4_1 attr1="true" attr2="Welt"/>
|
||||||
[init -> test-xml_generator] --- XML generator test finished ---
|
[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.node("level2", [&] ()
|
||||||
{
|
{
|
||||||
|
xml.attribute("attr1", 0x87654321ULL);
|
||||||
for (unsigned i=0; i < 3; i++) {
|
for (unsigned i=0; i < 3; i++) {
|
||||||
try {
|
try {
|
||||||
xml.node("level3_exception", [&] ()
|
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) {
|
} 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("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();
|
return xml.used();
|
||||||
@ -105,7 +173,7 @@ void Component::construct(Genode::Env &env)
|
|||||||
* corresponding run script).
|
* corresponding run script).
|
||||||
*/
|
*/
|
||||||
size_t used = fill_buffer_with_xml(dst, sizeof(dst));
|
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
|
* Test buffer overflow
|
||||||
|
Loading…
x
Reference in New Issue
Block a user