]> git.sur5r.net Git - openldap/commitdiff
Fix ordered indexing
authorQuanah Gibson-Mount <quanah@openldap.org>
Fri, 30 Nov 2007 18:17:51 +0000 (18:17 +0000)
committerQuanah Gibson-Mount <quanah@openldap.org>
Fri, 30 Nov 2007 18:17:51 +0000 (18:17 +0000)
libraries/liblutil/utils.c
servers/slapd/schema_init.c

index f5727fa65614c7633ed2c48eb6d3fa6c821903b5..8e87ce44cc35ec403f7f8070e6ce6faa55a0c611 100644 (file)
@@ -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 );
 }
 
index ee96f4e6868f6c7ed8d82cd2d97c737bd7c73dfd..3d9cbb3b6100abbc45c4b76b5019821633501f73 100644 (file)
@@ -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<k; j++)
-                               keys[i].bv_val[j] = 0;
+                               keys[i].bv_val[j] = pad;
                        for ( j = 0; j<iv.bv_len; j++ )
                                keys[i].bv_val[j+k] = iv.bv_val[j];
                } else {