From 9835662927a3dc43875bc1f8780c1f49f6c34e69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Kuzn=C3=ADk?= Date: Thu, 30 Jan 2020 08:58:50 +0000 Subject: [PATCH] ITS#9160 OOM handling in test programs --- tests/progs/slapd-bind.c | 8 ++++++++ tests/progs/slapd-modrdn.c | 12 ++++++++++++ tests/progs/slapd-mtread.c | 4 ++++ tests/progs/slapd-read.c | 8 ++++++++ tests/progs/slapd-search.c | 8 ++++++++ 5 files changed, 40 insertions(+) diff --git a/tests/progs/slapd-bind.c b/tests/progs/slapd-bind.c index c9e3210b06..a832e809c1 100644 --- a/tests/progs/slapd-bind.c +++ b/tests/progs/slapd-bind.c @@ -412,11 +412,19 @@ do_base( struct tester_conn_args *config, char *dn, char *base, char *filter, ch case LDAP_RES_SEARCH_ENTRY: rc = ldap_get_dn_ber( ld, msg, &ber, &bv ); dns = realloc( dns, (ndns + 1)*sizeof(char *) ); + if ( !dns ) { + tester_error( "realloc failed" ); + exit( EXIT_FAILURE ); + } dns[ndns] = ber_strdup( bv.bv_val ); if ( pwattr != NULL ) { struct berval **values = ldap_get_values_len( ld, msg, pwattr ); creds = realloc( creds, (ndns + 1)*sizeof(struct berval) ); + if ( !creds ) { + tester_error( "realloc failed" ); + exit( EXIT_FAILURE ); + } if ( values == NULL ) { novals:; creds[ndns].bv_len = 0; diff --git a/tests/progs/slapd-modrdn.c b/tests/progs/slapd-modrdn.c index 5bd823d72a..d82d82c69e 100644 --- a/tests/progs/slapd-modrdn.c +++ b/tests/progs/slapd-modrdn.c @@ -125,6 +125,10 @@ do_modrdn( struct tester_conn_args *config, DNs[0] = entry; DNs[1] = strdup( entry ); + if ( DNs[1] == NULL ) { + tester_error( "strdup failed" ); + exit( EXIT_FAILURE ); + } /* reverse the RDN, make new DN */ p1 = strchr( entry, '=' ) + 1; @@ -132,6 +136,10 @@ do_modrdn( struct tester_conn_args *config, *p2 = '\0'; rdns[1] = strdup( entry ); + if ( rdns[1] == NULL ) { + tester_error( "strdup failed" ); + exit( EXIT_FAILURE ); + } *p2-- = ','; for (i = p1 - entry;p2 >= p1;) @@ -139,6 +147,10 @@ do_modrdn( struct tester_conn_args *config, DNs[1][i] = '\0'; rdns[0] = strdup( DNs[1] ); + if ( rdns[0] == NULL ) { + tester_error( "strdup failed" ); + exit( EXIT_FAILURE ); + } DNs[1][i] = ','; i = 0; diff --git a/tests/progs/slapd-mtread.c b/tests/progs/slapd-mtread.c index 1b421af00b..c8024cb6e1 100644 --- a/tests/progs/slapd-mtread.c +++ b/tests/progs/slapd-mtread.c @@ -531,6 +531,10 @@ do_random( LDAP *ld, } values = malloc( ( nvalues + 1 ) * sizeof( char * ) ); + if (values == NULL) { + thread_error( idx, "(failed to malloc)"); + exit( EXIT_FAILURE ); + } for ( i = 0, e = ldap_first_entry( ld, res ); e != NULL; i++, e = ldap_next_entry( ld, e ) ) { values[ i ] = ldap_get_dn( ld, e ); diff --git a/tests/progs/slapd-read.c b/tests/progs/slapd-read.c index 4023a22d27..f95228317b 100644 --- a/tests/progs/slapd-read.c +++ b/tests/progs/slapd-read.c @@ -202,6 +202,10 @@ do_random( struct tester_conn_args *config, char *sbase, char *filter, } values = malloc( ( nvalues + 1 ) * sizeof( char * ) ); + if ( !values ) { + tester_error( "malloc failed" ); + exit( EXIT_FAILURE ); + } for ( i = 0, e = ldap_first_entry( ld, res ); e != NULL; i++, e = ldap_next_entry( ld, e ) ) { values[ i ] = ldap_get_dn( ld, e ); @@ -251,6 +255,10 @@ do_read( struct tester_conn_args *config, char *entry, LDAP **ldp, /* make room for msgid */ if ( swamp > 1 ) { msgids = (int *)calloc( sizeof(int), maxloop ); + if ( !msgids ) { + tester_error( "calloc failed" ); + exit( EXIT_FAILURE ); + } } retry:; diff --git a/tests/progs/slapd-search.c b/tests/progs/slapd-search.c index 8f791d6b3c..321fd80e38 100644 --- a/tests/progs/slapd-search.c +++ b/tests/progs/slapd-search.c @@ -226,6 +226,10 @@ do_random( struct tester_conn_args *config, int j; values = realloc( values, ( nvalues + n + 1 )*sizeof( char * ) ); + if ( !values ) { + tester_error( "realloc failed" ); + exit( EXIT_FAILURE ); + } for ( j = 0; j < n; j++ ) { values[ nvalues + j ] = strdup( v[ j ]->bv_val ); } @@ -298,6 +302,10 @@ do_search( struct tester_conn_args *config, /* make room for msgid */ if ( swamp > 1 ) { msgids = (int *)calloc( sizeof(int), innerloop ); + if ( !msgids ) { + tester_error( "calloc failed" ); + exit( EXIT_FAILURE ); + } } retry:;