[libvirt] [PATCH v2 02/14] util: handle missing switch enum cases

Daniel P. Berrangé posted 14 patches 7 years, 2 months ago
[libvirt] [PATCH v2 02/14] util: handle missing switch enum cases
Posted by Daniel P. Berrangé 7 years, 2 months ago
Ensure all enum cases are listed in switch statements.

Reviewed-by: John Ferlan <jferlan@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
---
 src/util/virconf.c               | 11 ++++++++++-
 src/util/virfirewall.c           |  6 ++++--
 src/util/virlog.c                |  9 ++++++++-
 src/util/virnetdevvportprofile.c | 10 +++++++++-
 4 files changed, 31 insertions(+), 5 deletions(-)

diff --git a/src/util/virconf.c b/src/util/virconf.c
index a82a509ca3..e0a3fd12c0 100644
--- a/src/util/virconf.c
+++ b/src/util/virconf.c
@@ -296,7 +296,9 @@ virConfSaveValue(virBufferPtr buf, virConfValuePtr val)
             virBufferAddLit(buf, " ]");
             break;
         }
+        case VIR_CONF_LAST:
         default:
+            virReportEnumRangeError(virConfType, val->type);
             return -1;
     }
     return 0;
@@ -986,13 +988,20 @@ int virConfGetValueStringList(virConfPtr conf,
         }
         ATTRIBUTE_FALLTHROUGH;
 
-    default:
+    case VIR_CONF_LLONG:
+    case VIR_CONF_ULLONG:
+    case VIR_CONF_NONE:
         virReportError(VIR_ERR_INTERNAL_ERROR,
                        compatString ?
                        _("%s: expected a string or string list for '%s' parameter") :
                        _("%s: expected a string list for '%s' parameter"),
                        conf->filename, setting);
         return -1;
+
+    case VIR_CONF_LAST:
+    default:
+        virReportEnumRangeError(virConfType, cval->type);
+        return -1;
     }
 
     return 1;
diff --git a/src/util/virfirewall.c b/src/util/virfirewall.c
index ff1bb83073..10c370a2ae 100644
--- a/src/util/virfirewall.c
+++ b/src/util/virfirewall.c
@@ -827,9 +827,11 @@ virFirewallApplyRule(virFirewallPtr firewall,
         if (virFirewallApplyRuleFirewallD(rule, ignoreErrors, &output) < 0)
             return -1;
         break;
+
+    case VIR_FIREWALL_BACKEND_AUTOMATIC:
+    case VIR_FIREWALL_BACKEND_LAST:
     default:
-        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
-                       _("Unexpected firewall engine backend"));
+        virReportEnumRangeError(virFirewallBackend, currentBackend);
         return -1;
     }
 
diff --git a/src/util/virlog.c b/src/util/virlog.c
index 4f66cc5e5c..6c6d7e8ded 100644
--- a/src/util/virlog.c
+++ b/src/util/virlog.c
@@ -1206,10 +1206,17 @@ virLogGetOutputs(void)
                                   virLogDestinationTypeToString(dest),
                                   virLogOutputs[i]->name);
                 break;
-            default:
+            case VIR_LOG_TO_STDERR:
+            case VIR_LOG_TO_JOURNALD:
                 virBufferAsprintf(&outputbuf, "%d:%s",
                                   virLogOutputs[i]->priority,
                                   virLogDestinationTypeToString(dest));
+                break;
+            case VIR_LOG_TO_OUTPUT_LAST:
+            default:
+                virReportEnumRangeError(virLogDestination, dest);
+                virLogUnlock();
+                return NULL;
         }
     }
     virLogUnlock();
diff --git a/src/util/virnetdevvportprofile.c b/src/util/virnetdevvportprofile.c
index db495a7549..dc774407df 100644
--- a/src/util/virnetdevvportprofile.c
+++ b/src/util/virnetdevvportprofile.c
@@ -1071,6 +1071,9 @@ virNetDevVPortProfileOp8021Qbg(const char *ifname,
     case VIR_NETDEV_VPORT_PROFILE_LINK_OP_PREASSOCIATE:
         op = PORT_REQUEST_PREASSOCIATE;
         break;
+    case VIR_NETDEV_VPORT_PROFILE_LINK_OP_PREASSOCIATE_RR:
+        op = PORT_REQUEST_PREASSOCIATE_RR;
+        break;
     case VIR_NETDEV_VPORT_PROFILE_LINK_OP_ASSOCIATE:
         op = PORT_REQUEST_ASSOCIATE;
         break;
@@ -1191,10 +1194,15 @@ virNetDevVPortProfileOp8021Qbh(const char *ifname,
                                            false);
         break;
 
-    default:
+    case VIR_NETDEV_VPORT_PROFILE_LINK_OP_PREASSOCIATE:
         virReportError(VIR_ERR_INTERNAL_ERROR,
                        _("operation type %d not supported"), virtPortOp);
         rc = -1;
+        break;
+    default:
+        virReportEnumRangeError(virNetDevVPortProfile, virtPortOp);
+        rc = -1;
+        break;
     }
 
  cleanup:
