bignum.cpp: Fix calls to reallot_array() -- bignums can get new addresses if they are not in the nursery or are somehow larger. Fix a couple more correctness issues.
							parent
							
								
									91d8326b77
								
							
						
					
					
						commit
						47b4ebc80d
					
				| 
						 | 
				
			
			@ -1296,6 +1296,7 @@ bignum * factor_vm::allot_bignum_zeroed(bignum_length_type length, int negative_
 | 
			
		|||
	return (result);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* can allocate if not in nursery or size is larger */
 | 
			
		||||
#define BIGNUM_REDUCE_LENGTH(source, length)	\
 | 
			
		||||
source = reallot_array(source,length + 1)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1306,6 +1307,7 @@ bignum *factor_vm::bignum_shorten_length(bignum * bignum, bignum_length_type len
 | 
			
		|||
	BIGNUM_ASSERT ((length >= 0) || (length <= current_length));
 | 
			
		||||
	if (length < current_length)
 | 
			
		||||
	{
 | 
			
		||||
		GC_BIGNUM(bignum);
 | 
			
		||||
		BIGNUM_REDUCE_LENGTH (bignum, length);
 | 
			
		||||
		BIGNUM_SET_NEGATIVE_P (bignum, (length != 0) && (BIGNUM_NEGATIVE_P (bignum)));
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -1323,6 +1325,7 @@ bignum *factor_vm::bignum_trim(bignum * bignum)
 | 
			
		|||
	scan += 1;
 | 
			
		||||
	if (scan < end)
 | 
			
		||||
	{
 | 
			
		||||
		GC_BIGNUM(bignum);
 | 
			
		||||
		bignum_length_type length = (scan - start);
 | 
			
		||||
		BIGNUM_REDUCE_LENGTH (bignum, length);
 | 
			
		||||
		BIGNUM_SET_NEGATIVE_P (bignum, (length != 0) && (BIGNUM_NEGATIVE_P (bignum)));
 | 
			
		||||
| 
						 | 
				
			
			@ -1349,6 +1352,7 @@ bignum *factor_vm::bignum_maybe_new_sign(bignum * x, int negative_p)
 | 
			
		|||
		return (x);
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		GC_BIGNUM(x);
 | 
			
		||||
		bignum * result =
 | 
			
		||||
			(allot_bignum ((BIGNUM_LENGTH (x)), negative_p));
 | 
			
		||||
		bignum_destructive_copy (x, result);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue