1
0
forked from GitHub/gf-core

spotted more potential crashes

This commit is contained in:
Krasimir Angelov
2023-01-29 13:44:32 +01:00
parent 5551960698
commit 1e1719239a

View File

@@ -267,7 +267,7 @@ PgfExpr PgfReader::read_expr()
auto type = read_type(); auto type = read_type();
ref<PgfExprTyped> etyped = PgfDB::malloc<PgfExprTyped>(); ref<PgfExprTyped> etyped = PgfDB::malloc<PgfExprTyped>();
etyped->expr = expr; etyped->expr = expr;
etyped->type = type; etyped->type = type.as_object();
expr = etyped.tagged(); expr = etyped.tagged();
break; break;
} }
@@ -310,9 +310,8 @@ ref<PgfAbsFun> PgfReader::read_absfun()
{ {
ref<PgfAbsFun> absfun = ref<PgfAbsFun> absfun =
read_name<PgfAbsFun>(&PgfAbsFun::name); read_name<PgfAbsFun>(&PgfAbsFun::name);
ref<PgfExprFun> efun = auto type = read_type();
ref<PgfExprFun>::from_ptr((PgfExprFun*) &absfun->name); absfun->type = type;
absfun->type = read_type();
absfun->arity = read_int(); absfun->arity = read_int();
uint8_t tag = read_tag(); uint8_t tag = read_tag();
@@ -322,7 +321,8 @@ ref<PgfAbsFun> PgfReader::read_absfun()
break; break;
case 1: { case 1: {
read_len(); read_len();
absfun->bytecode = PgfDB::malloc<char>(0); auto dummy = PgfDB::malloc<char>(0);
absfun->bytecode = dummy;
break; break;
} }
default: default:
@@ -335,7 +335,8 @@ ref<PgfAbsFun> PgfReader::read_absfun()
ref<PgfAbsCat> PgfReader::read_abscat() ref<PgfAbsCat> PgfReader::read_abscat()
{ {
ref<PgfAbsCat> abscat = read_name<PgfAbsCat>(&PgfAbsCat::name); ref<PgfAbsCat> abscat = read_name<PgfAbsCat>(&PgfAbsCat::name);
abscat->context = read_vector<PgfHypo>(&PgfReader::read_hypo); auto context = read_vector<PgfHypo>(&PgfReader::read_hypo);
abscat->context = context;
abscat->prob = read_prob(&abscat->name); abscat->prob = read_prob(&abscat->name);
return abscat; return abscat;
} }
@@ -410,10 +411,15 @@ void PgfReader::read_abstract(ref<PgfAbstr> abstract)
{ {
this->abstract = abstract; this->abstract = abstract;
abstract->name = read_name(); auto name = read_name();
abstract->aflags = read_namespace<PgfFlag>(&PgfReader::read_flag); auto aflags = read_namespace<PgfFlag>(&PgfReader::read_flag);
abstract->funs = read_namespace<PgfAbsFun>(&PgfReader::read_absfun); auto funs = read_namespace<PgfAbsFun>(&PgfReader::read_absfun);
abstract->cats = read_namespace<PgfAbsCat>(&PgfReader::read_abscat); auto cats = read_namespace<PgfAbsCat>(&PgfReader::read_abscat);
abstract->name = name;
abstract->aflags = aflags;
abstract->funs = funs;
abstract->cats = cats;
if (probs_callback != NULL) { if (probs_callback != NULL) {
PgfExn err; PgfExn err;
@@ -477,7 +483,7 @@ void PgfReader::read_variable_range(ref<PgfVariableRange> var_info)
void PgfReader::read_parg(ref<PgfPArg> parg) void PgfReader::read_parg(ref<PgfPArg> parg)
{ {
parg->param = read_lparam(); auto param = read_lparam(); parg->param = param;
} }
ref<PgfPResult> PgfReader::read_presult() ref<PgfPResult> PgfReader::read_presult()
@@ -820,13 +826,25 @@ ref<PgfConcrPrintname> PgfReader::read_printname()
ref<PgfConcr> PgfReader::read_concrete() ref<PgfConcr> PgfReader::read_concrete()
{ {
concrete = read_name(&PgfConcr::name); concrete = read_name(&PgfConcr::name);
concrete->cflags = read_namespace<PgfFlag>(&PgfReader::read_flag);
concrete->phrasetable = read_phrasetable(); auto cflags = read_namespace<PgfFlag>(&PgfReader::read_flag);
concrete->lincats = read_namespace<PgfConcrLincat>(&PgfReader::read_lincat); concrete->cflags = cflags;
concrete->lins = read_namespace<PgfConcrLin>(&PgfReader::read_lin);
concrete->printnames = read_namespace<PgfConcrPrintname>(&PgfReader::read_printname); auto phrasetable = read_phrasetable();
concrete->phrasetable = phrasetable;
auto lincats = read_namespace<PgfConcrLincat>(&PgfReader::read_lincat);
concrete->lincats = lincats;
auto lins = read_namespace<PgfConcrLin>(&PgfReader::read_lin);
concrete->lins = lins;
auto printnames = read_namespace<PgfConcrPrintname>(&PgfReader::read_printname);
concrete->printnames = printnames;
concrete->prev = 0; concrete->prev = 0;
concrete->next = 0; concrete->next = 0;
return concrete; return concrete;
} }
@@ -842,11 +860,13 @@ ref<PgfPGF> PgfReader::read_pgf()
throw pgf_error("Unsupported format version"); throw pgf_error("Unsupported format version");
} }
pgf->gflags = read_namespace<PgfFlag>(&PgfReader::read_flag); auto gflags = read_namespace<PgfFlag>(&PgfReader::read_flag);
pgf->gflags = gflags;
read_abstract(ref<PgfAbstr>::from_ptr(&pgf->abstract)); read_abstract(ref<PgfAbstr>::from_ptr(&pgf->abstract));
pgf->concretes = read_namespace<PgfConcr>(&PgfReader::read_concrete); auto concretes = read_namespace<PgfConcr>(&PgfReader::read_concrete);
pgf->concretes = concretes;
return pgf; return pgf;
} }