| Commit message (Collapse) | Author | Files | Lines |
|
|
|
Upgrading to Ubuntu 18.04, which seems to have become more prone to
allocating process memory above the 4G boundary, has revealed that the
client code of the phony msi.dll functions is not in fact prepared to
accept arbitrary machine-word sized pointer values. It's expecting
32-bit handles, so we were segfaulting because MsiDatabaseImportW was
only being given the bottom 32 bits of the 64-bit pointer that
MsiOpenDatabaseW had returned.
So now I just keep a trivial registry of small integer handle values
and the pointers they map to. I don't even bother to recycle them -
the process isn't expected to run for long enough for me to care.
|
|
|
|
I made the mistake of using the same variable name _offset for the
temporary variable in WORD16 and WORD32, and for the one in BYTE which
the other two use as a subroutine - meaning that the declaration on
the first line of BYTE read 'size_t _offset = _offset+3' or similar,
in which the RHS _offset referred to the newly declared LHS one rather
than to the one in the outer scope.
WORD32 had the additional goof that I had declared its return-value
accumulator variable as a 16- rather than 32-bit integer due to
copy-and-paste error.
Between those two mistakes - surely introduced at the last minute when
I was doing code cleanup on this source base, because I know this
function was working OK before then - I had completely broken the
extraction of version strings from PE executables.
|
|
At the moment it only tests MsiGetFileVersion, because that's the
piece I just found a problem in, but I could easily extend it to have
convenient command-line test rigs for other parts of this setup too.
|
|
|
|
|
|
I don't know why those strange names seemed necessary to start with
and now don't seem to be. I probably changed something subtle
somewhere without noticing.
|
|
I did these in passing while looking for the bug in the previous
commit, and they seem like general improvements, so I'll keep them.
|
|
Every block I read was being condensed down to one byte.
|
|
That's what I get for actually trying to free my memory :-)
|
|
|
|
It's now a sensible source flie containing a set of routines that do
something coherently connected to each other, so it doesn't deserve
that 'fake-' prefix that I used for the previous monolithic files full
of tangled-together stuff.
While I'm here, I've also made up nicer (i.e. more distinguishable)
random magic numbers for the structure-type disambiguation.
|
|
Also tidy up some of the memory management, while I'm here.
|
|
This completes the removal of the monolithic fake-lib.[ch].
|
|
|
|
Also a handy #define to replace all those tedious castings of NULL.
|
|
Now any failing bounds check causes the whole function to fail, rather
than returning a made-up value.
|
|
|
|
|
|
This begins a programme of code reorganisation at the end of which I'd
like to end up with something almost legible :-)
|
|
Supersedes the hand-hacked Makefile I was previously working with.
|