From 5d579214afc1f746fa3ac615c8f923a7f9e27ee8 Mon Sep 17 00:00:00 2001 From: Quanah Gibson-Mount Date: Fri, 30 Nov 2007 18:17:51 +0000 Subject: [PATCH] Fix ordered indexing --- libraries/liblutil/utils.c | 11 +++-------- servers/slapd/schema_init.c | 10 +++++++--- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/libraries/liblutil/utils.c b/libraries/liblutil/utils.c index f5727fa656..8e87ce44cc 100644 --- a/libraries/liblutil/utils.c +++ b/libraries/liblutil/utils.c @@ -638,9 +638,6 @@ scale( int new, lutil_int_decnum *prev, unsigned char *tmp ) part >>= 8; } } - j++; - prev->beg += j; - prev->len -= j; } out = tmp + prev->bufsiz - 1; @@ -651,11 +648,9 @@ scale( int new, lutil_int_decnum *prev, unsigned char *tmp ) if (!new ) break; } - if ( !prev->len ) { - prev->beg += i; - prev->len = -i; - prev->len++; - } + i--; + prev->beg = prev->bufsiz + i; + prev->len = -i; AC_MEMCPY( prev->buf+prev->beg, tmp+prev->beg, prev->len ); } diff --git a/servers/slapd/schema_init.c b/servers/slapd/schema_init.c index ee96f4e686..3d9cbb3b61 100644 --- a/servers/slapd/schema_init.c +++ b/servers/slapd/schema_init.c @@ -2161,13 +2161,17 @@ integerIndexer( rc = LDAP_INVALID_SYNTAX; goto leave; } - /* If too small, pad with zeros */ + /* If too small, sign-extend */ if ( iv.bv_len < index_intlen ) { - int j, k; + int j, k, pad; keys[i].bv_val[0] = index_intlen; + if (iv.bv_val[0] & 0x80) + pad = 0xff; + else + pad = 0; k = index_intlen - iv.bv_len + 1; for ( j=1; j