[issue30064] BaseSelectorEventLoop.sock_{recv, sendall}() don't remove their callbacks when canceled

2017-04-13 Thread Evgeny Kapun

New submission from Evgeny Kapun:

Code:

import asyncio as a
import socket as s

@a.coroutine
def coro():
s1, s2 = s.socketpair()
s1.setblocking(False)
s2.setblocking(False)
try:
yield from a.wait_for(loop.sock_recv(s2, 1), 1)
except a.TimeoutError:
pass
yield from loop.sock_sendall(s1, b'\x00')
yield
s1.close()
s2.close()

loop = a.get_event_loop()
loop.run_until_complete(coro())

Result:

Exception in callback BaseSelectorEventLoop._sock_recv(, 
True, <socket.socke...2049, proto=0>, 1)
handle: , True, 
<socket.socke...2049, proto=0>, 1)>
Traceback (most recent call last):
  File "/usr/lib/python3.6/asyncio/events.py", line 127, in _run
self._callback(*self._args)
  File "/usr/lib/python3.6/asyncio/selector_events.py", line 378, in 
_sock_recv
self.remove_reader(fd)
  File "/usr/lib/python3.6/asyncio/selector_events.py", line 342, in 
remove_reader
return self._remove_reader(fd)
  File "/usr/lib/python3.6/asyncio/selector_events.py", line 279, in 
_remove_reader
key = self._selector.get_key(fd)
  File "/usr/lib/python3.6/selectors.py", line 189, in get_key
return mapping[fileobj]
  File "/usr/lib/python3.6/selectors.py", line 70, in __getitem__
fd = self._selector._fileobj_lookup(fileobj)
  File "/usr/lib/python3.6/selectors.py", line 224, in _fileobj_lookup
return _fileobj_to_fd(fileobj)
  File "/usr/lib/python3.6/selectors.py", line 41, in _fileobj_to_fd
raise ValueError("Invalid file descriptor: {}".format(fd))
ValueError: Invalid file descriptor: -1

--
components: asyncio
messages: 291593
nosy: abacabadabacaba, yselivanov
priority: normal
severity: normal
status: open
title: BaseSelectorEventLoop.sock_{recv,sendall}() don't remove their callbacks 
when canceled
type: behavior
versions: Python 3.5, Python 3.6

___
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue30064>
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue30048] If a task is canceled at the right moment, the cancellation is ignored

2017-04-12 Thread Evgeny Kapun

Evgeny Kapun added the comment:

The problem is that the task doesn't catch CancelledError, yet it disappears.

--

___
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue30048>
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue30048] If a task is canceled at the right moment, the cancellation is ignored

2017-04-11 Thread Evgeny Kapun

New submission from Evgeny Kapun:

If I run this code:

import asyncio as a

@a.coroutine
def coro1():
yield from a.ensure_future(coro2())
print("Still here")
yield from a.sleep(1)
print("Still here 2")

@a.coroutine
def coro2():
yield from a.sleep(1)
res = task.cancel()
print("Canceled task:", res)

loop = a.get_event_loop()
task = a.ensure_future(coro1())
loop.run_until_complete(task)

I expect the task to stop shortly after a call to cancel(). It should surely 
stop when I try to sleep(). But it doesn't. On my machine this prints:

Canceled task: True
Still here
Still here 2

So, cancel() returns True, but the task doesn't seem to be canceled.

--
components: asyncio
messages: 291522
nosy: abacabadabacaba, yselivanov
priority: normal
severity: normal
status: open
title: If a task is canceled at the right moment, the cancellation is ignored
type: behavior
versions: Python 3.5, Python 3.6

___
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue30048>
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue28445] Wrong documentation for GzipFile.peek

2016-10-14 Thread Evgeny Kapun

New submission from Evgeny Kapun:

>From the documentation for GzipFile.peek():

At most one single read on the compressed stream is done to satisfy the 
call.

If "compressed stream" means the underlying file object, then this is not true. 
The method tries to return at least one byte, unless the stream is at EOF. It 
is possible to create arbitrarily long compressed stream that would decompress 
to nothing, and the implementation would read the entire stream in this case. 
Because the length of the stream is not known in advance, several reads may be 
required for this.

