error handling bugs in is/2 and =.., found by Paulo Moura.

This commit is contained in:
Vitor Santos Costa 2014-10-22 10:43:38 +01:00
parent b2caf2da77
commit c13bf88377
2 changed files with 19 additions and 7 deletions

View File

@ -97,7 +97,6 @@ Eval(Term t USES_REGS)
{
if (IsVarTerm(t)) {
LOCAL_ArithError = TRUE;
return Yap_ArithError(INSTANTIATION_ERROR,t,"in arithmetic");
} else if (IsNumTerm(t)) {
return t;
@ -220,7 +219,7 @@ X is 2+3*4
static Int
p_is( USES_REGS1 )
{ /* X is Y */
Term out = 0L;
Term out;
yap_error_number err;
Term t = Deref(ARG2);
@ -241,7 +240,7 @@ p_is( USES_REGS1 )
}
} else {
Yap_EvalError(err, ARG2, "X is Exp");
return FALSE;
return FALSE;
}
} while (TRUE);
return Yap_unify_constant(ARG1,out);

View File

@ -606,22 +606,35 @@ p_univ( USES_REGS1 )
}
if (IsNumTerm(twork)) {
Term tt = TailOfTerm(t2);
if (IsVarTerm(tt) || tt != MkAtomTerm(AtomNil)) {
if (IsVarTerm(tt)) {
Yap_Error(INSTANTIATION_ERROR, tt, "(=..)/2");
return (FALSE);
}
if ( tt != MkAtomTerm(AtomNil)) {
Yap_Error(TYPE_ERROR_ATOMIC, twork, "(=..)/2");
return (FALSE);
}
return (Yap_unify_constant(ARG1, twork));
}
if (!IsAtomTerm(twork)) {
Yap_Error(TYPE_ERROR_ATOMIC, twork, "(=..)/2");
return (FALSE);
Term tt = TailOfTerm(t2);
if (IsVarTerm(tt)) {
Yap_Error(INSTANTIATION_ERROR, twork, "(=..)/2");
return(FALSE);
} else if (tt == MkAtomTerm(AtomNil)) {
Yap_Error(TYPE_ERROR_ATOMIC, twork, "(=..)/2");
return (FALSE);
} else {
Yap_Error(TYPE_ERROR_ATOM, twork, "(=..)/2");
return (FALSE);
}
}
at = AtomOfTerm(twork);
twork = TailOfTerm(t2);
if (IsVarTerm(twork)) {
Yap_Error(INSTANTIATION_ERROR, twork, "(=..)/2");
return(FALSE);
} else if (!IsPairTerm(twork)) {
} else if (!IsPairTerm(twork)) {
if (twork != TermNil) {
Yap_Error(TYPE_ERROR_LIST, ARG2, "(=..)/2");
return(FALSE);