/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
- * Copyright 1998-2003 The OpenLDAP Foundation.
+ * Copyright 1998-2014 The OpenLDAP Foundation.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
}
passwd->bv_val = NULL;
- passwd->bv_len = 4196;
+ passwd->bv_len = 4096;
#ifdef HAVE_FSTAT
{
filename );
}
- passwd->bv_len = sb.st_size;
+ if ( sb.st_size )
+ passwd->bv_len = sb.st_size;
}
}
#endif /* HAVE_FSTAT */
- passwd->bv_val = (char *) malloc( passwd->bv_len + 1 );
+ passwd->bv_val = (char *) ber_memalloc( passwd->bv_len + 1 );
if( passwd->bv_val == NULL ) {
perror( filename );
+ fclose( f );
return -1;
}
do {
if( nleft == 0 ) {
/* double the buffer size */
- char *p = (char *) realloc( passwd->bv_val,
+ char *p = (char *) ber_memrealloc( passwd->bv_val,
2 * passwd->bv_len + 1 );
if( p == NULL ) {
- free( passwd->bv_val );
+ ber_memfree( passwd->bv_val );
passwd->bv_val = NULL;
passwd->bv_len = 0;
+ fclose( f );
return -1;
}
nleft = passwd->bv_len;
nr = fread( &passwd->bv_val[nread], 1, nleft, f );
if( nr < nleft && ferror( f ) ) {
- free( passwd->bv_val );
+ ber_memfree( passwd->bv_val );
passwd->bv_val = NULL;
passwd->bv_len = 0;
+ fclose( f );
return -1;
}