Fix buffer overrun looking up type information for op_lab pseudoops (as
authorDavid Given <dg@cowlark.com>
Thu, 16 May 2013 21:02:59 +0000 (22:02 +0100)
committerDavid Given <dg@cowlark.com>
Thu, 16 May 2013 21:02:59 +0000 (22:02 +0100)
they're not EM opcodes, we shouldn't look them up in em_flags!).

mach/proto/ncg/nextem.c

index 9023f8a..75f0d0f 100644 (file)
@@ -87,6 +87,13 @@ extern char em_flag[];
 
 argtyp(mn) {
 
+       /* op_lab is a special opcode which represents a label definition. It's
+        * not actually a real EM instruction. Therefore if we try to look it
+        * up in em_flag, we'll get a buffer overrun... */
+
+       if (mn == op_lab)
+               return EV_UNDEF;
+
        switch(em_flag[mn-sp_fmnem]&EM_PAR) {
        case PAR_W:
        case PAR_S: