From cc743d2c1f584ab3bf42e1231626e8c489afc8ef Mon Sep 17 00:00:00 2001 From: Howard Chu Date: Tue, 9 Dec 2003 20:10:44 +0000 Subject: [PATCH] ITS#2865 don't try to calloc 0 bytes, log an error and return instead. Don't crash in slapcat when NULL entry is returned. --- servers/slapd/entry.c | 10 ++++++++++ servers/slapd/tools/slapcat.c | 14 +++++++------- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/servers/slapd/entry.c b/servers/slapd/entry.c index 605247489c..37c72c3cb2 100644 --- a/servers/slapd/entry.c +++ b/servers/slapd/entry.c @@ -659,6 +659,16 @@ int entry_decode(struct berval *bv, Entry **e) BerVarray bptr; i = entry_getlen(&ptr); + if (!i) { +#ifdef NEW_LOGGING + LDAP_LOG( OPERATION, INFO, + "entry_decode: entry length was zero\n", 0, 0, 0); +#else + Debug( LDAP_DEBUG_ANY, + "entry_decode: entry length was zero\n", 0, 0, 0); +#endif + return LDAP_OTHER; + } x = ch_calloc(1, i); i = entry_getlen(&ptr); x->e_name.bv_val = (char *) ptr; diff --git a/servers/slapd/tools/slapcat.c b/servers/slapd/tools/slapcat.c index 96e13e881f..c402dc40f7 100644 --- a/servers/slapd/tools/slapcat.c +++ b/servers/slapd/tools/slapcat.c @@ -66,6 +66,13 @@ main( int argc, char **argv ) Entry* e = be->be_entry_get( be, id ); op.o_bd = be; + if ( e == NULL ) { + printf("# no data for entry id=%08lx\n\n", (long) id ); + rc = EXIT_FAILURE; + if( continuemode ) continue; + break; + } + if( sub_ndn.bv_len && !dnIsSuffix( &e->e_nname, &sub_ndn ) ) { be_entry_release_r( &op, e ); continue; @@ -89,13 +96,6 @@ main( int argc, char **argv ) printf( "# id=%08lx\n", (long) id ); } - if ( e == NULL ) { - printf("# no data for entry id=%08lx\n\n", (long) id ); - rc = EXIT_FAILURE; - if( continuemode ) continue; - break; - } - data = entry2str( e, &len ); be_entry_release_r( &op, e ); -- 2.39.5