Newer versions of VS and Windows use ASLR for security purposes, meaning
that the module may be relocated from what is expected by the linker map
file. While we could kludge around that by disabling ASLR, it would be
better to just map the actual stack addresses to the expected addresses.
This also simplifies all of the weird segment math to simply use the
rvabase value in the map file.
The affected code was ported from H'uru where NetVaultNode has a zeroing
constructor. OU does not have a zeroing constructor for this class, and
instead assumes that all allocations will be done with NEWZERO (there is
a debug mode assertion to this effect). The result of the improper
allocation is that the node fields flag could be garbage, causing a
vault node with random contents to be written to the server.
Unfortunately, NetVaultNode::Read_LCS is not extremely resilient to
reading in unexpected data, so this may result in a crash.
Some of the Python code expects for explicit Age initialization to
complete immediately. Rewriting that would be something of a chore, so
this will prevent first time clicks on the Er'cana and Ahnoying
Cathedral books from causing a perma-stick.
Homologue of H'uru commit ec0aecd202
H-uru:
From f45679a54f Mon Sep 17 00:00:00 2001
From: Adam Johnson <AdamJohnso@gmail.com>
Date: Sun, 15 Jan 2012 18:35:05 -0500
Subject: [PATCH] Make pyVault::AddChronicleEntry a blocking operation to avoid
a race condition
Fixes a reference counting issue that prevents non-DirectXCompressed
mipmaps from being used in GUI Lists (eg as icons for avatar clothing).
All future clothing PRPs produced by CreateClothingPRP.py will depend on
this change.