Validate the bios_date format for <sysinfo>

Add incorrectly formatted bios_date validation test
This commit is contained in:
John Ferlan 2013-04-26 08:33:26 -04:00
parent 14b3cac5bc
commit 21540f5ee3
3 changed files with 47 additions and 0 deletions

View File

@ -8465,6 +8465,29 @@ virSysinfoParseXML(const xmlNodePtr node,
virXPathString("string(bios/entry[@name='version'])", ctxt); virXPathString("string(bios/entry[@name='version'])", ctxt);
def->bios_date = def->bios_date =
virXPathString("string(bios/entry[@name='date'])", ctxt); virXPathString("string(bios/entry[@name='date'])", ctxt);
if (def->bios_date != NULL) {
char *ptr;
int month, day, year;
/* Validate just the format of the date
* Expect mm/dd/yyyy or mm/dd/yy,
* where yy must be 00->99 and would be assumed to be 19xx
* a yyyy date should be 1900 and beyond
*/
if (virStrToLong_i(def->bios_date, &ptr, 10, &month) < 0 ||
*ptr != '/' ||
virStrToLong_i(ptr + 1, &ptr, 10, &day) < 0 ||
*ptr != '/' ||
virStrToLong_i(ptr + 1, &ptr, 10, &year) < 0 ||
*ptr != '\0' ||
(month < 1 || month > 12) ||
(day < 1 || day > 31) ||
(year < 0 || (year >= 100 && year < 1900))) {
virReportError(VIR_ERR_XML_DETAIL, "%s",
_("Invalid BIOS 'date' format"));
goto error;
}
}
def->bios_release = def->bios_release =
virXPathString("string(bios/entry[@name='release'])", ctxt); virXPathString("string(bios/entry[@name='release'])", ctxt);

View File

@ -0,0 +1,23 @@
<domain type='qemu'>
<name>smbios</name>
<uuid>362d1fc1-df7d-193e-5c18-49a71bd1da66</uuid>
<memory unit='KiB'>1048576</memory>
<currentMemory unit='KiB'>1048576</currentMemory>
<vcpu placement='static'>1</vcpu>
<os>
<type arch='i686' machine='pc'>hvm</type>
<smbios mode="sysinfo"/>
</os>
<sysinfo type="smbios">
<bios>
<entry name="date">999/999/123</entry>
</bios>
</sysinfo>
<clock offset='utc'/>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>restart</on_crash>
<devices>
<emulator>/usr/bin/qemu</emulator>
</devices>
</domain>

View File

@ -825,6 +825,7 @@ mymain(void)
DO_TEST("smbios", QEMU_CAPS_SMBIOS_TYPE); DO_TEST("smbios", QEMU_CAPS_SMBIOS_TYPE);
DO_TEST_PARSE_ERROR("smbios-date", QEMU_CAPS_SMBIOS_TYPE);
DO_TEST("watchdog", NONE); DO_TEST("watchdog", NONE);
DO_TEST("watchdog-device", QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG); DO_TEST("watchdog-device", QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);