Perhaps the documentation for GzipFile.peek() should be made the same as that 
for BZ2File.peek() and LZMAFile.peek().

--
assignee: docs@python
components: Documentation
messages: 278656
nosy: abacabadabacaba, docs@python
priority: normal
severity: normal
status: open
title: Wrong documentation for GzipFile.peek
versions: Python 3.5

___
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue28445>
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue13322] buffered read() and write() does not raise BlockingIOError

2016-10-14 Thread Evgeny Kapun

Changes by Evgeny Kapun <abacabadabac...@gmail.com>:


--
nosy: +abacabadabacaba

___
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue13322>
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue15994] memoryview to freed memory can cause segfault

2016-10-13 Thread Evgeny Kapun

Changes by Evgeny Kapun <abacabadabac...@gmail.com>:


--
nosy: +abacabadabacaba

___
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue15994>
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue28436] GzipFile doesn't properly handle short reads and writes on the underlying stream

2016-10-13 Thread Evgeny Kapun

New submission from Evgeny Kapun:

GzipFile's underlying stream can be a raw stream (such as FileIO), and such 
streams can return short reads and writes at any time (e.g. due to signals). 
The correct behavior in case of short read or write is to retry the call to 
read or write the remaining data.

GzipFile doesn't do this. This program demonstrates the problem with reading:

import io, gzip

class MyFileIO(io.FileIO):
def read(self, n):
# Emulate short read
return super().read(1)

raw = MyFileIO('test.gz', 'rb')
gzf = gzip.open(raw, 'rb')
gzf.read()

Output:

$ gzip -c /dev/null > test.gz
$ python3 test.py
Traceback (most recent call last):
  File "test.py", line 10, in 
gzf.read()
  File "/usr/lib/python3.5/gzip.py", line 274, in read
return self._buffer.read(size)
  File "/usr/lib/python3.5/gzip.py", line 461, in read
if not self._read_gzip_header():
  File "/usr/lib/python3.5/gzip.py", line 409, in _read_gzip_header
raise OSError('Not a gzipped file (%r)' % magic)
OSError: Not a gzipped file (b'\x1f')

And this shows the problem with writing:

import io, gzip

class MyIO(io.RawIOBase):
def write(self, data):
print(data)
# Emulate short write
return 1

raw = MyIO()
gzf = gzip.open(raw, 'wb')
gzf.close()

Output:

$ python3 test.py 
b'\x1f\x8b'
b'\x08'
b'\x00'
b'\xb9\xea\xffW'
b'\x02'
b'\xff'
b'\x03\x00'
b'\x00\x00\x00\x00'
b'\x00\x00\x00\x00'

It can be seen that there is no attempt to write all the data. Indeed, the 
return value of write() method is completely ignored.

I think that either gzip module should be changed to handle short reads and 
writes properly, or its documentation should reflect the fact that it cannot be 
used with raw streams.

--
components: Library (Lib)
messages: 278606
nosy: abacabadabacaba
priority: normal
severity: normal
status: open
title: GzipFile doesn't properly handle short reads and writes on the 
underlying stream
type: behavior
versions: Python 3.5

___
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue28436>
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue27085] Make it possible to select return type for os.listdir

2016-05-23 Thread Evgeny Kapun

Evgeny Kapun added the comment:

Unfortunately, on Linux, handling names as Unicode can cause some problems. For 
example, merely print()-ing such a name can cause UnicodeEncodeError.

--

___
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue27085>
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue27085] Make it possible to select return type for os.listdir

2016-05-23 Thread Evgeny Kapun

Evgeny Kapun added the comment:

Unfortunately, this doesn't work if I pass a file descriptor.

--
resolution: rejected -> 
status: closed -> open

___
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue27085>
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue27084] Add dir_fd and follow_symlinks kwargs to os.listdir and os.scandir

2016-05-22 Thread Evgeny Kapun

Evgeny Kapun added the comment:

Mostly for consistency with other functions. Also, this provides an easy way to 
walk a directory tree recursively: just call listdir on every member, and if it 
doesn't raise OSError, that member must be a directory. With 
follow_symlinks=False, this method wouldn't follow symlinks, unlike os.walk and 
os.fwalk, which always follow symlinks at least to differentiate between 
symlinks to directories and other symlinks.

