From 27f029dcb737b09e7f050533b29e0fd574cba23a Mon Sep 17 00:00:00 2001 From: Denis Pauk Date: Sun, 1 Oct 2023 00:13:53 +0300 Subject: [PATCH] Add .ent files hash checks #4 --- src/common/collision.c | 40 ++++++++++++++----- .../baseq2/{base2.ent => base2@0ae9.ent} | 0 .../baseq2/{base3.ent => base3@1597.ent} | 0 .../baseq2/{biggun.ent => biggun@2c96.ent} | 0 .../baseq2/{city1.ent => city1@1555.ent} | 0 .../baseq2/{city2.ent => city2@4cc5.ent} | 0 .../baseq2/{city3.ent => city3@1de5.ent} | 0 .../baseq2/{cool1.ent => cool1@0250.ent} | 0 .../baseq2/{hangar1.ent => hangar1@09a0.ent} | 0 .../baseq2/{jail5.ent => jail5@2ec5.ent} | 0 .../mapfixes/baseq2/{lab.ent => lab@c170.ent} | 0 .../baseq2/{train.ent => train@07c2.ent} | 0 .../baseq2/{waste3.ent => waste3@6a93.ent} | 0 .../juggernaut/{jug19.ent => jug19@a903.ent} | 0 14 files changed, 31 insertions(+), 9 deletions(-) rename stuff/mapfixes/baseq2/{base2.ent => base2@0ae9.ent} (100%) rename stuff/mapfixes/baseq2/{base3.ent => base3@1597.ent} (100%) rename stuff/mapfixes/baseq2/{biggun.ent => biggun@2c96.ent} (100%) rename stuff/mapfixes/baseq2/{city1.ent => city1@1555.ent} (100%) rename stuff/mapfixes/baseq2/{city2.ent => city2@4cc5.ent} (100%) rename stuff/mapfixes/baseq2/{city3.ent => city3@1de5.ent} (100%) rename stuff/mapfixes/baseq2/{cool1.ent => cool1@0250.ent} (100%) rename stuff/mapfixes/baseq2/{hangar1.ent => hangar1@09a0.ent} (100%) rename stuff/mapfixes/baseq2/{jail5.ent => jail5@2ec5.ent} (100%) rename stuff/mapfixes/baseq2/{lab.ent => lab@c170.ent} (100%) rename stuff/mapfixes/baseq2/{train.ent => train@07c2.ent} (100%) rename stuff/mapfixes/baseq2/{waste3.ent => waste3@6a93.ent} (100%) rename stuff/mapfixes/juggernaut/{jug19.ent => jug19@a903.ent} (100%) diff --git a/src/common/collision.c b/src/common/collision.c index aaf5ec81..f32c3828 100644 --- a/src/common/collision.c +++ b/src/common/collision.c @@ -1806,25 +1806,47 @@ CMod_LoadEntityString(lump_t *l, char *name) { if (sv_entfile->value) { - char s[MAX_QPATH]; - char *buffer = NULL; - int nameLen, bufLen; + char *buffer = NULL, entname[256]; + int nameLen, bufLen = -1; nameLen = strlen(name); - strcpy(s, name); - s[nameLen-3] = 'e'; s[nameLen-2] = 'n'; s[nameLen-1] = 't'; - bufLen = FS_LoadFile(s, (void **)&buffer); + if (strcmp(name + nameLen - 4, ".bsp") || nameLen > (MAX_QPATH - 1)) + { + Com_Printf("%s: unsupported map format '%s'\n", __func__, name); + } + else + { + char namewe[MAX_QPATH]; + + int crc = 0; + + if (l->filelen > 0) { + crc = CRC_Block(cmod_base + l->fileofs, l->filelen - 1); + } + + memset(namewe, 0, sizeof(namewe)); + memcpy(namewe, name, nameLen - 4); + + snprintf(entname, sizeof(entname) -1, "%s@%04x.ent", namewe, crc); + + bufLen = FS_LoadFile(entname, (void **)&buffer); + if (buffer == NULL) + { + Com_Printf("%s: No fixes found for '%s'\n", __func__, entname); + } + } if (buffer != NULL && bufLen > 1) { if (bufLen + 1 > sizeof(map_entitystring)) { - Com_Printf("CMod_LoadEntityString: .ent file %s too large: %i > %lu.\n", s, bufLen, (unsigned long)sizeof(map_entitystring)); + Com_Printf("%s: .ent file %s too large: %i > %lu.\n", + __func__, entname, bufLen, (unsigned long)sizeof(map_entitystring)); FS_FreeFile(buffer); } else { - Com_Printf ("CMod_LoadEntityString: .ent file %s loaded.\n", s); + Com_Printf ("%s: .ent file %s loaded.\n", __func__, entname); numentitychars = bufLen; memcpy(map_entitystring, buffer, bufLen); map_entitystring[bufLen] = 0; /* jit entity bug - null terminate the entity string! */ @@ -1835,7 +1857,7 @@ CMod_LoadEntityString(lump_t *l, char *name) else if (bufLen != -1) { /* If the .ent file is too small, don't load. */ - Com_Printf("CMod_LoadEntityString: .ent file %s too small.\n", s); + Com_Printf("%s: .ent file %s too small.\n", __func__, entname); FS_FreeFile(buffer); } } diff --git a/stuff/mapfixes/baseq2/base2.ent b/stuff/mapfixes/baseq2/base2@0ae9.ent similarity index 100% rename from stuff/mapfixes/baseq2/base2.ent rename to stuff/mapfixes/baseq2/base2@0ae9.ent diff --git a/stuff/mapfixes/baseq2/base3.ent b/stuff/mapfixes/baseq2/base3@1597.ent similarity index 100% rename from stuff/mapfixes/baseq2/base3.ent rename to stuff/mapfixes/baseq2/base3@1597.ent diff --git a/stuff/mapfixes/baseq2/biggun.ent b/stuff/mapfixes/baseq2/biggun@2c96.ent similarity index 100% rename from stuff/mapfixes/baseq2/biggun.ent rename to stuff/mapfixes/baseq2/biggun@2c96.ent diff --git a/stuff/mapfixes/baseq2/city1.ent b/stuff/mapfixes/baseq2/city1@1555.ent similarity index 100% rename from stuff/mapfixes/baseq2/city1.ent rename to stuff/mapfixes/baseq2/city1@1555.ent diff --git a/stuff/mapfixes/baseq2/city2.ent b/stuff/mapfixes/baseq2/city2@4cc5.ent similarity index 100% rename from stuff/mapfixes/baseq2/city2.ent rename to stuff/mapfixes/baseq2/city2@4cc5.ent diff --git a/stuff/mapfixes/baseq2/city3.ent b/stuff/mapfixes/baseq2/city3@1de5.ent similarity index 100% rename from stuff/mapfixes/baseq2/city3.ent rename to stuff/mapfixes/baseq2/city3@1de5.ent diff --git a/stuff/mapfixes/baseq2/cool1.ent b/stuff/mapfixes/baseq2/cool1@0250.ent similarity index 100% rename from stuff/mapfixes/baseq2/cool1.ent rename to stuff/mapfixes/baseq2/cool1@0250.ent diff --git a/stuff/mapfixes/baseq2/hangar1.ent b/stuff/mapfixes/baseq2/hangar1@09a0.ent similarity index 100% rename from stuff/mapfixes/baseq2/hangar1.ent rename to stuff/mapfixes/baseq2/hangar1@09a0.ent diff --git a/stuff/mapfixes/baseq2/jail5.ent b/stuff/mapfixes/baseq2/jail5@2ec5.ent similarity index 100% rename from stuff/mapfixes/baseq2/jail5.ent rename to stuff/mapfixes/baseq2/jail5@2ec5.ent diff --git a/stuff/mapfixes/baseq2/lab.ent b/stuff/mapfixes/baseq2/lab@c170.ent similarity index 100% rename from stuff/mapfixes/baseq2/lab.ent rename to stuff/mapfixes/baseq2/lab@c170.ent diff --git a/stuff/mapfixes/baseq2/train.ent b/stuff/mapfixes/baseq2/train@07c2.ent similarity index 100% rename from stuff/mapfixes/baseq2/train.ent rename to stuff/mapfixes/baseq2/train@07c2.ent diff --git a/stuff/mapfixes/baseq2/waste3.ent b/stuff/mapfixes/baseq2/waste3@6a93.ent similarity index 100% rename from stuff/mapfixes/baseq2/waste3.ent rename to stuff/mapfixes/baseq2/waste3@6a93.ent diff --git a/stuff/mapfixes/juggernaut/jug19.ent b/stuff/mapfixes/juggernaut/jug19@a903.ent similarity index 100% rename from stuff/mapfixes/juggernaut/jug19.ent rename to stuff/mapfixes/juggernaut/jug19@a903.ent