http://bugs.winehq.org/show_bug.cgi?id=26969
Night Nord NightNord@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Summary|acmStreamConvert fails |acmStreamConvert fails |struct size check on win64 |struct check on win64 while |while winecfg audio test |winecfg audio test
--- Comment #2 from Night Nord NightNord@gmail.com 2011-04-30 05:46:09 CDT --- Oh, I'm sorry, missed the line. Correct error lines are dlls/msacm32/stream.c:112-115:
111 /* check that pointers have not been modified */ 112 if (padsh->pbPreparedSrc != padsh->pbSrc || 113 padsh->cbPreparedSrcLength < padsh->cbSrcLength || 114 padsh->pbPreparedDst != padsh->pbDst || 115 padsh->cbPreparedDstLength < padsh->cbDstLength) {
Also, I've hacked stream.c adding TRACE to acmStreamPrepareHeader with sizeof outputs for ACMSTREAMHEADER and ACMDRVSTREAMHEADER, just after the comment: 316 /* Note: the ACMSTREAMHEADER and ACMDRVSTREAMHEADER structs are of same 317 * size. some fields are private to msacm internals, and are exposed 318 * in ACMSTREAMHEADER in the dwReservedDriver array 319 */
For win32 it is: trace:msacm:acmStreamPrepareHeader sizeof(PACMDRVSTREAMHEADER) = 84, sizeof(ACMSTREAMHEADER) = 84
For win64 it is: trace:msacm:acmStreamPrepareHeader sizeof(PACMDRVSTREAMHEADER) = 144, sizeof(ACMSTREAMHEADER) = 124
That's on gcc-4.6.0. There is similar reports from Fedora 15 users [1], which is also using gcc-4.6.0 [2]. Probably some align issues?
I'll patch acmStreamConvert and acmStreamPrepareHeader to TRACE out this pointer addresses, so it will be clear if they are changed due to memory overwrite.
[1] http://forums.fedoraforum.org/showthread.php?t=262080 [2] http://fedoraproject.org/wiki/Features/GCC46