mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-10-30 01:43:23 +00:00
Validate the bios_date format for <sysinfo>
Add incorrectly formatted bios_date validation test
This commit is contained in:
parent
14b3cac5bc
commit
21540f5ee3
@ -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);
|
||||||
|
|
||||||
|
23
tests/qemuxml2argvdata/qemuxml2argv-smbios-date.xml
Normal file
23
tests/qemuxml2argvdata/qemuxml2argv-smbios-date.xml
Normal 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>
|
@ -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);
|
||||||
|
Loading…
Reference in New Issue
Block a user