Browse Source

DynASM/x86: Fix potential REL_A overflow.

Thanks to Joshua Haberman.
Mike Pall 8 years ago
parent
commit
0c0e7b168e
1 changed files with 2 additions and 1 deletions
  1. 2 1
      dynasm/dasm_x86.h

+ 2 - 1
dynasm/dasm_x86.h

@@ -395,7 +395,8 @@ int dasm_encode(Dst_DECL, void *buffer)
 	case DASM_VREG: { int t = *p++; if (t >= 2) n<<=3; cp[-1] |= n; break; }
 	case DASM_VREG: { int t = *p++; if (t >= 2) n<<=3; cp[-1] |= n; break; }
 	case DASM_REL_LG: p++; if (n >= 0) goto rel_pc;
 	case DASM_REL_LG: p++; if (n >= 0) goto rel_pc;
 	  b++; n = (int)(ptrdiff_t)D->globals[-n];
 	  b++; n = (int)(ptrdiff_t)D->globals[-n];
-	case DASM_REL_A: rel_a: n -= (int)(ptrdiff_t)(cp+4); goto wd; /* !x64 */
+	case DASM_REL_A: rel_a:
+	  n -= (unsigned int)(ptrdiff_t)(cp+4); goto wd; /* !x64 */
 	case DASM_REL_PC: rel_pc: {
 	case DASM_REL_PC: rel_pc: {
 	  int shrink = *b++;
 	  int shrink = *b++;
 	  int *pb = DASM_POS2PTR(D, n); if (*pb < 0) { n = pb[1]; goto rel_a; }
 	  int *pb = DASM_POS2PTR(D, n); if (*pb < 0) { n = pb[1]; goto rel_a; }