From b6f1f5cbceffe1163fc2f6540baacbd256cf95ba Mon Sep 17 00:00:00 2001
From: Phil McLaughlin <pbmcl01@protonmail.com>
Date: Fri, 26 Apr 2024 14:59:14 -0700
Subject: [PATCH] Add "k < 15" to asserts in the "generate_Lucas_chain"
 routine. Any difference term index > 14 will corrupt the chain state array.

---
 ecm.c | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/ecm.c b/ecm.c
index 775a3043..7411efd5 100644
--- a/ecm.c
+++ b/ecm.c
@@ -769,7 +769,7 @@ uint8_t generate_Lucas_chain( uint64_t prime, uint64_t chain_code, chain_element
 				k = 1;
 				while( dif < Lchain[ chain_length-k ].value )
 					k++;
-				ASSERT( dif == Lchain[ chain_length-k ].value );
+				ASSERT( (dif == Lchain[ chain_length-k ].value) && (k < 15) );
 
 				Lchain[ chain_length+1 ].dif_offset = k;
 				chain_length++;
@@ -917,7 +917,7 @@ uint8_t generate_Lucas_chain( uint64_t prime, uint64_t chain_code, chain_element
 					k = 1;
 					while( dif < Lchain[ chain_length-k ].value )
 						k++;
-					ASSERT( dif == Lchain[ chain_length-k ].value );
+					ASSERT( (dif == Lchain[ chain_length-k ].value) && (k < 15) );
 
 					Lchain[ chain_length+1 ].dif_offset = k;
 					chain_length++;
@@ -931,7 +931,7 @@ uint8_t generate_Lucas_chain( uint64_t prime, uint64_t chain_code, chain_element
 					k = 1;
 					while( dif < Lchain[ chain_length-k ].value )
 						k++;
-					ASSERT( dif == Lchain[ chain_length-k ].value );
+					ASSERT( (dif == Lchain[ chain_length-k ].value) && (k < 15) );
 
 					Lchain[ chain_length+1 ].dif_offset = k;
 					chain_length++;
@@ -945,7 +945,7 @@ uint8_t generate_Lucas_chain( uint64_t prime, uint64_t chain_code, chain_element
 					k = 1;
 					while( dif < Lchain[ chain_length-k ].value )
 						k++;
-					ASSERT( dif == Lchain[ chain_length-k ].value );
+					ASSERT( (dif == Lchain[ chain_length-k ].value) && (k < 15) );
 
 					Lchain[ chain_length+1 ].dif_offset = k;
 					chain_length++;
@@ -959,7 +959,7 @@ uint8_t generate_Lucas_chain( uint64_t prime, uint64_t chain_code, chain_element
 					k = 1;
 					while( dif < Lchain[ chain_length-k ].value )
 						k++;
-					ASSERT( dif == Lchain[ chain_length-k ].value );
+					ASSERT( (dif == Lchain[ chain_length-k ].value) && (k < 15) );
 
 					Lchain[ chain_length+1 ].dif_offset = k;
 					chain_length++;
@@ -983,7 +983,7 @@ uint8_t generate_Lucas_chain( uint64_t prime, uint64_t chain_code, chain_element
 				k = 1;
 				while( dif < Lchain[ chain_length-k ].value )
 					k++;
-				ASSERT( dif == Lchain[ chain_length-k ].value );
+				ASSERT( (dif == Lchain[ chain_length-k ].value) && (k < 15) );
 
 				Lchain[ chain_length+1 ].dif_offset = k;
 				chain_length++;
@@ -1001,7 +1001,7 @@ uint8_t generate_Lucas_chain( uint64_t prime, uint64_t chain_code, chain_element
 				k = 2;
 				while( dif < Lchain[ chain_length-k ].value )
 					k++;
-				ASSERT( dif == Lchain[ chain_length-k ].value );
+				ASSERT( (dif == Lchain[ chain_length-k ].value) && (k < 15) );
 
 				Lchain[ chain_length+1 ].dif_offset = k;
 				chain_length++;
@@ -1036,7 +1036,7 @@ void max_continuation( chain_element *Lchain, uint8_t *chain_length, uint8_t i )
 	k = 2;
 	while( dif < Lchain[ *chain_length-k ].value )
 		k++;
-	ASSERT( dif == Lchain[ *chain_length-k ].value );
+	ASSERT( (dif == Lchain[ *chain_length-k ].value) && (k < 15) );
 
 	Lchain[ *chain_length+1 ].dif_offset = k;
 	(*chain_length)++;
-- 
GitLab