fix SCM_STACK_OVERFLOW_P bug
authorAndy Wingo <wingo@pobox.com>
Sat, 9 Jan 2010 22:11:23 +0000 (23:11 +0100)
committerAndy Wingo <wingo@pobox.com>
Sat, 9 Jan 2010 22:11:23 +0000 (23:11 +0100)
* libguile/stackchk.h (SCM_STACK_OVERFLOW_P): Fix a potential overflow,
  depending on the absolute values of the thread base and the stack
  limit. Thanks to Ivan Shcherbakov for the report.

THANKS
libguile/stackchk.h

diff --git a/THANKS b/THANKS
index 94b86a1..30d57fc 100644 (file)
--- a/THANKS
+++ b/THANKS
@@ -102,6 +102,7 @@ For fixes or providing information which led to a fix:
          Frank Schwidom
     John Steele Scott
          Thiemo Seufer
+           Ivan Shcherbakov
           Scott Shedden
            Alex Shinn
          Daniel Skarda
index ed14906..68dec76 100644 (file)
@@ -3,7 +3,7 @@
 #ifndef SCM_STACKCHK_H
 #define SCM_STACKCHK_H
 
-/* Copyright (C) 1995,1996,1998,2000, 2003, 2006, 2008, 2009 Free Software Foundation, Inc.
+/* Copyright (C) 1995,1996,1998,2000, 2003, 2006, 2008, 2009, 2010 Free Software Foundation, Inc.
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public License
 #if defined BUILDING_LIBGUILE && defined STACK_CHECKING
 # if SCM_STACK_GROWS_UP
 #  define SCM_STACK_OVERFLOW_P(s)\
-   (SCM_STACK_PTR (s) \
-    > (SCM_I_CURRENT_THREAD->base + SCM_STACK_LIMIT))
+   ((SCM_STACK_PTR (s) - SCM_I_CURRENT_THREAD->base) > SCM_STACK_LIMIT)
 # else
 #  define SCM_STACK_OVERFLOW_P(s)\
-   (SCM_STACK_PTR (s) \
-    < (SCM_I_CURRENT_THREAD->base - SCM_STACK_LIMIT))
+   ((SCM_I_CURRENT_THREAD->base - SCM_STACK_PTR (s)) > SCM_STACK_LIMIT)
 # endif
 # define SCM_CHECK_STACK\
     {\