cache1d.c: Revert changes in r4665 unrelated to unrolling, fixing oob write.

Specifically, we must make sure that dasizeof <= LZWSIZE (or so) in
c1d_{read,write}_compressed() (what the assertion in the last commit was about,
and is now redundant). This fixes saving of e.g. large gamearrays with the C-CON
build. Bump BYTEVERSION.

An alternative for setting dasizeof to 1 would be to factor it and keep dividing
as long as it's > LZWSIZE.

git-svn-id: https://svn.eduke32.com/eduke32@4838 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
helixhorned 2014-12-26 17:29:55 +00:00
parent b7805868f7
commit 7da543e4f0
2 changed files with 7 additions and 27 deletions

View file

@ -1466,26 +1466,16 @@ C1D_STATIC int32_t c1d_read_compressed(void *buffer, bsize_t dasizeof, bsize_t c
char *ptr = (char *)buffer;
if (dasizeof > LZWSIZE)
{
if (count > LZWSIZE)
{
count *= dasizeof;
dasizeof = 1;
}
else
{
uint32_t i = count;
count = dasizeof;
dasizeof = i;
}
}
uint32_t kgoal;
if (decompress_part(f, &kgoal))
return -1;
Bassert(dasizeof < sizeof(lzwrawbuf));
Bmemcpy(ptr, lzwrawbuf, (int32_t)dasizeof);
uint32_t k = (int32_t)dasizeof;
@ -1545,22 +1535,12 @@ C1D_STATIC void c1d_write_compressed(const void *buffer, bsize_t dasizeof, bsize
{
const char *ptr = (char*)buffer;
if (dasizeof > LZWSIZE && count > LZWSIZE)
{
if (count > LZWSIZE)
if (dasizeof > LZWSIZE)
{
count *= dasizeof;
dasizeof = 1;
}
else
{
uint32_t i = count;
count = dasizeof;
dasizeof = i;
}
}
Bassert(dasizeof < sizeof(lzwrawbuf));
Bmemcpy(lzwrawbuf, ptr, (int32_t)dasizeof);
uint32_t k = dasizeof;

View file

@ -55,10 +55,10 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
// increase by 3, because atomic GRP adds 1, and Shareware adds 2
#ifdef LUNATIC
// Lunatic
# define BYTEVERSION_JF 294
# define BYTEVERSION_JF 297
#else
// Non-Lua build
# define BYTEVERSION_JF 294
# define BYTEVERSION_JF 297
#endif
//#define BYTEVERSION_13 27