Commit 518e394794160818ffe6826c874ff2f550c95bbb introduced new and important default behavior for PE binaries built using `winegcc`/`wineg++`/`winebuild`.
* `/DYNAMICBASE` - Generates an executable image that can be randomly rebased at load time by using the address space layout randomization (ASLR) feature of Windows that was first available in Windows Vista.
* `/HIGHENTROPYVA` - Randomized 64-bit virtual addresses make it more difficult for an attacker to guess the location of a particular memory region.
... however as identified in https://bugs.winehq.org/show_bug.cgi?id=58480, this new default behavior can severely impact applications that interact with binaries created for Windows XP and older. This is quite common for legacy audio plugins, such as VST2(TM) plugins.
This MR keeps the new default "dynamicbase" and "highentropyva" flags by default, but mirrors the mingw/msys2 `--disable-dynamicbase` flag as explained here: https://www.msys2.org/news/#2021-01-31-aslr-enabled-by-default. MSVC also provides a similarly named flag [here](https://learn.microsoft.com/en-us/cpp/build/reference/dynamicbase).
Downstream, the LMMS project has successfully deployed the mingw flag and the MSVC flag for our Windows builds. Our Linux builds use a custom wine-bridge and would benefit from the same.
We've currently tested this MR downstream against a snapshot of master branch to passing results.
Downstream PRs:
* Linux: https://github.com/LMMS/lmms/pull/7987
* Windows: https://github.com/LMMS/lmms/pull/7976
--
v2: Spit up DYNAMICBASE and HIGHENTROPYVA
https://gitlab.winehq.org/wine/wine/-/merge_requests/8786
--
v2: jscript: Fix error value when passing non-string 'this' to String's toString.
jscript: Fallback to Object's toString for Arrays when 'this' isn't an
jscript: Return proper error when passing wrong type to Function.apply.
jscript: Allow objects that expose "length" prop for Function.apply under
https://gitlab.winehq.org/wine/wine/-/merge_requests/8781
Supersedes https://gitlab.winehq.org/wine/wine/-/merge_requests/8338
The header cannot seem to be generated easily from an IDL, gameinput has some unfortunate versioning which reuses the same identifiers across versions, in an incompatible way and sometimes sharing only a subset of them (for instance enum values), and uses C++ namespaces to separate versions.
The implementation needs to support every interface version at the same time, which is implemented by wrapping identifiers and adding version suffixes whenever it is included by the implementing code. The tests are also using that so we can tests multiple versions in the same file.
--
v3: dinput/tests: Add some gameinput tests.
gameinput: Introduce new DLL.
include: Add gameinput.h.
https://gitlab.winehq.org/wine/wine/-/merge_requests/8733
On Wed Aug 20 11:26:51 2025 +0000, Nikolay Sivov wrote:
> I'm talking about changes to VarAnd implementation - what we need is a
> least a helper that implements such type coercing with progressively
> larger integer types. Or better using something from oleaut32 itself to
> do such type conversion. It's most likely not limited to VarAnd().
Yes, you're right. We can write a helper function to handle type coercion.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/8635#note_113273
Order of day or month and time or year needs to be considered.
The year also needs to be adjusted correctly.
--
v3: wininet/internet: Fix year parsing to include millennium.
https://gitlab.winehq.org/wine/wine/-/merge_requests/8614