-- 
2.14.3

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH v2 02/14] util: handle missing switch enum cases
Posted by John Ferlan 7 years, 2 months ago

On 02/20/2018 12:08 PM, Daniel P. Berrangé wrote:
> Ensure all enum cases are listed in switch statements.
> 
> Reviewed-by: John Ferlan <jferlan@redhat.com>
> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
> ---
>  src/util/virconf.c               | 11 ++++++++++-
>  src/util/virfirewall.c           |  6 ++++--
>  src/util/virlog.c                |  9 ++++++++-
>  src/util/virnetdevvportprofile.c | 10 +++++++++-
>  4 files changed, 31 insertions(+), 5 deletions(-)
> 

[...]

> diff --git a/src/util/virlog.c b/src/util/virlog.c
> index 4f66cc5e5c..6c6d7e8ded 100644
> --- a/src/util/virlog.c
> +++ b/src/util/virlog.c
> @@ -1206,10 +1206,17 @@ virLogGetOutputs(void)
>                                    virLogDestinationTypeToString(dest),
>                                    virLogOutputs[i]->name);
>                  break;
> -            default:
> +            case VIR_LOG_TO_STDERR:
> +            case VIR_LOG_TO_JOURNALD:
>                  virBufferAsprintf(&outputbuf, "%d:%s",
>                                    virLogOutputs[i]->priority,
>                                    virLogDestinationTypeToString(dest));
> +                break;
> +            case VIR_LOG_TO_OUTPUT_LAST:
> +            default:
> +                virReportEnumRangeError(virLogDestination, dest);

Didn't see this before, but because this is a for loop, you'll need to
add a virBufferFreeAndReset(&outputbuf); before returning.


Existing R-b still applies

John

> +                virLogUnlock();
> +                return NULL;
>          }
>      }
>      virLogUnlock();

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH v2 02/14] util: handle missing switch enum cases
Posted by Daniel P. Berrangé 7 years, 2 months ago
On Tue, Feb 20, 2018 at 01:44:31PM -0500, John Ferlan wrote:
> 
> 
> On 02/20/2018 12:08 PM, Daniel P. Berrangé wrote:
> > Ensure all enum cases are listed in switch statements.
> > 
> > Reviewed-by: John Ferlan <jferlan@redhat.com>
> > Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
> > ---
> >  src/util/virconf.c               | 11 ++++++++++-
> >  src/util/virfirewall.c           |  6 ++++--
> >  src/util/virlog.c                |  9 ++++++++-
> >  src/util/virnetdevvportprofile.c | 10 +++++++++-
> >  4 files changed, 31 insertions(+), 5 deletions(-)
> > 
> 
> [...]
> 
> > diff --git a/src/util/virlog.c b/src/util/virlog.c
> > index 4f66cc5e5c..6c6d7e8ded 100644
> > --- a/src/util/virlog.c
> > +++ b/src/util/virlog.c
> > @@ -1206,10 +1206,17 @@ virLogGetOutputs(void)
> >                                    virLogDestinationTypeToString(dest),
> >                                    virLogOutputs[i]->name);
> >                  break;
> > -            default:
> > +            case VIR_LOG_TO_STDERR:
> > +            case VIR_LOG_TO_JOURNALD:
> >                  virBufferAsprintf(&outputbuf, "%d:%s",
> >                                    virLogOutputs[i]->priority,
> >                                    virLogDestinationTypeToString(dest));
> > +                break;
> > +            case VIR_LOG_TO_OUTPUT_LAST:
> > +            default:
> > +                virReportEnumRangeError(virLogDestination, dest);
> 
> Didn't see this before, but because this is a for loop, you'll need to
> add a virBufferFreeAndReset(&outputbuf); before returning.

Ok


Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list