This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

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
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 2022-04-11 14:57 by admin.

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.
Date User Action Args
2022-04-11 14:57:40adminsetgithub: 61038
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