Skip to content

Commit e88c7bf

Browse files
committed
Fix signed integer overflow UB in dasm
Should hopefully fix the ubsan and community builds.
1 parent 6766b5f commit e88c7bf

File tree

1 file changed

+2
-2
lines changed

1 file changed

+2
-2
lines changed

ext/opcache/jit/dynasm/dasm_x86.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,7 @@ void dasm_put(Dst_DECL, int start, ...)
197197
switch (action) {
198198
case DASM_DISP:
199199
if (n == 0) { if (mrm < 0) mrm = p[-2]; if ((mrm&7) != 5) break; }
200-
case DASM_IMM_DB: if (((n+128)&-256) == 0) goto ob;
200+
case DASM_IMM_DB: if ((((unsigned)n+128)&-256) == 0) goto ob;
201201
case DASM_REL_A: /* Assumes ptrdiff_t is int. !x64 */
202202
case DASM_IMM_D: ofs += 4; break;
203203
case DASM_IMM_S: CK(((n+128)&-256) == 0, RANGE_I); goto ob;
@@ -397,7 +397,7 @@ int dasm_encode(Dst_DECL, void *buffer)
397397
if (((n+128) & -256) != 0) goto wd; else mm[-1] -= 0x40;
398398
}
399399
case DASM_IMM_S: case DASM_IMM_B: wb: dasmb(n); break;
400-
case DASM_IMM_DB: if (((n+128)&-256) == 0) {
400+
case DASM_IMM_DB: if ((((unsigned)n+128)&-256) == 0) {
401401
db: if (!mark) mark = cp; mark[-2] += 2; mark = NULL; goto wb;
402402
} else mark = NULL;
403403
case DASM_IMM_D: wd: dasmd(n); break;

0 commit comments

Comments
 (0)