In libclamav: if zlib version at runtime is older than at compile time, warn.
If they are the same, or newer don't warn.
clamconf warns always on mismatch.
Mismatch can happen if:
- you build zlib yourself, but as static lib and compiler picks old shared lib
(but new headers!)
- you have 2 zlibs installed, and the old one takes precedence
Libclamav doesn't warn about mismatches due to zlib upgrades since this is
normal.
LLVM 2.7 has a bug, where it generates CMOV even on CPUs without CMOV.
2.8 has it fixed, which we'll update to in 0.97 only, so disable JIT on these
old CPUs for now.
Do not reset filesize to 0.
Otherwise only the 1st bytecode executed in a hook can really scan the file,
all further bytecodes executed in same hook will fail to read anything from the
file.
They were not working on the interpreter, interpreter was seeing bounds errors
where there weren't any.
The 2nd parameter is a count, not a pointer size, the pointer's size
is a constant. Override the size for now.
This allows pointers to local stack variables to work correctly after a call.
Previously stackid was not restored, which caused bytecode_vm to stop bytecodes,
claiming it overrun the stack, when in fact it didn't.
(stackid stores stack size).
memcmp does 8-byte reads if length > 8, which might cross a page-boundary and
crash. Not strictly a memcmp bug, since manpage doesn't say that memcmp must stop at
first difference. Linux doesn't crash because it only does 4/8-byte reads on 4/8-byte aligned
addresses, hence it can never cross a page boundary.
Fix this by making sure that what we request from memcmp is entirely readable.
You can now build with both the internal (patched) LLVM 2.7,
or an external LLVM 2.8rc.
To build with external do this:
./configure --enable-llvm --with-system-llvm=/path/to/llvm-config
This will link against the external LLVM's .a files (they are PIC), so
LLVM will stay only a build time dependency.