--

___
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue27084>
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue27086] Add closefd argument to os.listdir

2016-05-22 Thread Evgeny Kapun

Evgeny Kapun added the comment:

Not a problem, just two unnecessary syscalls. Also, I think that many of those 
who pass a file descriptor to os.listdir don't need it afterwards, because 
after you fstat() a file descriptor (to discover that it points to a directory) 
and read the directory contents, there are few things you can use it for.

--

___
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue27086>
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue27084] Add dir_fd and follow_symlinks kwargs to os.listdir and os.scandir

2016-05-22 Thread Evgeny Kapun

Evgeny Kapun added the comment:

1. Yes, it's possible to emulate dir_fd this way, so this is just for 
convenience.
2. If follow_symlinks is False, O_NOFOLLOW is passed to the underlying open(2) 
syscall. Of course, this doesn't make sense if a file descriptor is passed 
already.

--

___
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue27084>
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue27086] Add closefd argument to os.listdir

2016-05-22 Thread Evgeny Kapun

New submission from Evgeny Kapun:

Currently, when given a file descriptor, os.listdir will duplicate it so that 
the original file descriptor is not closed. In many cases, a file descriptor is 
not needed anymore after directory is listed, so this is not necessary. I 
propose adding a keyword argument closefd to os.listdir which, if set to True, 
will make os.listdir take ownership of the passed file descriptor and close it 
at the end.

--
components: Library (Lib)
messages: 266094
nosy: abacabadabacaba
priority: normal
severity: normal
status: open
title: Add closefd argument to os.listdir
type: enhancement
versions: Python 3.6

___
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue27086>
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue27085] Make it possible to select return type for os.listdir

2016-05-22 Thread Evgeny Kapun

New submission from Evgeny Kapun:

Currently, os.listdir returns a list of strings, unless called with a bytes 
argument, in which case a list of byte strings is returned. I think that there 
should be a keyword argument to override this selection.

--
components: Library (Lib)
messages: 266093
nosy: abacabadabacaba
priority: normal
severity: normal
status: open
title: Make it possible to select return type for os.listdir
type: enhancement
versions: Python 3.6

___
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue27085>
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue25996] Add support of file descriptor in os.scandir()

2016-05-22 Thread Evgeny Kapun

Changes by Evgeny Kapun <abacabadabac...@gmail.com>:


--
nosy: +abacabadabacaba

___
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue25996>
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue27084] Add dir_fd and follow_symlinks kwargs to os.listdir and os.scandir

2016-05-22 Thread Evgeny Kapun

New submission from Evgeny Kapun:

Many functions in os module support dir_fd and follow_symlinks keyword 
arguments. I think that os.listdir and os.scandir should do likewise.

See also: issue25996.

--
components: Library (Lib)
messages: 266091
nosy: abacabadabacaba
priority: normal
severity: normal
status: open
title: Add dir_fd and follow_symlinks kwargs to os.listdir and os.scandir
type: enhancement
versions: Python 3.6

___
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue27084>
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue26254] ssl should raise an exception when trying to load an unusable key (ECC key not using a named curve)

2016-02-01 Thread Evgeny Kapun

Evgeny Kapun added the comment:

So, it looks like OpenSSL doesn't support keys using arbitrary curves at all. 
Then why don't I get an exception when trying to load such a key? Instead it 
just quietly disables all authenticated ciphersuites (anonymous ciphersuites 
still work) and then I get a confusing exception about lack of shared ciphers. 
I think that if it can't use a key, it should raise an exception right away.

--
resolution: not a bug -> 
status: closed -> open
title: ssl server doesn't work with ECC certificates -> ssl should raise an 
exception when trying to load an unusable key (ECC key not using a named curve)

___
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue26254>
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue26254] ssl server doesn't work with ECC certificates

2016-01-31 Thread Evgeny Kapun

New submission from Evgeny Kapun:

I tried to use ssl module to create a server with a certificate that uses an 
ECC key. However, this didn't work. Here is how to reproduce this:

First, generate a key and a certificate:

$ openssl req -newkey ec -pkeyopt ec_paramgen_curve:prime256v1 -x509 
-keyout key.pem -out cert.pem
(type some passphrase, then just press Enter in response to the questions 
that it asks)

