diff --git a/src/program.c b/src/program.c index 0b87ccab004ba065093b726ce84125b9b65a5594..7bf426566f0e8ab2106163931fc69a6de54e92d7 100644 --- a/src/program.c +++ b/src/program.c @@ -6744,7 +6744,7 @@ PMOD_EXPORT int low_find_lfun(struct program *p, ptrdiff_t lfun) struct identifier *id; #endif if ((size_t)lfun >= NELEM(lfun_strings)) { - return -1; + return find_lfun_fatal(p, lfun); } lfun_name = lfun_strings[lfun]; @@ -6765,6 +6765,12 @@ PMOD_EXPORT int low_find_lfun(struct program *p, ptrdiff_t lfun) return i; } +PMOD_EXPORT int find_lfun_fatal(struct program *p, ptrdiff_t lfun) +{ + Pike_fatal("Invalid lfun number: %d\n", lfun); + return -1; +} + int lfun_lookup_id(struct pike_string *lfun_name) { struct svalue *id = low_mapping_string_lookup(lfun_ids, lfun_name); diff --git a/src/program.h b/src/program.h index 322fdb19c5ad84e9b340b1d4cf1ee61995866903..0f8297422e23fd73f47d1028686b5a130b73965f 100644 --- a/src/program.h +++ b/src/program.h @@ -668,7 +668,7 @@ static INLINE int CHECK_IDREF_RANGE (int x, const struct program *p) #define PROG_FROM_INT(P,X) PROG_FROM_PTR(P, PTR_FROM_INT(P, X)) #define ID_FROM_INT(P,X) ID_FROM_PTR(P, PTR_FROM_INT(P, X)) -#define FIND_LFUN(P,N) ( dmalloc_touch(struct program *,(P))->flags & PROGRAM_FIXED && (N) < NUM_LFUNS ?((P)->lfuns[(N)]):low_find_lfun((P), (N)) ) +#define FIND_LFUN(P,N) ( dmalloc_touch(struct program *,(P))->flags & PROGRAM_FIXED && (N) < NUM_LFUNS ?((P)->lfuns[(N)]):find_lfun_fatal((P), (N)) ) #define QUICK_FIND_LFUN(P,N) (dmalloc_touch(struct program *,(P))->lfuns[N]) #ifdef DO_PIKE_CLEANUP @@ -925,6 +925,7 @@ int really_low_find_variant_identifier(struct pike_string *name, int start_pos, int flags); PMOD_EXPORT int low_find_lfun(struct program *p, ptrdiff_t lfun); +PMOD_EXPORT int find_lfun_fatal(struct program *p, ptrdiff_t lfun); int lfun_lookup_id(struct pike_string *lfun_name); int low_find_shared_string_identifier(struct pike_string *name, struct program *prog);