diff --git a/ldif_parse.c b/ldif_parse.c index 0ea49e5..509b131 100644 --- a/ldif_parse.c +++ b/ldif_parse.c @@ -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; diff --git a/tinyldap.c b/tinyldap.c index fb0e49f..5d174ba 100644 --- a/tinyldap.c +++ b/tinyldap.c @@ -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: