Fix route table clone core dump
This change addresses the bug that was causing a cored dump in
the route table clone functions.
Issue-ID: RIC-720
Signed-off-by: E. Scott Daniels <daniels@research.att.com>
Change-Id: I58a8f75fcc7f9fc08495eabafb4644e365b18c90
Signed-off-by: E. Scott Daniels <daniels@research.att.com>
diff --git a/test/rt_static_test.c b/test/rt_static_test.c
index 79d0561..7a51bca 100644
--- a/test/rt_static_test.c
+++ b/test/rt_static_test.c
@@ -87,11 +87,38 @@
k = (uint64_t) sid << 32;
k += mtype;
-fprintf( stderr, "<INFO> build key: %x %x --> %llx\n", (int) mtype, (int) sid, (long long) k );
+ fprintf( stderr, "<INFO> build key: %x %x --> %llx\n", (int) mtype, (int) sid, (long long) k );
return k;
}
/*
+ Create a very large set of things to clone and ensure that the colleciton
+ buffers are properly resized without errors.
+*/
+static int lg_clone_test( ) {
+ int errors = 0;
+ uta_ctx_t* ctx;
+ char* old_env;
+ route_table_t* p;
+
+ old_env = getenv( "RMR_SEED_RT" );
+ setenv( "RMR_SEED_RT", "./large_meid.rt", 1 );
+
+ ctx = mk_dummy_ctx();
+
+ read_static_rt( ctx, 0 );
+ p = uta_rt_clone( ctx, ctx->rtable, NULL, 1 ); // clone to force the copy from the existing table
+ errors += fail_if_nil( p, "clone of large table returned nil" );
+ if( p != NULL ) {
+ errors += fail_not_equal( p->error, 0, "clone of large table had error" );
+ }
+
+ setenv( "RMR_SEED_RT", old_env, 1 );
+
+ return errors;
+}
+
+/*
This is the main route table test. It sets up a very specific table
for testing (not via the generic setup function for other test
situations).
@@ -666,9 +693,17 @@
#endif
// ---------------- misc coverage tests --------------------------------------------------------------------------
- collect_things( NULL, NULL, NULL, NULL, NULL ); // these both return null, these test NP checks
- collect_things( NULL, NULL, NULL, NULL, (void *) 1234 ); // the last is an invalid pointer, but check needed to force check on previous param
- del_rte( NULL, NULL, NULL, NULL, NULL );
+ collect_things( NULL, NULL, NULL, NULL, NULL ); // these both return null, these test NP checks
+ collect_things( NULL, NULL, NULL, NULL, (void *) 1234 ); // the last is an invalid pointer, but check needed to force check on previous param
+ del_rte( NULL, NULL, NULL, NULL, NULL );
+
+ ctx = mk_dummy_ctx();
+ roll_tables( ctx ); // drive nil rt check
+
+
+
+ // ------ specific edge case tests -------------------------------------------------------------------------------
+ errors += lg_clone_test( );
return !!errors; // 1 or 0 regardless of count
}