Then run this Python program:

from socket import socket
from ssl import wrap_socket
s = socket()
s.bind(('localhost', 12345))
s.listen()
wrap_socket(s.accept()[0], 'key.pem', 'cert.pem', True)

This program will wait for a connection, so try to connect:

$ openssl s_client -connect localhost:12345

The program will ask for a passphrase, so type it. After that, you will get an 
exception:

Traceback (most recent call last):
  File "test.py", line 6, in 
wrap_socket(s.accept()[0], 'key.pem', 'cert.pem', True)
  File "/usr/lib/python3.5/ssl.py", line 1064, in wrap_socket
ciphers=ciphers)
  File "/usr/lib/python3.5/ssl.py", line 747, in __init__
self.do_handshake()
  File "/usr/lib/python3.5/ssl.py", line 983, in do_handshake
self._sslobj.do_handshake()
  File "/usr/lib/python3.5/ssl.py", line 628, in do_handshake
self._sslobj.do_handshake()
ssl.SSLError: [SSL: NO_SHARED_CIPHER] no shared cipher (_ssl.c:645)

If the certificate uses RSA key, it works. With ECC, I had no luck. I tried 
creating a context explicitly and using set_ciphers method to enable more 
ciphers. While it appears to support ECDSA ciphersuites, it can't use them for 
some reason.

--
components: Extension Modules
messages: 259305
nosy: abacabadabacaba
priority: normal
severity: normal
status: open
title: ssl server doesn't work with ECC certificates
type: behavior
versions: Python 3.5

___
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue26254>
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue2142] difflib.unified_diff(...) produces invalid patches

2015-11-04 Thread Evgeny Kapun

Changes by Evgeny Kapun <abacabadabac...@gmail.com>:


--
nosy: +abacabadabacaba

___
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue2142>
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue18531] Undocumented different between METH_KEYWORDS and **kws

2015-10-30 Thread Evgeny Kapun

Changes by Evgeny Kapun <abacabadabac...@gmail.com>:


--
nosy: +abacabadabacaba

___
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue18531>
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue25454] operator.methodcaller should accept additional arguments during the call

2015-10-25 Thread Evgeny Kapun

Evgeny Kapun added the comment:

There are methods that accept a single argument and behave like a binary 
operation or a predicate. It would be useful to be able to turn them into 
binary functions for use with higher-order functions like map and reduce:

reduce(methodcaller("combine"), objs) # reduce a sequence using "combine" 
method
map(methodcaller("combine"), alist, blist) # combine pairs of elements
all(map(methodcaller("compatible_with"), alist, blist)) # check that pairs 
of elements are compatible

This functionality is already available for overloaded operators, because 
operator module provides them as functions. Some methods behave similarly to 
operators, so I think that a similar functionality should be available for them 
as well.

--

___
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue25454>
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue25454] operator.methodcaller should accept additional arguments during the call

2015-10-21 Thread Evgeny Kapun

New submission from Evgeny Kapun:

Currently, operator.methodcaller behaves like this:

def methodcaller(name, *args, **kwargs):
def caller(obj):
return getattr(obj, name)(*args, **kwargs)
return caller

That is, it is possible to supply arguments when the object is created but not 
during the call. I think that it will be more useful if it behaved like this:

def methodcaller(name, *args, **kwargs):
def caller(obj, *args2, **kwargs2):
return getattr(obj, name)(*args, *args2, **kwargs, **kwargs2)
return caller

--
components: Extension Modules
messages: 253307
nosy: abacabadabacaba
priority: normal
severity: normal
status: open
title: operator.methodcaller should accept additional arguments during the call
type: enhancement
versions: Python 3.5, Python 3.6

___
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue25454>
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue25455] Some repr implementations don't check for self-referential structures

2015-10-21 Thread Evgeny Kapun

New submission from Evgeny Kapun:

Implementations of repr for some of the types in the standard library doesn't 
check for self-referential structures. As a result, when calling repr() on such 
objects, Python crashes due to infinite recursion.

Example:
>>> import functools
>>> x = functools.partial(min)
>>> x.__setstate__((x, (), {}, {}))
>>> repr(x)
Segmentation fault

