Commit 9ad912e2 authored by Rusty Russell's avatar Rusty Russell

idtree: fix right shift of signed ints

(Imported from SAMBA commit 2db1987f5a3a)

Right-shifting signed integers in undefined; indeed it seems that on
AIX with their compiler, doing a 30-bit shift on (INT_MAX-200) gives
0, not 1 as we might expect (THIS WAS WRONG, REAL FIX LATER).

The obvious fix is to make id and oid unsigned: l (level count) is also
logically unsigned.

(Note: Samba doesn't generally get to ids > 1 billion, but ctdb does)
Reported-by: default avatarChris Cowan <cc@us.ibm.com>
Signed-off-by: default avatarRusty Russell <rusty@rustcorp.com.au>
parent 6994f3d0
......@@ -100,7 +100,7 @@ static int sub_alloc(struct idtree *idp, const void *ptr, int *starting_id)
int n, m, sh;
struct idtree_layer *p, *pn;
struct idtree_layer *pa[MAX_LEVEL];
int l, id, oid;
unsigned int l, id, oid;
uint32_t bm;
memset(pa, 0, sizeof(pa));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment