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
 }