classification
Title: ioctl mutate_flag behavior in regard to the buffer size limit
Type: Stage:
Components: Documentation, Extension Modules Versions: Python 3.10, Python 3.9, Python 3.8
process
Status: open Resolution:
Dependencies: Superseder:
Assigned To: docs@python Nosy List: Yuval.Weinbaum, docs@python, martin.panter
Priority: normal Keywords:

Created on 2013-01-01 14:56 by Yuval.Weinbaum, last changed 2020-11-06 22:43 by iritkatriel.

Messages (3)
msg178732 - (view) Author: Yuval Weinbaum (Yuval.Weinbaum) Date: 2013-01-01 14:56
In fcntl module, the documentation states the following regarding the mutate_flag in ioctl method:

***
If it is false, the buffer’s mutability is ignored and behaviour is as for a read-only buffer, except that the 1024 byte limit mentioned above is avoided – so long as the buffer you pass is as least as long as what the operating system wants to put there, things should work.
***

However, looking at the code (fcntlmodule.c) it seems that the 1024 bytes limitation is avoided when the mutate_flag is set to True (the opposite of what is stated in the doc).
msg223123 - (view) Author: Mark Lawrence (BreamoreBoy) * Date: 2014-07-15 17:18
@Yuval sorry about the delay in replying.  Can a *nix person comment on this please as I stick with Windows.
msg238579 - (view) Author: Martin Panter (martin.panter) * (Python committer) Date: 2015-03-19 23:10
Looking at the C code, if a writable buffer is passed, mutate_arg is false, and the buffer is longer than 1024 bytes, then a ValueError is raised:

>>> ioctl(0, 0, bytearray(2048), False)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: ioctl string arg too long

So it seems the implementation does not match the documentation’s claim that “the 1024 byte limit . . . is avoided”. IMO this is an implementation bug.

But instead of (or in addition to) fixing it, maybe we could consider removing “mutate_flag” parameter altogether. It was originally added as a backwards compatibility helper for Issue 555817 in Python 2.3, and changed to True by default in Python 2.5.
History
Date User Action Args
2020-11-06 22:43:18iritkatrielsetversions: + Python 3.8, Python 3.9, Python 3.10, - Python 2.6, Python 3.4
2019-03-15 22:24:57BreamoreBoysetnosy: - BreamoreBoy
2015-03-19 23:10:31martin.pantersetversions: + Python 3.4
nosy: + martin.panter

messages: + msg238579

components: + Extension Modules
2014-07-15 17:18:02BreamoreBoysetnosy: + BreamoreBoy
messages: + msg223123
2013-01-01 14:56:29Yuval.Weinbaumcreate