From 593162243d7e15f70547a8b65a2539410a94a815 Mon Sep 17 00:00:00 2001 From: vsc Date: Tue, 22 Oct 2002 04:00:11 +0000 Subject: [PATCH] check for overflows while building large constants (atom_chars and friends). git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@648 b08c6af1-5177-4d33-ba66-4b1c6b8b522a --- C/stdpreds.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/C/stdpreds.c b/C/stdpreds.c index 30e771211..ea57a30fd 100644 --- a/C/stdpreds.c +++ b/C/stdpreds.c @@ -519,6 +519,9 @@ p_name(void) Error(DOMAIN_ERROR_NOT_LESS_THAN_ZERO,Head,"name/2"); return(FALSE); } + if (Unsigned(TrailTop) - Unsigned(s) < MinTrailGap) { + growtrail(sizeof(CELL) * 16 * 1024L); + } *s++ = i; t = TailOfTerm(t); } @@ -588,6 +591,9 @@ p_atom_chars(void) Error(REPRESENTATION_ERROR_CHARACTER_CODE,Head,"atom_chars/2"); return(FALSE); } + if (Unsigned(TrailTop) - Unsigned(s) < MinTrailGap) { + growtrail(sizeof(CELL) * 16 * 1024L); + } *s++ = i; t = TailOfTerm(t); if (IsVarTerm(t)) { @@ -617,6 +623,9 @@ p_atom_chars(void) Error(TYPE_ERROR_CHARACTER,Head,"atom_chars/2"); return(FALSE); } + if (Unsigned(TrailTop) - Unsigned(s) < MinTrailGap) { + growtrail(sizeof(CELL) * 16 * 1024L); + } *s++ = is[0]; t = TailOfTerm(t); if (IsVarTerm(t)) { @@ -739,6 +748,9 @@ p_atom_codes(void) Error(REPRESENTATION_ERROR_CHARACTER_CODE,Head,"atom_codes/2"); return(FALSE); } + if (Unsigned(TrailTop) - Unsigned(s) < MinTrailGap) { + growtrail(sizeof(CELL) * 16 * 1024L); + } *s++ = i; t = TailOfTerm(t); if (IsVarTerm(t)) { @@ -926,6 +938,9 @@ p_number_chars(void) Error(REPRESENTATION_ERROR_CHARACTER_CODE,Head,"number_chars/2"); return(FALSE); } + if (Unsigned(TrailTop) - Unsigned(s) < MinTrailGap) { + growtrail(sizeof(CELL) * 16 * 1024L); + } *s++ = i; t = TailOfTerm(t); if (IsVarTerm(t)) { @@ -955,6 +970,9 @@ p_number_chars(void) Error(TYPE_ERROR_CHARACTER,Head,"number_chars/2"); return(FALSE); } + if (Unsigned(TrailTop) - Unsigned(s) < MinTrailGap) { + growtrail(sizeof(CELL) * 16 * 1024L); + } *s++ = is[0]; t = TailOfTerm(t); if (IsVarTerm(t)) { @@ -1098,6 +1116,9 @@ p_number_codes(void) Error(REPRESENTATION_ERROR_CHARACTER_CODE,Head,"number_codes/2"); return(FALSE); } + if (Unsigned(TrailTop) - Unsigned(s) < MinTrailGap) { + growtrail(sizeof(CELL) * 16 * 1024L); + } *s++ = i; t = TailOfTerm(t); if (IsVarTerm(t)) {