Sebastian Ernst <er...@pleiszenburg.de> added the comment:

Thanks a lot for the clarification, Eryk. I did not notice that it was 
deprecated behavior.

For the "too many arguments" case I guess this is not an issue. However, just 
for the symmetry of things, I also looked at calling a function with TOO FEW 
arguments. 

```C
int16_t __stdcall __declspec(dllimport) mul_ints(
        int16_t a,
        int16_t b
        )
{
        return a * b;
}
```

```python
def test_error_callargs_unconfigured_too_few_args():

        dll = ctypes.windll.LoadLibrary('tests/demo_dll.dll')
        mul_ints = dll.mul_ints

        with pytest.raises(ValueError):
                a = mul_ints(7)
```

As expected after your explanation, also no error in CPython 3.8 (i.e. the test 
fails, while is passes on CPython <= 3.7). If I run this manually, I even get a 
"result":

```python
>>> dll = ctypes.windll.LoadLibrary('tests/demo_dll.dll')
>>> mul_ints = dll.mul_ints
>>> a = mul_ints(7)
>>> a
445564 # !
>>> 445564/7 # Just looking at where this result is coming from ...
63652.0
```

Re-starting Python (3.8) and (intentionally) misconfiguring the function 
interestingly also does not change the result:

```python
>>> dll = ctypes.windll.LoadLibrary('tests/demo_dll.dll')
>>> mul_ints = dll.mul_ints
>>> mul_ints.argtypes = (ctypes.c_int16,)
>>> a = mul_ints(7)                                      
>>> a
445564 # Apparently, this is deterministic?!?
```

Just out of curiosity, where is this data coming from?

This ONLY way to prevent things like this to happen is to actually correctly 
configure the function:

```python
>>> dll = ctypes.windll.LoadLibrary('tests/demo_dll.dll')
>>> mul_ints = dll.mul_ints
>>> mul_ints.argtypes = (ctypes.c_int16, ctypes.c_int16)
>>> mul_ints(7)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: this function takes 2 arguments (1 given)
```

This should very CLEARLY be mentioned in the documentation ...

----------

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

Reply via email to