Because of my patch last week that converted the various virStorage*FromString and virStorage*ToString implementations to the generic VIR_ENUM_IMPL, there were a couple of places that didn't properly set errors when they failed. This patch fixes these places up. It also adds an additional check in virEnumFromString(), so that if a NULL type is passed in, it fails instead of SEGV'ing. Signed-off-by: Chris Lalancette <clalance@xxxxxxxxxx>
diff -up ./src/storage_conf.c.p1 ./src/storage_conf.c --- ./src/storage_conf.c.p1 2008-10-21 14:48:10.000000000 +0200 +++ ./src/storage_conf.c 2008-10-21 14:56:59.000000000 +0200 @@ -276,6 +276,8 @@ virStoragePoolDefParseDoc(virConnectPtr if (options->formatFromString) { char *format = virXPathString(conn, "string(/pool/source/format/@type)", ctxt); if ((ret->source.format = (options->formatFromString)(format)) < 0) { + virStorageReportError(conn, VIR_ERR_XML_ERROR, + _("unknown pool format type %s"), format); VIR_FREE(format); goto cleanup; } @@ -521,8 +526,12 @@ virStoragePoolDefFormat(virConnectPtr co if (options->formatToString) { const char *format = (options->formatToString)(def->source.format); - if (!format) + if (!format) { + virStorageReportError(conn, VIR_ERR_INTERNAL_ERROR, + _("unknown pool format number %d"), + def->source.format); goto cleanup; + } virBufferVSprintf(&buf," <format type='%s'/>\n", format); } @@ -751,6 +760,8 @@ virStorageVolDefParseDoc(virConnectPtr c if (options->formatFromString) { char *format = virXPathString(conn, "string(/volume/target/format/@type)", ctxt); if ((ret->target.format = (options->formatFromString)(format)) < 0) { + virStorageReportError(conn, VIR_ERR_XML_ERROR, + _("unknown volume format type %s"), format); VIR_FREE(format); goto cleanup; } @@ -885,8 +896,12 @@ virStorageVolDefFormat(virConnectPtr con if (options->formatToString) { const char *format = (options->formatToString)(def->target.format); - if (!format) + if (!format) { + virStorageReportError(conn, VIR_ERR_INTERNAL_ERROR, + _("unknown volume format number %d"), + def->target.format); goto cleanup; + } virBufferVSprintf(&buf," <format type='%s'/>\n", format); } diff -up ./src/util.c.p1 ./src/util.c --- ./src/util.c.p1 2008-10-21 14:59:37.000000000 +0200 +++ ./src/util.c 2008-10-21 15:00:07.000000000 +0200 @@ -1018,6 +1018,10 @@ int virEnumFromString(const char *const* const char *type) { unsigned int i; + + if (type == NULL) + return -1; + for (i = 0 ; i < ntypes ; i++) if (STREQ(types[i], type)) return i;
-- Libvir-list mailing list Libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list