Another example:
>>> import xml.etree.ElementTree
>>> x = xml.etree.ElementTree.Element('')
>>> x.tag = x
>>> repr(x)
Segmentation fault

One more example:
>>> import io
>>> class X(io.TextIOWrapper): __slots__ = 'name'
>>> x = X(open('/dev/null'))
>>> x.name = x
>>> repr(x)
Segmentation fault

--
components: Extension Modules
messages: 253309
nosy: abacabadabacaba
priority: normal
severity: normal
status: open
title: Some repr implementations don't check for self-referential structures
type: crash
versions: Python 3.5, Python 3.6

___
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue25455>
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue24129] Incorrect (misleading) statement in the execution model documentation

2015-06-22 Thread Evgeny Kapun

Changes by Evgeny Kapun abacabadabac...@gmail.com:


--
nosy: +abacabadabacaba

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue24129
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue24260] TabError behavior doesn't match documentation

2015-05-24 Thread Evgeny Kapun

Evgeny Kapun added the comment:

Prohibiting tabs after spaces is not enough. For example, Python rejects this 
code:

if 1:
spaceif 1:
tabpass

because its indentation is invalid if tab width is 1. However, it accepts this 
code:

if 1:
tabif 1:
10 spacespass

despite its indentation being invalid if tab width is 10 or more.

--

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue24260
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue24260] TabError behavior doesn't match documentation

2015-05-21 Thread Evgeny Kapun

New submission from Evgeny Kapun:

In the documentation, it is said:

Indentation is rejected as inconsistent if a source file mixes tabs and 
spaces in a way that makes the meaning dependent on the worth of a tab in 
spaces; a TabError is raised in that case.

But that's not true. For example, Python thinks that these two indentations are 
consistent:

tab8 spaces
8 spacestab

However, their width would be different for any tab width except 1, 2, 4, and 8.

Actually, it's not easy to check that indentation is consistent as it is 
defined currently, so I think that it is the documentation that should be 
changed. So, I think that the paragraph that I quoted above should be changed 
to match the actual behavior.

--
components: Interpreter Core
messages: 243794
nosy: abacabadabacaba
priority: normal
severity: normal
status: open
title: TabError behavior doesn't match documentation
type: behavior
versions: Python 3.4

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue24260
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue24261] Add a command line flag to suppress default signal handlers

2015-05-21 Thread Evgeny Kapun

New submission from Evgeny Kapun:

Currently, Python always changes handling of certain signals on startup: 
SIGPIPE is ignored, and SIGINT is handled by a function that raises 
KeyboardInterrupt exception. As a result, if the user presses Ctrl-C, a 
backtrace is printed to stderr.

Some program may want to change this behavior. For example, they may want to 
print a user-friendly message, or to terminate without printing anything. They 
may do that by two means: either by installing their own handler for SIGINT, or 
by using a try..except block to handle the KeyboardInterrupt exception. 
However, they both have a flaw: if SIGINT is received during startup, before 
the program begins execution, the ugly KeyboardInterrupt backtrace is printed 
nevertheless. So, I propose to add a way to stop Python from installing this 
default SIGINT handler. I think that the most obvious way is to add a command 
line switch.

This switch should prevent Python from installing its SIGINT handler. It may 
also prevent it from ignoring SIGPIPE, so that all signal actions would stay 
the same as when the program was executed. After that, programs may use signal 
module to set up their own handlers, if that is desired.

--
components: Interpreter Core
messages: 243795
nosy: abacabadabacaba
priority: normal
severity: normal
status: open
title: Add a command line flag to suppress default signal handlers
type: enhancement

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue24261
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue14228] Don't display traceback when import site is interrupted by CTRL+c

2015-05-21 Thread Evgeny Kapun

Changes by Evgeny Kapun abacabadabac...@gmail.com:


--
nosy: +abacabadabacaba

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue14228
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue22672] float arguments in scientific notation not supported by argparse

2015-03-28 Thread Evgeny Kapun

Changes by Evgeny Kapun abacabadabac...@gmail.com:


--
nosy: +abacabadabacaba

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue22672
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue23689] Memory leak in Modules/sre_lib.h

2015-03-18 Thread Evgeny Kapun

