@@ -149,6 +149,9 @@ zz_resize(size_t size, zz_t *u)
149
149
{
150
150
if (u -> alloc >= size ) {
151
151
u -> size = (zz_size_t )size ;
152
+ if (!u -> size ) {
153
+ u -> negative = false;
154
+ }
152
155
return ZZ_OK ;
153
156
}
154
157
if (size > INT32_MAX ) {
@@ -854,6 +857,7 @@ _zz_addsub_i32(const zz_t *u, int32_t v, bool subtract, zz_t *w)
854
857
zz_limb_t digit = ABS (v );
855
858
856
859
if (u_size < v_size ) {
860
+ assert (v_size == 1 );
857
861
if (zz_resize (v_size , w )) {
858
862
return ZZ_MEM ; /* LCOV_EXCL_LINE */
859
863
}
@@ -953,6 +957,7 @@ zz_mul(const zz_t *u, const zz_t *v, zz_t *w)
953
957
mpn_mul (w -> digits , u -> digits , u -> size , v -> digits , v -> size );
954
958
}
955
959
w -> size -= w -> digits [w -> size - 1 ] == 0 ;
960
+ assert (w -> size >= 1 );
956
961
return ZZ_OK ;
957
962
}
958
963
@@ -1418,6 +1423,7 @@ zz_and(const zz_t *u, const zz_t *v, zz_t *w)
1418
1423
return ZZ_OK ;
1419
1424
}
1420
1425
else if (u -> negative ) {
1426
+ assert (v_size > 0 );
1421
1427
if (zz_resize (v_size , w )) {
1422
1428
goto err ; /* LCOV_EXCL_LINE */
1423
1429
}
@@ -1429,6 +1435,7 @@ zz_and(const zz_t *u, const zz_t *v, zz_t *w)
1429
1435
return ZZ_OK ;
1430
1436
}
1431
1437
else {
1438
+ assert (u_size > 0 );
1432
1439
if (zz_resize (u_size , w )) {
1433
1440
goto err ; /* LCOV_EXCL_LINE */
1434
1441
}
@@ -1517,6 +1524,7 @@ zz_or(const zz_t *u, const zz_t *v, zz_t *w)
1517
1524
return ZZ_OK ;
1518
1525
}
1519
1526
else if (u -> negative ) {
1527
+ assert (v_size > 0 );
1520
1528
if (zz_resize (u_size + 1 , w )) {
1521
1529
goto err ; /* LCOV_EXCL_LINE */
1522
1530
}
@@ -1530,6 +1538,7 @@ zz_or(const zz_t *u, const zz_t *v, zz_t *w)
1530
1538
return ZZ_OK ;
1531
1539
}
1532
1540
else {
1541
+ assert (u_size > 0 );
1533
1542
if (zz_resize (v_size + 1 , w )) {
1534
1543
goto err ; /* LCOV_EXCL_LINE */
1535
1544
}
@@ -1625,6 +1634,7 @@ zz_xor(const zz_t *u, const zz_t *v, zz_t *w)
1625
1634
return ZZ_OK ;
1626
1635
}
1627
1636
else if (u -> negative ) {
1637
+ assert (v_size > 0 );
1628
1638
if (zz_resize (u_size + 1 , w )) {
1629
1639
goto err ; /* LCOV_EXCL_LINE */
1630
1640
}
@@ -1638,6 +1648,7 @@ zz_xor(const zz_t *u, const zz_t *v, zz_t *w)
1638
1648
return ZZ_OK ;
1639
1649
}
1640
1650
else {
1651
+ assert (u_size > 0 );
1641
1652
if (zz_resize (u_size + 1 , w )) {
1642
1653
goto err ; /* LCOV_EXCL_LINE */
1643
1654
}
0 commit comments