faking an index for present queries actually made things slower

fail parsing for decoding errors
This commit is contained in:
leitner
2017-03-29 12:52:24 +00:00
parent 0570db01d5
commit 7a2ea8bd51
2 changed files with 31 additions and 3 deletions

View File

@@ -110,8 +110,14 @@ nomem:
uint32_t tmp, val;
base64=binary=0;
n=ofs+buffer_get_token(b,buf+ofs,8192-ofs,":",1);
if (n==0) break;
if (n==ofs) break;
i=scan_whitenskip(buf,n);
if (buf[byte_chr(buf+i,n-i,'\n')]=='\n') {
buffer_puts(buffer_2,"LDIF parse error: no key:value in line ");
buffer_putulong(buffer_2,lines);
buffer_putnlflush(buffer_2);
exit(1);
}
buf[n]=0;
if ((i2=str_chr(buf,';'))<(unsigned int)n) {
buf[i2]=0;
@@ -169,10 +175,23 @@ lookagain:
}
if (base64) {
len=unbase64(payload.s);
if (len==0) {
buffer_puts(buffer_2,"LDIF parse error: base64 decoding failed in line ");
buffer_putulong(buffer_2,lines);
buffer_putnlflush(buffer_2);
exit(1);
}
if (!binary) { payload.s[len]=0; ++len; }
} else {
size_t sl;
len=n;
scan_ldapescape(payload.s,payload.s,&len);
sl=scan_ldapescape(payload.s,payload.s,&len);
if (sl!=payload.len-1) {
buffer_puts(buffer_2,"LDIF parse error: LDIF de-escaping failed in line ");
buffer_putulong(buffer_2,lines);
buffer_putnlflush(buffer_2);
exit(1);
}
payload.s[len]=0;
++len;
}
@@ -243,6 +262,12 @@ lookagain:
}
if (base64) {
len=unbase64(payload.s);
if (len==0) {
buffer_puts(buffer_2,"LDIF parse error: base64 decoding failed in line ");
buffer_putulong(buffer_2,lines);
buffer_putnlflush(buffer_2);
exit(1);
}
if (!binary) { payload.s[len]=0; ++len; }
} else {
len=n;

View File

@@ -463,7 +463,7 @@ static int indexable(struct Filter* f) {
}
/* fall through */
case PRESENT:
return 1;
return 0;
#if 0
/* doesn't make much sense to try to speed up negated queries */
case NOT:
@@ -859,6 +859,8 @@ static int useindex(struct Filter* f,struct bitfield* b) {
}
return 0;
case PRESENT:
return 0;
#if 0
{
/* now this is not exactly using an index, but a linear search
* through the record table, but since each check is very cheap,
@@ -873,6 +875,7 @@ static int useindex(struct Filter* f,struct bitfield* b) {
}
return 1;
}
#endif
case LESSEQUAL:
case GREATEQUAL:
case EQUAL: