Author: Brian Kearns <[email protected]>
Branch: stdlib-2.7.4
Changeset: r63174:172b279b88eb
Date: 2013-04-09 17:28 -0400
http://bitbucket.org/pypy/pypy/changeset/172b279b88eb/
Log: verify fd in signal.set_wakeup_fd (cpython issue16992)
diff --git a/pypy/module/signal/interp_signal.py
b/pypy/module/signal/interp_signal.py
--- a/pypy/module/signal/interp_signal.py
+++ b/pypy/module/signal/interp_signal.py
@@ -2,6 +2,8 @@
import signal as cpy_signal
import sys
+import os
+import errno
from pypy.interpreter.error import OperationError, exception_from_errno
from pypy.interpreter.executioncontext import (AsyncAction, AbstractActionFlag,
@@ -236,6 +238,12 @@
space.w_ValueError,
space.wrap("set_wakeup_fd only works in main thread "
"or with __pypy__.thread.enable_signals()"))
+ if fd != -1:
+ try:
+ os.fstat(fd)
+ except OSError, e:
+ if e.errno == errno.EBADF:
+ raise OperationError(space.w_ValueError, space.wrap("invalid
fd"))
old_fd = pypysig_set_wakeup_fd(fd)
return space.wrap(intmask(old_fd))
diff --git a/pypy/module/signal/test/test_signal.py
b/pypy/module/signal/test/test_signal.py
--- a/pypy/module/signal/test/test_signal.py
+++ b/pypy/module/signal/test/test_signal.py
@@ -41,6 +41,8 @@
def setup_class(cls):
cls.w_signal = cls.space.getbuiltinmodule('signal')
+ cls.w_temppath = cls.space.wrap(
+ str(py.test.ensuretemp("signal").join("foo.txt")))
def test_exported_names(self):
import os
@@ -217,6 +219,12 @@
#
signal.signal(signal.SIGINT, signal.SIG_DFL)
+ def test_set_wakeup_fd_invalid(self):
+ import signal
+ with open(self.temppath, 'wb') as f:
+ fd = f.fileno()
+ raises(ValueError, signal.set_wakeup_fd, fd)
+
def test_siginterrupt(self):
import signal, os, time
if not hasattr(signal, 'siginterrupt'):
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit