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

@ -1467,17 +1467,8 @@ C1D_STATIC int32_t c1d_read_compressed(void *buffer, bsize_t dasizeof, bsize_t c
if (dasizeof > LZWSIZE) if (dasizeof > LZWSIZE)
{ {
if (count > LZWSIZE) count *= dasizeof;
{ dasizeof = 1;
count *= dasizeof;
dasizeof = 1;
}
else
{
uint32_t i = count;
count = dasizeof;
dasizeof = i;
}
} }
uint32_t kgoal; uint32_t kgoal;
@ -1485,7 +1476,6 @@ C1D_STATIC int32_t c1d_read_compressed(void *buffer, bsize_t dasizeof, bsize_t c
if (decompress_part(f, &kgoal)) if (decompress_part(f, &kgoal))
return -1; return -1;
Bassert(dasizeof < sizeof(lzwrawbuf));
Bmemcpy(ptr, lzwrawbuf, (int32_t)dasizeof); Bmemcpy(ptr, lzwrawbuf, (int32_t)dasizeof);
uint32_t k = (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; const char *ptr = (char*)buffer;
if (dasizeof > LZWSIZE && count > LZWSIZE) if (dasizeof > LZWSIZE)
{ {
if (count > LZWSIZE) count *= dasizeof;
{ dasizeof = 1;
count *= dasizeof;
dasizeof = 1;
}
else
{
uint32_t i = count;
count = dasizeof;
dasizeof = i;
}
} }
Bassert(dasizeof < sizeof(lzwrawbuf));
Bmemcpy(lzwrawbuf, ptr, (int32_t)dasizeof); Bmemcpy(lzwrawbuf, ptr, (int32_t)dasizeof);
uint32_t k = 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 // increase by 3, because atomic GRP adds 1, and Shareware adds 2
#ifdef LUNATIC #ifdef LUNATIC
// Lunatic // Lunatic
# define BYTEVERSION_JF 294 # define BYTEVERSION_JF 297
#else #else
// Non-Lua build // Non-Lua build
# define BYTEVERSION_JF 294 # define BYTEVERSION_JF 297
#endif #endif
//#define BYTEVERSION_13 27 //#define BYTEVERSION_13 27