Handle holes in EventCode enum gracefully in to_string conversions.
authorZdeněk Salvet <salvet@ics.muni.cz>
Wed, 29 Aug 2007 15:47:18 +0000 (15:47 +0000)
committerZdeněk Salvet <salvet@ics.muni.cz>
Wed, 29 Aug 2007 15:47:18 +0000 (15:47 +0000)
org.glite.lb.client/src/Event.cpp.T
org.glite.lb.common/src/events.c.T

index e7faae3..e7d0f2e 100644 (file)
@@ -389,12 +389,21 @@ std::vector<std::pair<Event::Attr,Event::AttrType> > const & Event::getAttrs(voi
 
 const std::string Event::getEventName(Type type)
 {
+       char *s;
+
        if(type < 0 || type >= TYPE_MAX) {
                STACK_ADD;
                throw(Exception(EXCEPTION_MANDATORY, EINVAL, "invalid event type"));
        }
 
-       return std::string(edg_wll_EventToString(edg_wll_EventCode(type)));
+       s = edg_wll_EventToString(edg_wll_EventCode(type));
+       if (!s) {
+               STACK_ADD;
+               throw(Exception(EXCEPTION_MANDATORY, EINVAL, "invalid event type"));
+       }
+       std::string ret(s);
+       free(s);
+       return ret;
 }
 
 
index 7916339..75939d1 100644 (file)
@@ -76,7 +76,7 @@ edg_wll_EventCode edg_wll_StringToEvent(const char *name)
 char *edg_wll_EventToString(edg_wll_EventCode event)
 {
        if ((int)event < 0 || event >= sizeof(eventNames)/sizeof(eventNames[0])) return NULL;
-       return strdup(eventNames[event]);
+       return eventNames[event] ? strdup(eventNames[event]) : NULL;
 }