diff options
author | Mark H Weaver <mhw@netris.org> | 2014-11-11 22:30:14 -0500 |
---|---|---|
committer | Mark H Weaver <mhw@netris.org> | 2014-11-11 22:36:30 -0500 |
commit | fda17c20a3d088fccab1671c8881bd217d83d5f6 (patch) | |
tree | cfae78e498e7f0ef74180508ffe7f383163b9274 | |
parent | 9c5d6aa9642891e571a7e7a2428c2084fe1058cf (diff) | |
download | guile-fda17c20a3d088fccab1671c8881bd217d83d5f6.tar.gz |
Fix strerror error handling when given a non-integer argument.
Fixes <http://bugs.gnu.org/18065>.
Reported and fixed by Glenn Michaels <gmichaels@Safe-mail.net>.
* libguile/error.c (scm_strerror): Convert the argument to a C integer
outside of the critical section, to avoid deadlock on error.
* THANKS: Add Glenn Michaels to the fixes section.
-rw-r--r-- | THANKS | 1 | ||||
-rw-r--r-- | libguile/error.c | 9 |
2 files changed, 7 insertions, 3 deletions
@@ -134,6 +134,7 @@ For fixes or providing information which led to a fix: Dan McMahill Roger Mc Murtrie Scott McPeak + Glenn Michaels Andrew Milkowski Tim Mooney Han-Wen Nienhuys diff --git a/libguile/error.c b/libguile/error.c index b5565a069..7971046ce 100644 --- a/libguile/error.c +++ b/libguile/error.c @@ -1,5 +1,5 @@ -/* Copyright (C) 1995, 1996, 1997, 1998, 2000, 2001, 2004, 2006, 2010, - * 2012, 2013, 2014 Free Software Foundation, Inc. +/* Copyright (C) 1995-1998, 2000, 2001, 2004, 2006, 2010, 2012-2014 + * 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 @@ -121,10 +121,13 @@ SCM_DEFINE (scm_strerror, "strerror", 1, 0, 0, #define FUNC_NAME s_scm_strerror { SCM ret; + int errnum = scm_to_int (err); /* Must be done outside of the + critical section below, to avoid a + deadlock on errors. */ scm_dynwind_begin (0); scm_i_dynwind_pthread_mutex_lock (&scm_i_misc_mutex); - ret = scm_from_locale_string (strerror (scm_to_int (err))); + ret = scm_from_locale_string (strerror (errnum)); scm_dynwind_end (); return ret; |