Evgeny Kapun added the comment:

This patch doesn't fix the issue. The problem is that the list starting with 
state-repeat doesn't necessarily contains all repeat contexts that are 
allocated. Indeed, here [1] and here [2] repeat contexts are temporarily 
removed from the list. If the match procedure terminates abruptly, they are not 
added back.

[1] https://hg.python.org/cpython/file/c89f7c34e356/Modules/sre_lib.h#l963
[2] https://hg.python.org/cpython/file/c89f7c34e356/Modules/sre_lib.h#l1002

--

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue23689
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue2636] Adding a new regex module (compatible with re)

2015-03-18 Thread Evgeny Kapun

Changes by Evgeny Kapun abacabadabac...@gmail.com:


--
nosy: +abacabadabacaba

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue2636
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue23689] Memory leak in Modules/sre_lib.h

2015-03-17 Thread Evgeny Kapun

Evgeny Kapun added the comment:

Memory leak only happens if match operation terminates abruptly, e.g. because 
of SIGINT. In this case, DO_JUMP doesn't come back.

--

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue23689
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue23689] Memory leak in Modules/sre_lib.h

2015-03-17 Thread Evgeny Kapun

Evgeny Kapun added the comment:

Tracemalloc code:

import re
import signal
import tracemalloc

class AlarmError(Exception):
pass
def handle_alarm(signal, frame):
raise AlarmError
signal.signal(signal.SIGALRM, handle_alarm)

s1 = tracemalloc.take_snapshot()
for _ in range(20):
try:
signal.alarm(1)
re.match('(?:a|a|(?=b)){1000}', 'a'*999)
raise RuntimeError
except AlarmError:
pass
s2 = tracemalloc.take_snapshot()
res = s2.compare_to(s1, 'lineno')
for e in res[:10]:
print(e)

For me, it shows almost 3 MiB allocated in re.py.

--

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue23689
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue23691] re.finditer iterator is not reentrant, but doesn't protect against nested calls to __next__

2015-03-17 Thread Evgeny Kapun

New submission from Evgeny Kapun:

Iterator returned by re.finditer includes a SRE_STATE value, which is not 
designed to be used concurrently. However, it is possible to call __next__ on 
such iterator while another such call is in progress, e.g. from a signal 
handler. This may result in corruption of SRE_STATE structure.

--
components: Regular Expressions
messages: 238323
nosy: abacabadabacaba, ezio.melotti, mrabarnett
priority: normal
severity: normal
status: open
title: re.finditer iterator is not reentrant, but doesn't protect against 
nested calls to __next__
type: crash
versions: Python 3.4

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue23691
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue9134] sre bug: lastmark_save/restore

2015-03-17 Thread Evgeny Kapun

Changes by Evgeny Kapun abacabadabac...@gmail.com:


--
nosy: +abacabadabacaba

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue9134
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue23690] re functions never release GIL

2015-03-17 Thread Evgeny Kapun

Evgeny Kapun added the comment:

Aren't Python strings immutable?

Also, match functions still permit execution of signal handlers, which can 
execute any Python code.

If GIL is needed during matching, can it be released temporarily to permit 
thread switching?

--

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue23690
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue433030] SRE: Atomic Grouping (?...) is not supported

2015-03-17 Thread Evgeny Kapun

Changes by Evgeny Kapun abacabadabac...@gmail.com:


--
nosy: +abacabadabacaba

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue433030
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue23692] Undocumented feature prevents re module from finding certain matches

2015-03-17 Thread Evgeny Kapun

New submission from Evgeny Kapun:

This pattern matches:

re.match('(?:()|(?(1)()|z)){2}(?(2)a|z)', 'a')

But this doesn't:

re.match('(?:()|(?(1)()|z)){0,2}(?(2)a|z)', 'a')

The difference is that {2} is replaced by {0,2}. This shouldn't prevent the 
pattern from matching anywhere where it matched before.

The reason for this misbehavior is a feature which is designed to protect re 
engine from infinite loops, but in fact it sometimes prevents patterns from 
matching where they should. I think that this feature should be at least 
properly documented, by properly I mean that it should be possible to 
reconstruct the exact behavior from documentation, as the implementation is not 
particularly easy to understand.

