mirror of https://github.com/nzp-team/fteqw.git
Don't crash the engine on an otherwise legitimate progs.
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@1221 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
parent
bd4c05706b
commit
c09c38c048
|
@ -2854,28 +2854,6 @@ retry:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pr_progs->version == PROG_EXTENDEDVERSION && pr_progs->numbodylessfuncs)
|
|
||||||
{
|
|
||||||
s = &((char *)pr_progs)[pr_progs->ofsbodylessfuncs];
|
|
||||||
for (i = 0; i < pr_progs->numbodylessfuncs; i++)
|
|
||||||
{
|
|
||||||
d16 = ED_FindGlobal16(progfuncs, s);
|
|
||||||
if (!d16)
|
|
||||||
Sys_Error("Progs requires \"%s\" the external function \"%s\", but the definition was stripped", filename, s);
|
|
||||||
|
|
||||||
((int *)glob)[d16->ofs] = PR_FindFunc(progfuncs, s, PR_ANY);
|
|
||||||
if (!((int *)glob)[d16->ofs])
|
|
||||||
Sys_Error("Runtime-linked function %s was not found in primary progs (loading %s)", s, filename);
|
|
||||||
/*
|
|
||||||
d2 = ED_FindGlobalOfsFromProgs(progfuncs, s, 0, ev_function);
|
|
||||||
if (!d2)
|
|
||||||
Sys_Error("Runtime-linked function %s was not found in primary progs (loading %s)", s, filename);
|
|
||||||
((int *)glob)[d16->ofs] = (*(func_t *)&pr_progstate[0].globals[*d2]);
|
|
||||||
*/
|
|
||||||
s+=strlen(s)+1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case 32:
|
case 32:
|
||||||
for (i=0 ; i<pr_progs->numglobaldefs ; i++)
|
for (i=0 ; i<pr_progs->numglobaldefs ; i++)
|
||||||
|
@ -2949,6 +2927,53 @@ retry:
|
||||||
if (eval)
|
if (eval)
|
||||||
eval->prog = progstype;
|
eval->prog = progstype;
|
||||||
|
|
||||||
|
switch(current_progstate->intsize)
|
||||||
|
{
|
||||||
|
case 16:
|
||||||
|
if (pr_progs->version == PROG_EXTENDEDVERSION && pr_progs->numbodylessfuncs)
|
||||||
|
{
|
||||||
|
s = &((char *)pr_progs)[pr_progs->ofsbodylessfuncs];
|
||||||
|
for (i = 0; i < pr_progs->numbodylessfuncs; i++)
|
||||||
|
{
|
||||||
|
d16 = ED_FindGlobal16(progfuncs, s);
|
||||||
|
if (!d16)
|
||||||
|
Sys_Error("Progs requires \"%s\" the external function \"%s\", but the definition was stripped", filename, s);
|
||||||
|
|
||||||
|
((int *)glob)[d16->ofs] = PR_FindFunc(progfuncs, s, PR_ANY);
|
||||||
|
if (!((int *)glob)[d16->ofs])
|
||||||
|
Sys_Error("Runtime-linked function %s was not found in primary progs (loading %s)", s, filename);
|
||||||
|
/*
|
||||||
|
d2 = ED_FindGlobalOfsFromProgs(progfuncs, s, 0, ev_function);
|
||||||
|
if (!d2)
|
||||||
|
Sys_Error("Runtime-linked function %s was not found in primary progs (loading %s)", s, filename);
|
||||||
|
((int *)glob)[d16->ofs] = (*(func_t *)&pr_progstate[0].globals[*d2]);
|
||||||
|
*/
|
||||||
|
s+=strlen(s)+1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 24:
|
||||||
|
break; //cannot happen anyway.
|
||||||
|
case 32:
|
||||||
|
if (pr_progs->version == PROG_EXTENDEDVERSION && pr_progs->numbodylessfuncs)
|
||||||
|
{
|
||||||
|
s = &((char *)pr_progs)[pr_progs->ofsbodylessfuncs];
|
||||||
|
for (i = 0; i < pr_progs->numbodylessfuncs; i++)
|
||||||
|
{
|
||||||
|
d32 = ED_FindGlobal32(progfuncs, s);
|
||||||
|
d2 = ED_FindGlobalOfsFromProgs(progfuncs, s, 0, ev_function);
|
||||||
|
if (!d2)
|
||||||
|
Sys_Error("Runtime-linked function %s was not found in existing progs", s);
|
||||||
|
if (!d32)
|
||||||
|
Sys_Error("Couldn't find def for \"%s\"", s);
|
||||||
|
((int *)glob)[d32->ofs] = (*(func_t *)&pr_progstate[0].globals[*d2]);
|
||||||
|
|
||||||
|
s+=strlen(s)+1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue