Skip to content

Commit

Permalink
Fix #717
Browse files Browse the repository at this point in the history
`OnTuplesPerm` left negative integers invariant instead of giving an
error, which would be consistent with the manual.
  • Loading branch information
markuspf committed Apr 8, 2016
1 parent 3deeeac commit 3f46b26
Showing 1 changed file with 8 additions and 7 deletions.
15 changes: 8 additions & 7 deletions src/permutat.c
Original file line number Diff line number Diff line change
Expand Up @@ -4110,8 +4110,9 @@ Obj OnTuplesPerm (
UInt4 * ptPrm4; /* pointer to the permutation */
Obj tmp; /* temporary handle */
UInt lmp; /* largest moved point */
UInt i, k; /* loop variables */
Int i, k; /* loop variables */

tmp = NULL; /* stop compiler from complaining */
/* make a bag for the result and initialize pointers */
res = NEW_PLIST( IS_MUTABLE_PLIST(tup) ? T_PLIST : T_PLIST + IMMUTABLE,
LEN_LIST(tup) );
Expand All @@ -4128,11 +4129,11 @@ Obj OnTuplesPerm (

/* loop over the entries of the tuple */
for ( i = LEN_LIST(tup); 1 <= i; i--, ptTup--, ptRes-- ) {
if (IS_INTOBJ(*ptTup)) {
if (IS_INTOBJ(*ptTup) && (0 < INT_INTOBJ(*ptTup))) {
k = INT_INTOBJ( *ptTup );
if ( k <= 0 || k > lmp )
if (k > lmp) {
tmp = *ptTup;
else
} else
tmp = INTOBJ_INT( ptPrm2[k-1] + 1 );
*ptRes = tmp;
}
Expand Down Expand Up @@ -4163,11 +4164,11 @@ Obj OnTuplesPerm (

/* loop over the entries of the tuple */
for ( i = LEN_LIST(tup); 1 <= i; i--, ptTup--, ptRes-- ) {
if (IS_INTOBJ(*ptTup)) {
if (IS_INTOBJ(*ptTup) && (0 < INT_INTOBJ(*ptTup))) {
k = INT_INTOBJ( *ptTup );
if ( k <= 0 || k > lmp )
if (k > lmp) {
tmp = *ptTup;
else
} else
tmp = INTOBJ_INT( ptPrm4[k-1] + 1 );
*ptRes = tmp;
}
Expand Down

0 comments on commit 3f46b26

Please sign in to comment.