--
components: Regular Expressions
messages: 238330
nosy: abacabadabacaba, ezio.melotti, mrabarnett
priority: normal
severity: normal
status: open
title: Undocumented feature prevents re module from finding certain matches
type: behavior
versions: Python 3.4

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue23692
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue23689] Memory leak in Modules/sre_lib.h

2015-03-17 Thread Evgeny Kapun

New submission from Evgeny Kapun:

In Modules/sre_lib.h on line 882 [1], a block of memory is allocated. If 
SRE(match) function later terminates abruptly, either because of a signal or 
because subsequent memory allocation fails, this block is never released.

[1] https://hg.python.org/cpython/file/c89f7c34e356/Modules/sre_lib.h#l882

--
components: Regular Expressions
messages: 238313
nosy: abacabadabacaba, ezio.melotti, mrabarnett
priority: normal
severity: normal
status: open
title: Memory leak in Modules/sre_lib.h
type: resource usage
versions: Python 3.4

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue23689
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue23690] re functions never release GIL

2015-03-17 Thread Evgeny Kapun

New submission from Evgeny Kapun:

Looks like function in re module (match, fullmatch and so on) don't release 
GIL, even though these operations can take much time. As a result, other 
threads can't run while a pattern is being matched, and thread switching 
doesn't happen as well.

--
components: Regular Expressions
messages: 238316
nosy: abacabadabacaba, ezio.melotti, mrabarnett
priority: normal
severity: normal
status: open
title: re functions never release GIL
type: resource usage
versions: Python 3.4

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue23690
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue22609] Constructors of some mapping classes don't accept `self` keyword argument

2014-10-11 Thread Evgeny Kapun

New submission from Evgeny Kapun:

 import collections
 collections.Counter(self=1)
Traceback (most recent call last):
  File stdin, line 1, in module
TypeError: __init__() got multiple values for argument 'self'
 collections.OrderedDict(self=test)
Traceback (most recent call last):
  File stdin, line 1, in module
TypeError: __init__() got multiple values for argument 'self'
 collections.UserDict(self=test)
Traceback (most recent call last):
  File stdin, line 1, in module
TypeError: __init__() got multiple values for argument 'self'

Python surely should have positional-only parameters.

--
components: Library (Lib)
messages: 229076
nosy: abacabadabacaba
priority: normal
severity: normal
status: open
title: Constructors of some mapping classes don't accept `self` keyword argument
type: behavior
versions: Python 3.4

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue22609
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue22524] PEP 471 implementation: os.scandir() directory scanning function

2014-09-30 Thread Evgeny Kapun

Changes by Evgeny Kapun abacabadabac...@gmail.com:


--
nosy: +abacabadabacaba

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue22524
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue7434] general pprint rewrite

2013-11-17 Thread Evgeny Kapun

Changes by Evgeny Kapun abacabadabac...@gmail.com:


--
nosy: +abacabadabacaba

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue7434
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue19005] PyIter_Next crashes if passed a non-iterator

2013-09-11 Thread Evgeny Kapun

New submission from Evgeny Kapun:

According to the documentation, PyIter_Next should raise TypeError if passed an 
object which is not an iterator as an argument. Instead, it calls a function 
through a null pointer, which leads to a crash.

--
components: Interpreter Core
messages: 197483
nosy: abacabadabacaba
priority: normal
severity: normal
status: open
title: PyIter_Next crashes if passed a non-iterator
type: crash
versions: Python 3.3

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue19005
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue17899] os.listdir() leaks FDs if invoked on FD pointing to a non-directory

2013-05-04 Thread Evgeny Kapun

Evgeny Kapun added the comment:

To make fdopendir fail, just pass any valid FD which points to a non-directory, 
such as a file or a pipe.

--

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue17899
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue17899] os.listdir() leaks FDs if invoked on FD pointing to a non-directory

2013-05-04 Thread Evgeny Kapun

Evgeny Kapun added the comment:

Simple test:

while True:
try:
listdir(0)
except NotADirectoryError:
pass

--

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue17899
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue11406] There is no os.listdir() equivalent returning generator instead of list

2013-05-03 Thread Evgeny Kapun

