diff --git a/.gitignore b/.gitignore index c3bf9d6..62ead81 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ vgs2mml *.dSYM test.bgm +test_memchk diff --git a/CHANGES.md b/CHANGES.md index b69f91c..dd3be63 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,5 +1,9 @@ # Changes +## Version 1.02 +- added '\0' terminated check +- bugfix: https://github.com/suzukiplan/vgs-mml-compiler/issues/3 + ## Version 1.01 - fixed compiler in UNIX: https://github.com/suzukiplan/vgs-mml-compiler/issues/1 diff --git a/makefile b/makefile index 2e169a6..ba6ef47 100644 --- a/makefile +++ b/makefile @@ -2,11 +2,12 @@ CC=/usr/bin/gcc all: vgs2mml -vgs2mml: src/vgsmml.c src/vgsmml.h src/cli.c vgs-bgm-decoder/src/vgsdec_internal.h - $(CC) -o vgs2mml -I./src -I./vgs-bgm-decoder/src src/vgsmml.c src/cli.c +vgs2mml: src/vgsmml.c src/vgsmml.h src/cli.c vgs-bgm-decoder/src/miniz.c vgs-bgm-decoder/src/vgsdec_internal.h + $(CC) -o vgs2mml -I./src -I./vgs-bgm-decoder/src src/vgsmml.c src/cli.c vgs-bgm-decoder/src/miniz.c test: all test "`./vgs2mml ./test/test-error-undefined-macro.mml test.bgm`" = "error(101) line=52: undeclared variable was specified" ./vgs2mml ./test/test-normal.mml test.bgm - vgs2play test.bgm + $(CC) -o test_memchk -I./src -I./vgs-bgm-decoder/src src/vgsmml.c test/test_memchk.c vgs-bgm-decoder/src/miniz.c + valgrind --tool=memcheck ./test_memchk diff --git a/src/vgsmml.c b/src/vgsmml.c index b8f26dc..3b98177 100644 --- a/src/vgsmml.c +++ b/src/vgsmml.c @@ -161,6 +161,13 @@ struct VgsBgmData* __stdcall vgsmml_compile_from_memory(void* data, size_t size, return NULL; } + /* memory check */ + if ('\0' != ((char*)data)[size - 1]) { + strcpy(err->message, "need specify the \'\\0\' terminated string to the data argument."); + err->code = VGSMML_ERR_INVALID; + return NULL; + } + /* count line */ for (nLine = 1, i = 0; buf[i]; i++) { if ('\n' == buf[i]) nLine++; diff --git a/test/test_memchk.c b/test/test_memchk.c new file mode 100644 index 0000000..65a8769 --- /dev/null +++ b/test/test_memchk.c @@ -0,0 +1,17 @@ +#include +#include +#include "vgsmml.h" + +int main(int argc, char* argv[]) +{ + struct VgsMmlErrorInfo err; + char foo[4]; + strcpy(foo, "foo"); + if (NULL == vgsmml_compile_from_memory(foo, 3, &err) && VGSMML_ERR_INVALID == err.code) { + puts(err.message); + puts("test succeed"); + return 0; + } + puts("test failed"); + return -1; +} diff --git a/vgs-bgm-decoder b/vgs-bgm-decoder index d6a5f7a..52f6537 160000 --- a/vgs-bgm-decoder +++ b/vgs-bgm-decoder @@ -1 +1 @@ -Subproject commit d6a5f7aa4bc4751cc20b0a60e9f2a025281ddfae +Subproject commit 52f65378a851fe9b7f507f9eb8e0082aacaac7cc