From 1fde83d27803bc19323613a7312e6afd82b28e95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADtor=20Santos=20Costa?= Date: Thu, 22 Dec 2011 11:42:26 +0000 Subject: [PATCH] fix overflows --- C/c_interface.c | 17 +++++++++-------- C/grow.c | 6 +++++- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/C/c_interface.c b/C/c_interface.c index 32fe2d040..61015ce05 100644 --- a/C/c_interface.c +++ b/C/c_interface.c @@ -1930,25 +1930,26 @@ YAP_StringToBuffer(Term t, char *buf, unsigned int bufsize) return(FALSE); } else if (!IsIntTerm(Head)) { Yap_Error(REPRESENTATION_ERROR_CHARACTER_CODE,Head,"user defined procedure"); - return(FALSE); + return FALSE; } i = IntOfTerm(Head); if (i < 0 || i > 255) { Yap_Error(REPRESENTATION_ERROR_CHARACTER_CODE,Head,"user defined procedure"); - return(FALSE); + return FALSE; } - buf[j++] = i; - if (j > bufsize) { - buf[j-1] = '\0'; - return(FALSE); + if (j == bufsize) { + buf[bufsize-1] = '\0'; + return FALSE; + } else { + buf[j++] = i; } t = TailOfTerm(t); if (IsVarTerm(t)) { Yap_Error(INSTANTIATION_ERROR,t,"user defined procedure"); - return(FALSE); + return FALSE; } else if (!IsPairTerm(t) && t != TermNil) { Yap_Error(TYPE_ERROR_LIST, t, "user defined procedure"); - return(FALSE); + return FALSE; } } buf[j] = '\0'; diff --git a/C/grow.c b/C/grow.c index eed3d652e..40370c9f9 100644 --- a/C/grow.c +++ b/C/grow.c @@ -1361,9 +1361,13 @@ static int growatomtable( USES_REGS1 ) { AtomHashEntry *ntb; - UInt nsize = 4*AtomHashTableSize-1; + UInt diff = 3*AtomHashTableSize-1, nsize; UInt start_growth_time = Yap_cputime(), growth_time; int gc_verbose = Yap_is_gc_verbose(); + if (diff > 4*1024*1024) + diff = 4*1024*1024+7919; + else + nsize = nsize+7919; LOCK(LOCAL_SignalLock); if (LOCAL_ActiveSignals == YAP_CDOVF_SIGNAL) {