Changes by Evgeny Kapun abacabadabac...@gmail.com:


--
nosy: +abacabadabacaba

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue11406
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue17899] os.listdir() leaks FDs if invoked on FD pointing to a non-directory

2013-05-03 Thread Evgeny Kapun

New submission from Evgeny Kapun:

When called with a file descriptor as an argument, os.listdir() duplicates it 
to pass to fdopendir(3). If this call fails, the new file descriptor is not 
closed, which leads to file descriptor leak.

--
components: Library (Lib)
messages: 188322
nosy: abacabadabacaba
priority: normal
severity: normal
status: open
title: os.listdir() leaks FDs if invoked on FD pointing to a non-directory
type: resource usage
versions: Python 3.3, Python 3.4

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue17899
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue9334] argparse does not accept options taking arguments beginning with dash (regression from optparse)

2013-03-14 Thread Evgeny Kapun

Evgeny Kapun added the comment:

The way how argparse currently parses option arguments is broken. If a long 
option requires an argument and it's value isn't specified together with the 
option (using --option=value syntax), then the following argument should be 
interpreted as that value, no matter what it looks like. There should be no 
guesses or heuristics here. That the behavior depends on whether some argument 
looks like a negative number is the most horrible. Argument parsing should 
follow simple, deterministic rules, preferably the same that used by standard 
getopt(3).

--

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue9334
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue9334] argparse does not accept options taking arguments beginning with dash (regression from optparse)

2013-03-02 Thread Evgeny Kapun

Changes by Evgeny Kapun abacabadabac...@gmail.com:


--
nosy: +abacabadabacaba

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue9334
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue1508475] transparent gzip compression in urllib

2012-03-04 Thread Evgeny Kapun

Changes by Evgeny Kapun abacabadabac...@gmail.com:


--
nosy: +abacabadabacaba

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue1508475
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue12983] byte string literals with invalid hex escape codes raise ValueError instead of SyntaxError

2011-09-15 Thread Evgeny Kapun

Changes by Evgeny Kapun abacabadabac...@gmail.com:


--
nosy: +abacabadabacaba

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue12983
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue12729] Python lib re cannot handle Unicode properly due to narrow/wide bug

2011-09-15 Thread Evgeny Kapun

Changes by Evgeny Kapun abacabadabac...@gmail.com:


--
nosy: +abacabadabacaba

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue12729
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue12464] tempfile.TemporaryDirectory.cleanup follows symbolic links

2011-07-01 Thread Evgeny Kapun

New submission from Evgeny Kapun abacabadabac...@gmail.com:

TemporaryDirectory.cleanup follows symbolic links to directories and tries to 
clean them as well. Try this (on Linux):

import os, tempfile
with tempfile.TemporaryDirectory() as d:
os.symlink(/proc, d + /test)

--
components: Library (Lib)
messages: 139571
nosy: abacabadabacaba
priority: normal
severity: normal
status: open
title: tempfile.TemporaryDirectory.cleanup follows symbolic links
type: behavior
versions: Python 3.2, Python 3.3

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue12464
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue12465] gc.get_referents can be used to crash Python

2011-07-01 Thread Evgeny Kapun

New submission from Evgeny Kapun abacabadabac...@gmail.com:

This code crashes Python:

import gc
gc.get_referents(object.__dict__)[0].clear()
gc.get_referents(type.__dict__)[0].clear()
type(A, (), {})()

--
components: Interpreter Core
messages: 139572
nosy: abacabadabacaba
priority: normal
severity: normal
status: open
title: gc.get_referents can be used to crash Python
type: crash
versions: Python 2.7, Python 3.3

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue12465
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue10451] memoryview can be used to write into readonly buffer

2010-11-17 Thread Evgeny Kapun

New submission from Evgeny Kapun abacabadabac...@gmail.com:

This code crashes Python:

import io, mmap
io.BytesIO(b' ').readinto(memoryview(mmap.mmap(-1, 1, prot=mmap.PROT_READ)))

--
components: Interpreter Core
messages: 121446
nosy: abacabadabacaba
priority: normal
severity: normal
status: open
title: memoryview can be used to write into readonly buffer
type: crash
versions: Python 3.1, Python 3.2

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue10451
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com