New submission from Alexander Riccio <[email protected]>:
This popped out at me while looking for something else. It's probably not much
of an actual problem, since the wrong datatype is larger than the correct one,
but it's worth fixing.
The problem is in overlapped_RegisterWaitWithQueue, at overlapped.c:297 (in
_overlapped):
if (!RegisterWaitForSingleObject(
&NewWaitObject, Object, (WAITORTIMERCALLBACK)PostToQueueCallback,
pdata, Milliseconds,
WT_EXECUTEINWAITTHREAD | WT_EXECUTEONLYONCE))
...it stood out to me immediately while I was paging past, since function
pointer casts of this sort are almost always wrong, and I've seen it too many
times.
WAITORTIMERCALLBACK is a typedef of WAITORTIMERCALLBACKFUNC:
typedef VOID (NTAPI * WAITORTIMERCALLBACKFUNC) (PVOID, BOOLEAN );
...and PostToQueueCallback is defined as:
static VOID CALLBACK
PostToQueueCallback(PVOID lpParameter, BOOL TimerOrWaitFired)
...where BOOL is an int, and BOOLEAN is an unsigned char. I guess there could
be some kind of issue down the line if the generated code tries to read the
BOOLEAN/int from the register/memory location where there's actually an
unsigned char, but after about an hour of debugging, I can't see it. The
documentation also states explicitly that this should be either TRUE or FALSE.
Also, it doesn't matter what we actually pass to PostQueuedCompletionStatus:
https://devblogs.microsoft.com/oldnewthing/20070525-00/?p=26693
By changing the (incorrect) BOOL declaration to BOOLEAN, then we don't need the
cast.
----------
components: IO
messages: 365565
nosy: Alexander Riccio
priority: normal
severity: normal
status: open
title: (minor) mismatched argument in overlapped_RegisterWaitWithQueue call to
RegisterWaitForSingleObject
versions: Python 3.9
_______________________________________
Python tracker <[email protected]>
<https://bugs.python.org/issue40150>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com