Add incorrectly formatted bios_date validation test
---
src/conf/domain_conf.c | 24 ++++++++++++++++++++++
.../qemuxml2argvdata/qemuxml2argv-smbios-date.xml | 23 +++++++++++++++++++++
tests/qemuxml2argvtest.c | 1 +
3 files changed, 48 insertions(+)
create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-smbios-date.xml
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 862b997..d352055 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -8437,6 +8437,30 @@ virSysinfoParseXML(const xmlNodePtr node,
virXPathString("string(bios/entry[@name='version'])", ctxt);
def->bios_date =
virXPathString("string(bios/entry[@name='date'])", ctxt);
+ if (def->bios_date != NULL) {
+ char *ptr;
+ struct tm tm;
+ memset(&tm, 0, sizeof(tm));
+
+ /* 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, &tm.tm_mon) < 0 ||
+ *ptr != '/' ||
+ virStrToLong_i(ptr+1, &ptr, 10, &tm.tm_mday) < 0 ||
+ *ptr != '/' ||
+ virStrToLong_i(ptr+1, &ptr, 10, &tm.tm_year) < 0 ||
+ *ptr != '\0' ||
+ (tm.tm_mon < 0 || tm.tm_mon > 12) ||
+ (tm.tm_mday < 0 || tm.tm_mday > 31) ||
+ (tm.tm_year < 0 || (tm.tm_year >= 100 && tm.tm_year <
1900))) {
+ virReportError(VIR_ERR_XML_DETAIL, "%s",
+ _("Invalid BIOS 'date' format"));
+ goto error;
+ }
+ }
def->bios_release =
virXPathString("string(bios/entry[@name='release'])", ctxt);
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-smbios-date.xml
b/tests/qemuxml2argvdata/qemuxml2argv-smbios-date.xml
new file mode 100644
index 0000000..7b2f33a
--- /dev/null
+++ b/tests/qemuxml2argvdata/qemuxml2argv-smbios-date.xml
@@ -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>
diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
index 98ceb83..0100937 100644
--- a/tests/qemuxml2argvtest.c
+++ b/tests/qemuxml2argvtest.c
@@ -815,6 +815,7 @@ mymain(void)
DO_TEST("smbios", QEMU_CAPS_SMBIOS_TYPE);
+ DO_TEST_PARSE_ERROR("smbios-date", QEMU_CAPS_SMBIOS_TYPE);
DO_TEST("watchdog", NONE);
DO_TEST("watchdog-device", QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
--
1.8.1.4