[issue34729] bz2/lzma: Compressor/decompressor crash if __init__ is not called

2018-09-18 Thread Berker Peksag


Berker Peksag  added the comment:

We can definitely make the title of that issue more descriptive. Feel free to 
change it -- IIRC, you don't need additional permissions to change the title of 
an issue. Thanks!

--

___
Python tracker 

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



[issue34729] bz2/lzma: Compressor/decompressor crash if __init__ is not called

2018-09-18 Thread Alexey Izbyshev


Alexey Izbyshev  added the comment:

Reclosing (browser cache problem).

--
resolution:  -> duplicate
stage: needs patch -> resolved
status: open -> closed

___
Python tracker 

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



[issue34729] bz2/lzma: Compressor/decompressor crash if __init__ is not called

2018-09-18 Thread Alexey Izbyshev


Alexey Izbyshev  added the comment:

I somehow failed to notice #23224 when I searched the tracker. You're right, 
it's the same, and, moreover, PR 7822 fixes problem with both compressors and 
decompressors (though it includes tests only for the latter for some reason).

I think that this report should be closed as duplicate, but should we also 
change the title of #23224 to be more general?

--
resolution: duplicate -> 

___
Python tracker 

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



[issue34729] bz2/lzma: Compressor/decompressor crash if __init__ is not called

2018-09-18 Thread Berker Peksag


Berker Peksag  added the comment:

I think we usually went with option 1 when we fixed similar issues in the past.

See also issue 23224 for the same problem in *Decompressor classes of lzma and 
bz2 modules. It looks like the attached PR to that issue went with option 2: PR 
7822.

Perhaps we can combine this and issue 23224.

--
resolution:  -> duplicate
stage:  -> needs patch
superseder:  -> LZMADecompressor object is only initialized in __init__

___
Python tracker 

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



[issue34729] bz2/lzma: Compressor/decompressor crash if __init__ is not called

2018-09-18 Thread Alexey Izbyshev


New submission from Alexey Izbyshev :

The compressor/decompressor classes from bz2 and lzma modules rely on 
__init__() for initialization, but it is not guaranteed to be called. Method 
calls on an uninitialized object crash:

>>> from bz2 import BZ2Compressor as C
>>> c = C.__new__(C)
>>> c.compress(b'')
Segmentation fault (core dumped)

I see two ways to fix this:

1) Move some initialization (notably, for "lock" field) to __new__() and add 
initialization checks to other methods. This should be backwards-compatible.

2) Move all initialization to __new__(). Since compressor/decompressor classes 
are not subclassable, it'll break only code than repeatedly calls __init__() on 
the same object. The simplicity of the fix might outweigh the necessity to 
support such code.
(However, in 2.7, classes in bz2 *are* subclassable; lzma is not present in 
2.7).

Which way is more preferable?

--
components: Extension Modules
messages: 325691
nosy: berker.peksag, izbyshev, serhiy.storchaka
priority: normal
severity: normal
status: open
title: bz2/lzma: Compressor/decompressor crash if __init__ is not called
type: crash
versions: Python 2.7, Python 3.6, Python 3.7, Python 3.8

___
Python tracker 

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