No more crash whith some assembler file :
authorSCPCD <SCPCD@poulpe.net>
Mon, 9 Jul 2012 15:28:06 +0000 (15:28 +0000)
committerSCPCD <SCPCD@poulpe.net>
Mon, 9 Jul 2012 15:28:06 +0000 (15:28 +0000)
the mask applied to "attr" in "fixup" function was wrong.

With a mask of 0x0200, other FU_xxx can match and unexpected behavior will arise.

sect.c

diff --git a/sect.c b/sect.c
index 0a23b4b3776878f333c10e34b6873e5cf0c90406..7db71a359161f229c70ca44e238f8f511195ff03 100644 (file)
--- a/sect.c
+++ b/sect.c
@@ -266,8 +266,7 @@ int fixup(WORD attr, LONG loc, TOKEN * fexpr)
        // no expression if it's just a mark. This code assumes 16 bit WORDs and 32 bit LONGs
        if (*fexpr == SYMBOL && fexpr[2] == ENDEXPR)
        {
-               //if ((attr & 0x0F00) == FU_JR) {
-               if ((attr & 0x0200) == FU_JR)
+               if ((attr & 0x0F00) == FU_JR) // SCPCD : correct bit mask for attr (else other FU_xxx will match) NYAN !
                {
                        i = 18;                  // Just a single symbol
                }
@@ -336,8 +335,7 @@ int fixup(WORD attr, LONG loc, TOKEN * fexpr)
                *fchptr.lp++ = (LONG)fexpr[1];
        }
 
-       //if ((attr & 0x0F00) == FU_JR) {
-       if ((attr & 0x0200) == FU_JR)
+       if ((attr & 0x0F00) == FU_JR)  // SCPCD : correct bit mask for attr (else other FU_xxx will match) NYAN !
        {
                if (orgactive)
                        *fchptr.lp++ = orgaddr;