Fix bug in mpi_safe_cond_assign()
diff --git a/library/bignum.c b/library/bignum.c
index 663d924..49321bb 100644
--- a/library/bignum.c
+++ b/library/bignum.c
@@ -222,6 +222,7 @@
         MPI_CHK( mpi_grow( X, Y->n ) );
 
     /* Do the conditional assign safely */
+    X->s = X->s * (1 - assign) + Y->s * assign;
     for( i = 0; i < X->n; i++ )
         X->p[i] = X->p[i] * (1 - assign) + Y->p[i] * assign;
 
diff --git a/tests/suites/test_suite_mpi.data b/tests/suites/test_suite_mpi.data
index 8755fa2..287cc2d 100644
--- a/tests/suites/test_suite_mpi.data
+++ b/tests/suites/test_suite_mpi.data
@@ -206,13 +206,22 @@
 mpi_shrink:4:0:0:1
 
 Test mpi_safe_cond_assign #1
-mpi_safe_cond_assign:"01":"02"
+mpi_safe_cond_assign:+1:"01":+1:"02"
 
 Test mpi_safe_cond_assign #2
-mpi_safe_cond_assign:"FF000000000000000001":"02"
+mpi_safe_cond_assign:+1:"FF000000000000000001":+1:"02"
 
 Test mpi_safe_cond_assign #3
-mpi_safe_cond_assign:"01":"FF000000000000000002"
+mpi_safe_cond_assign:+1:"01":+1:"FF000000000000000002"
+
+Test mpi_safe_cond_assign #4
+mpi_safe_cond_assign:+1:"01":-1:"02"
+
+Test mpi_safe_cond_assign #5
+mpi_safe_cond_assign:-1:"01":+1:"02"
+
+Test mpi_safe_cond_assign #6
+mpi_safe_cond_assign:-1:"01":-1:"02"
 
 Base test mpi_add_abs #1
 mpi_add_abs:10:"12345678":10:"642531":10:"12988209"
diff --git a/tests/suites/test_suite_mpi.function b/tests/suites/test_suite_mpi.function
index ee9b94a..394cd33 100644
--- a/tests/suites/test_suite_mpi.function
+++ b/tests/suites/test_suite_mpi.function
@@ -309,13 +309,16 @@
 /* END_CASE */
 
 /* BEGIN_CASE */
-void mpi_safe_cond_assign( char *x_str, char *y_str )
+void mpi_safe_cond_assign( int x_sign, char *x_str,
+                           int y_sign, char *y_str )
 {
     mpi X, Y, XX;
     mpi_init( &X ); mpi_init( &Y ); mpi_init( &XX );
 
     TEST_ASSERT( mpi_read_string( &X, 16, x_str ) == 0 );
+    X.s = x_sign;
     TEST_ASSERT( mpi_read_string( &Y, 16, y_str ) == 0 );
+    Y.s = y_sign;
     TEST_ASSERT( mpi_copy( &XX, &X ) == 0 );
 
     TEST_ASSERT( mpi_safe_cond_assign( &X, &Y, 0 ) == 0 );