Make util.c:flags() stricter -- don't silently ignore unknown flags
[mono.git] / mono / dis / util.c
index e5e467d09ffcb6914bd6f6814784dacfbfaa1e6d..8f91209e2971f15223c09eb5431be5ed2d37c4fe 100644 (file)
@@ -45,12 +45,19 @@ flags (guint32 code, dis_map_t *table)
        
        buffer [0] = 0;
        
-       for (i = 0; table [i].str != NULL; i++)
-               if (table [i].code & code) {
-                       if (buffer [0])
-                               strcat (buffer, " ");
-                       strcat (buffer, table [i].str);
-               }
+       for (i = 0; code && table [i].str != NULL; i++) {
+               if (!(table [i].code & code))
+                       continue;
+               code &= ~table [i].code;
+               if (!*table [i].str)
+                       continue;
+               if (buffer [0])
+                       strcat (buffer, " ");
+               strcat (buffer, table [i].str);
+       }
+
+       if (code)
+               sprintf (buffer + strlen (buffer), " unknown-flag-%2x", code);
 
        return buffer;
 }