summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRusty Russell <rusty@rustcorp.com.au>2010-10-05 13:06:19 +1030
committerRusty Russell <rusty@rustcorp.com.au>2010-10-06 08:31:09 +0000
commit2db1987f5a3a4268ce64fe570ff598e3bf4ecc73 (patch)
tree080f0709932447a536ff172a18a05fa94c2bee6d
parent58c1d0c256c8bfedf6a1a734bfba34c637f34035 (diff)
downloadsamba-2db1987f5a3a4268ce64fe570ff598e3bf4ecc73.tar.gz
samba-2db1987f5a3a4268ce64fe570ff598e3bf4ecc73.tar.bz2
samba-2db1987f5a3a4268ce64fe570ff598e3bf4ecc73.zip
idtree: fix right shift of signed ints, crash on large ids on AIX
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. 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: Chris Cowan <cc@us.ibm.com> Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> Autobuild-User: Rusty Russell <rusty@samba.org> Autobuild-Date: Wed Oct 6 08:31:09 UTC 2010 on sn-devel-104
-rw-r--r--lib/util/idtree.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/lib/util/idtree.c b/lib/util/idtree.c
index c14796101a..6611992a25 100644
--- a/lib/util/idtree.c
+++ b/lib/util/idtree.c
@@ -105,7 +105,7 @@ static int sub_alloc(struct idr_context *idp, void *ptr, int *starting_id)
int n, m, sh;
struct idr_layer *p, *pn;
struct idr_layer *pa[MAX_LEVEL];
- int l, id, oid;
+ unsigned int l, id, oid;
uint32_t bm;
memset(pa, 0, sizeof(pa));