mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-04-21 02:39:31 -06:00
detect and report an attempt to load non .ngf file in readNGF
This commit is contained in:
@@ -250,8 +250,16 @@ typedef struct mchunk mbin;
|
|||||||
*/
|
*/
|
||||||
#define FASTBIN_CONSOLIDATION_THRESHOLD (65536UL)
|
#define FASTBIN_CONSOLIDATION_THRESHOLD (65536UL)
|
||||||
|
|
||||||
|
static char slovo[5] = {'S','L','O','V','O'};
|
||||||
|
|
||||||
struct PGF_INTERNAL_DECL malloc_state
|
struct PGF_INTERNAL_DECL malloc_state
|
||||||
{
|
{
|
||||||
|
/* Each .ngf file starts with 'SLOVO' as in:
|
||||||
|
* "V načaloto be slovoto" (In the beginning was the word)
|
||||||
|
* In this way we detect an attempt to read a non .ngf file.
|
||||||
|
*/
|
||||||
|
char sign[5];
|
||||||
|
|
||||||
/* Set if the fastbin chunks contain recently inserted free blocks. */
|
/* Set if the fastbin chunks contain recently inserted free blocks. */
|
||||||
bool have_fastchunks;
|
bool have_fastchunks;
|
||||||
/* Fastbins */
|
/* Fastbins */
|
||||||
@@ -320,6 +328,9 @@ PgfDB::PgfDB(const char* filepath, int flags, int mode) {
|
|||||||
if (is_new) {
|
if (is_new) {
|
||||||
init_state(file_size);
|
init_state(file_size);
|
||||||
} else {
|
} else {
|
||||||
|
if (strncmp(ms->sign, slovo, sizeof(ms->sign)) != 0)
|
||||||
|
throw pgf_error("Invalid file content");
|
||||||
|
|
||||||
// We must make sure that left-over transient revisions are
|
// We must make sure that left-over transient revisions are
|
||||||
// released. This may happen if a client process was killed
|
// released. This may happen if a client process was killed
|
||||||
// or if the garbadge collector has not managed to run
|
// or if the garbadge collector has not managed to run
|
||||||
@@ -366,6 +377,8 @@ void PgfDB::set_revision(ref<PgfPGF> pgf)
|
|||||||
PGF_INTERNAL
|
PGF_INTERNAL
|
||||||
void PgfDB::init_state(size_t size)
|
void PgfDB::init_state(size_t size)
|
||||||
{
|
{
|
||||||
|
memcpy(ms->sign, slovo, sizeof(ms->sign));
|
||||||
|
|
||||||
/* Init fastbins */
|
/* Init fastbins */
|
||||||
ms->have_fastchunks = false;
|
ms->have_fastchunks = false;
|
||||||
for (int i = 0; i < NFASTBINS; ++i) {
|
for (int i = 0; i < NFASTBINS; ++i) {
|
||||||
|
|||||||
@@ -79,29 +79,27 @@ main = do
|
|||||||
|
|
||||||
rp1 <- testLoadFailure (readPGF "non-existing.pgf")
|
rp1 <- testLoadFailure (readPGF "non-existing.pgf")
|
||||||
rp2 <- testLoadFailure (readPGF "tests/basic.gf")
|
rp2 <- testLoadFailure (readPGF "tests/basic.gf")
|
||||||
-- rp3 <- testLoadFailure (readPGF "tests/basic.ngf")
|
rp3 <- testLoadFailure (readPGF "tests/basic.ngf")
|
||||||
|
|
||||||
bn1 <- testLoadFailure (bootNGF "non-existing.pgf" "non-existing.ngf")
|
bn1 <- testLoadFailure (bootNGF "non-existing.pgf" "non-existing.ngf")
|
||||||
bn2 <- testLoadFailure (bootNGF "tests/basic.gf" "tests/basic.ngf")
|
bn2 <- testLoadFailure (bootNGF "tests/basic.gf" "tests/basic.ngf")
|
||||||
bn3 <- testLoadFailure (bootNGF "tests/basic.ngf" "tests/basic.pgf")
|
bn3 <- testLoadFailure (bootNGF "tests/basic.ngf" "tests/basic.pgf")
|
||||||
|
|
||||||
-- rn1 <- testLoadFailure (readNGF "non-existing.ngf")
|
rn2 <- testLoadFailure (readNGF "tests/basic.gf")
|
||||||
-- rn2 <- testLoadFailure (readNGF "tests/basic.gf")
|
rn3 <- testLoadFailure (readNGF "tests/basic.pgf")
|
||||||
-- rn3 <- testLoadFailure (readNGF "tests/basic.pgf")
|
|
||||||
|
|
||||||
runTestTTAndExit $
|
runTestTTAndExit $
|
||||||
TestList $
|
TestList $
|
||||||
[TestCase (assertBool "missing file" rp1)
|
[TestCase (assertBool "missing file" rp1)
|
||||||
,TestCase (assertBool "wrong file format (GF)" rp2)
|
,TestCase (assertBool "wrong file format (GF)" rp2)
|
||||||
-- ,TestCase (assertBool "wrong file format (NGF)" rp3)
|
,TestCase (assertBool "wrong file format (NGF)" rp3)
|
||||||
|
|
||||||
,TestCase (assertBool "missing file" bn1)
|
,TestCase (assertBool "missing file" bn1)
|
||||||
,TestCase (assertBool "wrong file format (GF)" bn2)
|
,TestCase (assertBool "wrong file format (GF)" bn2)
|
||||||
,TestCase (assertBool "wrong file format (NGF)" bn3)
|
,TestCase (assertBool "wrong file format (NGF)" bn3)
|
||||||
|
|
||||||
-- ,TestCase (assertBool "missing file" rn1)
|
,TestCase (assertBool "wrong file format (GF)" rn2)
|
||||||
-- ,TestCase (assertBool "wrong file format (GF)" rn2)
|
,TestCase (assertBool "wrong file format (PGF)" rn3)
|
||||||
-- ,TestCase (assertBool "wrong file format (PGF)" rn3)
|
|
||||||
]
|
]
|
||||||
++ grammarTests gr1
|
++ grammarTests gr1
|
||||||
++ grammarTests gr2
|
++ grammarTests gr2
|
||||||
|
|||||||
Reference in New Issue
Block a user