1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-04-30 03:40:34 +02:00

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.
This commit is contained in:
Mark H Weaver 2014-11-11 22:30:14 -05:00
parent 9c5d6aa964
commit fda17c20a3
2 changed files with 7 additions and 3 deletions

1
THANKS
View file

@ -134,6 +134,7 @@ For fixes or providing information which led to a fix:
Dan McMahill Dan McMahill
Roger Mc Murtrie Roger Mc Murtrie
Scott McPeak Scott McPeak
Glenn Michaels
Andrew Milkowski Andrew Milkowski
Tim Mooney Tim Mooney
Han-Wen Nienhuys Han-Wen Nienhuys

View file

@ -1,5 +1,5 @@
/* Copyright (C) 1995, 1996, 1997, 1998, 2000, 2001, 2004, 2006, 2010, /* Copyright (C) 1995-1998, 2000, 2001, 2004, 2006, 2010, 2012-2014
* 2012, 2013, 2014 Free Software Foundation, Inc. * Free Software Foundation, Inc.
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License * 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 #define FUNC_NAME s_scm_strerror
{ {
SCM ret; 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_dynwind_begin (0);
scm_i_dynwind_pthread_mutex_lock (&scm_i_misc_mutex); 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 (); scm_dynwind_end ();
return ret; return ret;