mirror of
https://github.com/ClassiCube/ClassiCube.git
synced 2025-09-17 11:35:08 -04:00
Show a warning instead of crashing with 'String too big into StringsBuffer' when loading options.txt/fontscache.txt
Also fix makefile again
This commit is contained in:
parent
303f951587
commit
5495faa800
94
src/Makefile
94
src/Makefile
@ -4,6 +4,9 @@ COMMITSHA=$(shell git rev-parse --short HEAD)
|
||||
ENAME=ClassiCube
|
||||
DEL=rm
|
||||
JOBS=1
|
||||
CC=gcc
|
||||
CFLAGS=-w -g -pipe -rdynamic
|
||||
LDFLAGS=-g -rdynamic
|
||||
|
||||
ifndef $(PLAT)
|
||||
ifeq ($(OS),Windows_NT)
|
||||
@ -13,48 +16,51 @@ ifndef $(PLAT)
|
||||
endif
|
||||
endif
|
||||
|
||||
CC_web=emcc
|
||||
OEXT_web=.html
|
||||
CFLAGS_web=-w -g
|
||||
LDFLAGS_web=-s WASM=1 -s NO_EXIT_RUNTIME=1 -s FETCH=1 --preload-file texpacks/default.zip@texpacks/default.zip
|
||||
ifeq ($(PLAT),web)
|
||||
CC=emcc
|
||||
OEXT=.html
|
||||
CFLAGS=-w -g
|
||||
LDFLAGS=-s WASM=1 -s NO_EXIT_RUNTIME=1 -s FETCH=1 --preload-file texpacks/default.zip@texpacks/default.zip
|
||||
endif
|
||||
|
||||
CC_mingw=gcc
|
||||
LIBS_mingw=-mwindows -lws2_32 -lwininet -lwinmm -limagehlp -lcrypt32 -ld3d9
|
||||
OEXT_mingw=.exe
|
||||
CFLAGS_mingw=-w -g -pipe
|
||||
ifeq ($(PLAT),mingw)
|
||||
OEXT=.exe
|
||||
CFLAGS=-w -g -pipe
|
||||
LDFLAGS=-g
|
||||
LIBS=-mwindows -lws2_32 -lwininet -lwinmm -limagehlp -lcrypt32 -ld3d9
|
||||
endif
|
||||
|
||||
CC_linux=gcc
|
||||
LIBS_linux=-lX11 -lpthread -lGL -lm -lopenal -ldl -lcurl
|
||||
CFLAGS_linux=-w -g -pipe -rdynamic
|
||||
ifeq ($(PLAT),linux)
|
||||
LIBS=-lX11 -lpthread -lGL -lm -lopenal -ldl -lcurl
|
||||
endif
|
||||
|
||||
CC_sunos=gcc
|
||||
LIBS_sunos=-lm -lsocket -lX11 -lGL -lcurl -lopenal
|
||||
CFLAGS_sunos=-w -g -pipe -rdynamic
|
||||
ifeq ($(PLAT),sunos)
|
||||
LIBS=-lm -lsocket -lX11 -lGL -lcurl -lopenal
|
||||
endif
|
||||
|
||||
CC_darwin=gcc
|
||||
LIBS_darwin=-lcurl
|
||||
LDFLAGS_darwin=-framework Carbon -framework AGL -framework OpenAL -framework OpenGL
|
||||
CFLAGS_darwin=-w -g -pipe -rdynamic
|
||||
ifeq ($(PLAT),darwin)
|
||||
LIBS=-lcurl
|
||||
LDFLAGS=-rdynamic -framework Carbon -framework AGL -framework OpenAL -framework OpenGL
|
||||
endif
|
||||
|
||||
BSDLIBS=-lcurl -lexecinfo -lopenal -lGL -lX11
|
||||
ifeq ($(PLAT),freebsd)
|
||||
CC=clang
|
||||
CFLAGS=-w -g -pipe -rdynamic -I /usr/local/include
|
||||
LDFLAGS=-L /usr/local/lib
|
||||
LIBS=-lcurl -lexecinfo -lopenal -lGL -lX11 -lm -lpthread
|
||||
endif
|
||||
|
||||
CC_freebsd=clang
|
||||
LIBS_freebsd=$(BSDLIBS) -lm -lpthread
|
||||
INCDIRS_freebsd=-I /usr/local/include
|
||||
LDFLAGS_freebsd=-L /usr/local/lib
|
||||
CFLAGS_freebsd=-w -g -pipe -rdynamic
|
||||
ifeq ($(PLAT),openbsd)
|
||||
CFLAGS=-w -g -pipe -rdynamic -I /usr/X11R6/include -I /usr/local/include
|
||||
LDFLAGS=-L /usr/X11R6/lib -L /usr/local/lib
|
||||
LIBS=-lcurl -lexecinfo -lopenal -lGL -lX11
|
||||
endif
|
||||
|
||||
CC_openbsd=gcc
|
||||
LIBS_openbsd=$(BSDLIBS)
|
||||
INCDIRS_openbsd=-isystem /usr/X11R6/include -isystem /usr/local/include
|
||||
LDFLAGS_openbsd=-L /usr/X11R6/lib -L /usr/local/lib
|
||||
CFLAGS_openbsd=-w -g -pipe -rdynamic
|
||||
|
||||
CC_netbsd=gcc
|
||||
LIBS_netbsd=$(BSDLIBS)
|
||||
INCDIRS_netbsd=-I /usr/X11R7/include -I /usr/pkg/include
|
||||
LDFLAGS_netbsd=-L /usr/X11R7/lib -L /usr/pkg/lib
|
||||
CFLAGS_netbsd=-w -g -pipe -rdynamic
|
||||
ifeq ($(PLAT),netbsd)
|
||||
CFLAGS=-w -g -pipe -rdynamic -I /usr/X11R7/include -I /usr/pkg/include
|
||||
LDFLAGS=-L /usr/X11R7/lib -L /usr/pkg/lib
|
||||
LIBS=-lcurl -lexecinfo -lopenal -lGL -lX11
|
||||
endif
|
||||
|
||||
ifeq ($(OS),Windows_NT)
|
||||
DEL=del
|
||||
@ -64,40 +70,26 @@ default: $(PLAT)
|
||||
|
||||
web:
|
||||
$(MAKE) $(ENAME) PLAT=web -j$(JOBS)
|
||||
|
||||
linux:
|
||||
$(MAKE) $(ENAME) PLAT=linux -j$(JOBS)
|
||||
|
||||
mingw:
|
||||
$(MAKE) $(ENAME) PLAT=mingw -j$(JOBS)
|
||||
|
||||
solaris:
|
||||
$(MAKE) $(ENAME) PLAT=sunos -j$(JOBS)
|
||||
|
||||
osx:
|
||||
$(MAKE) $(ENAME) PLAT=darwin -j$(JOBS)
|
||||
|
||||
freebsd:
|
||||
$(MAKE) $(ENAME) PLAT=freebsd -j$(JOBS)
|
||||
|
||||
openbsd:
|
||||
$(MAKE) $(ENAME) PLAT=openbsd -j$(JOBS)
|
||||
|
||||
netbsd:
|
||||
$(MAKE) $(ENAME) PLAT=netbsd -j$(JOBS)
|
||||
|
||||
|
||||
clean:
|
||||
$(DEL) $(OBJECTS)
|
||||
|
||||
CC=$(CC_$(PLAT))
|
||||
LIBS=$(LIBS_$(PLAT))
|
||||
OEXT=$(OEXT_$(PLAT))
|
||||
CFLAGS=$(CFLAGS_$(PLAT))
|
||||
LDFLAGS=$(LDFLAGS_$(PLAT))
|
||||
INCDIRS=$(INCDIRS_$(PLAT))
|
||||
|
||||
$(ENAME): $(OBJECTS)
|
||||
$(CC) $(LDFLAGS) -o $@$(OEXT) $(OBJECTS) $(LIBS)
|
||||
|
||||
$(OBJECTS): %.o : %.c
|
||||
$(CC) $(CFLAGS) $(INCDIRS) -DCC_COMMIT_SHA=\"$(COMMITSHA)\" -c $< -o $@
|
||||
$(CC) $(CFLAGS) -DCC_COMMIT_SHA=\"$(COMMITSHA)\" -c $< -o $@
|
||||
|
@ -752,8 +752,6 @@ bool Convert_ParseBool(const String* str, bool* value) {
|
||||
/*########################################################################################################################*
|
||||
*------------------------------------------------------StringsBuffer------------------------------------------------------*
|
||||
*#########################################################################################################################*/
|
||||
#define STRINGSBUFFER_LEN_SHIFT 9
|
||||
#define STRINGSBUFFER_LEN_MASK 0x1FFUL
|
||||
#define STRINGSBUFFER_BUFFER_EXPAND_SIZE 8192
|
||||
|
||||
CC_NOINLINE static void StringsBuffer_Init(StringsBuffer* buffer) {
|
||||
@ -791,7 +789,7 @@ String StringsBuffer_UNSAFE_Get(StringsBuffer* buffer, int i) {
|
||||
void StringsBuffer_Add(StringsBuffer* buffer, const String* str) {
|
||||
int textOffset;
|
||||
/* StringsBuffer hasn't been initalised yet, do it here */
|
||||
if (!buffer->_FlagsBufferSize) { StringsBuffer_Init(buffer); }
|
||||
if (!buffer->_FlagsBufferSize) StringsBuffer_Init(buffer);
|
||||
|
||||
if (buffer->Count == buffer->_FlagsBufferSize) {
|
||||
buffer->FlagsBuffer = Utils_Resize(buffer->FlagsBuffer, &buffer->_FlagsBufferSize,
|
||||
|
@ -200,6 +200,9 @@ CC_API bool Convert_ParseBool(const String* str, bool* value);
|
||||
|
||||
#define STRINGSBUFFER_BUFFER_DEF_SIZE 4096
|
||||
#define STRINGSBUFFER_FLAGS_DEF_ELEMS 256
|
||||
#define STRINGSBUFFER_LEN_SHIFT 9
|
||||
#define STRINGSBUFFER_LEN_MASK 0x1FFUL
|
||||
|
||||
typedef struct StringsBuffer_ {
|
||||
char* TextBuffer; /* Raw characters of all entries */
|
||||
uint32_t* FlagsBuffer; /* Private flags for each entry */
|
||||
|
@ -310,6 +310,14 @@ void EntryList_Load(struct EntryList* list, EntryList_Filter filter) {
|
||||
if (!entry.length) continue;
|
||||
if (filter && !filter(&entry)) continue;
|
||||
|
||||
/* Sometimes file becomes corrupted and replaced with NULL */
|
||||
/* If don't prevent this here, client aborts in StringsBuffer_Add */
|
||||
if (entry.length > STRINGSBUFFER_LEN_MASK) {
|
||||
entry.length = 0;
|
||||
String_Format1(&entry, "Skipping extremely long line in %c, file may have been corrupted", list->Filename);
|
||||
Logger_WarnFunc(&entry); continue;
|
||||
}
|
||||
|
||||
String_UNSAFE_Separate(&entry, list->Separator, &key, &value);
|
||||
EntryList_Set(list, &key, &value);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user