Catch selectors that make xundump oops early
Oops in new verify_ca(), which runs during initialization.
This commit is contained in:
parent
a38625d9a4
commit
238b9afc3b
1 changed files with 20 additions and 0 deletions
|
@ -70,6 +70,25 @@ verify_fail(int type, int row, struct castr *ca, int idx, char *fmt, ...)
|
||||||
putc('\n', stderr);
|
putc('\n', stderr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
verify_ca(int type)
|
||||||
|
{
|
||||||
|
struct castr *ca = ef_cadef(type);
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; ca[i].ca_name; i++) {
|
||||||
|
/*
|
||||||
|
* Virtual selectors must be NSC_EXTRA, because xundump can't
|
||||||
|
* cope with them without setter methods. Exception: if
|
||||||
|
* EFF_MEM is not set, xundump doesn't touch the table.
|
||||||
|
*/
|
||||||
|
if (CANT_HAPPEN((ef_flags(type) & EFF_MEM)
|
||||||
|
&& ca[i].ca_get && !(ca[i].ca_flags & NSC_EXTRA)))
|
||||||
|
ca[i].ca_flags |= NSC_EXTRA;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
verify_row(int type, int row)
|
verify_row(int type, int row)
|
||||||
{
|
{
|
||||||
|
@ -199,6 +218,7 @@ ef_verify()
|
||||||
for (ep = empfile; ep->name; ep++) {
|
for (ep = empfile; ep->name; ep++) {
|
||||||
if (!ef_cadef(ep->uid))
|
if (!ef_cadef(ep->uid))
|
||||||
continue;
|
continue;
|
||||||
|
verify_ca(ep->uid);
|
||||||
for (i = 0; i < ef_nelem(ep->uid); i++) {
|
for (i = 0; i < ef_nelem(ep->uid); i++) {
|
||||||
retval += verify_row(ep->uid, i);
|
retval += verify_row(ep->uid, i);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue