strange object vs generic objects
Try to fix a fuzzer issue. I wasn't able to reproduce it so am not sure whether this actually fixes it. A mimic seemed to be mimicking object #1 (generic ILLOBJ_CLASS object which shouldn't occur) rather than #0 (strange object). Strange object always has dknown==1 and generic objects should always have dknown==0 but farlook of mystery object #1 had its dknown flag set. An earlier fix to force non-Null oc_name when formatting objects in order to pacify the static analyzer might have been the reason that the problem couldn't be reproduced. This includes a few miscellaneous changes made while unsuccessfully hunting for the problem.
This commit is contained in:
@@ -850,25 +850,24 @@ enum glyph_offsets {
|
||||
|| glyph_is_male_statue_piletop(glyph))
|
||||
#define glyph_is_statue(glyph) \
|
||||
(glyph_is_male_statue(glyph) || glyph_is_fem_statue(glyph))
|
||||
/* note: 'strange object' gets [mis?]classified as generic here but that
|
||||
shouldn't impact anything; to do it properly, glyph_is_normal_generic_obj()
|
||||
and glyph_is_piletop_generic_obj() should use '>' rather than '>=', and
|
||||
glyph_is_normal_object() and glyph_is_normal_piletop_obj() should include
|
||||
(glyph == {GLYPH_OBJ_OFF,GLYPH_OBJ_PILETOP_OFF}) to test for object #0 */
|
||||
/* generic objects are after strange object (GLYPH_OBJ_OFF) and before
|
||||
other objects (GLYPH_OBJ_OFF + MAXOCLASSES) */
|
||||
#define glyph_is_normal_generic_obj(glyph) \
|
||||
((glyph) >= GLYPH_OBJ_OFF && (glyph) < GLYPH_OBJ_OFF + MAXOCLASSES)
|
||||
((glyph) > GLYPH_OBJ_OFF && (glyph) < GLYPH_OBJ_OFF + MAXOCLASSES)
|
||||
#define glyph_is_piletop_generic_obj(glyph) \
|
||||
((glyph) >= GLYPH_OBJ_PILETOP_OFF \
|
||||
((glyph) > GLYPH_OBJ_PILETOP_OFF \
|
||||
&& (glyph) < GLYPH_OBJ_PILETOP_OFF + MAXOCLASSES)
|
||||
#define glyph_is_generic_object(glyph) \
|
||||
(glyph_is_normal_generic_obj(glyph) \
|
||||
|| glyph_is_piletop_generic_obj(glyph))
|
||||
#define glyph_is_normal_piletop_obj(glyph) \
|
||||
(((glyph) >= GLYPH_OBJ_PILETOP_OFF + MAXOCLASSES) \
|
||||
&& ((glyph) < (GLYPH_OBJ_PILETOP_OFF + NUM_OBJECTS)))
|
||||
((glyph) == GLYPH_OBJ_PILETOP_OFF \
|
||||
|| ((glyph) > GLYPH_OBJ_PILETOP_OFF + MAXOCLASSES \
|
||||
&& (glyph) < (GLYPH_OBJ_PILETOP_OFF + NUM_OBJECTS)))
|
||||
#define glyph_is_normal_object(glyph) \
|
||||
((((glyph) >= GLYPH_OBJ_OFF + MAXOCLASSES) \
|
||||
&& ((glyph) < (GLYPH_OBJ_OFF + NUM_OBJECTS))) \
|
||||
((glyph) == GLYPH_OBJ_OFF \
|
||||
|| ((glyph) >= GLYPH_OBJ_OFF + MAXOCLASSES \
|
||||
&& (glyph) < (GLYPH_OBJ_OFF + NUM_OBJECTS)) \
|
||||
|| glyph_is_normal_piletop_obj(glyph))
|
||||
|
||||
#if 0 /* [note: out of date] */
|
||||
|
||||
@@ -1443,7 +1443,7 @@ extern void free_omailcmd(struct obj *);
|
||||
extern struct obj *mkobj_at(char, coordxy, coordxy, boolean);
|
||||
extern struct obj *mksobj_at(int, coordxy, coordxy, boolean, boolean);
|
||||
extern struct obj *mksobj_migr_to_species(int, unsigned, boolean, boolean);
|
||||
extern struct obj *mkobj(int, boolean);
|
||||
extern struct obj *mkobj(int, boolean) NONNULL;
|
||||
extern int rndmonnum_adj(int, int);
|
||||
extern int rndmonnum(void);
|
||||
extern boolean bogon_is_pname(char);
|
||||
@@ -1457,7 +1457,7 @@ extern void bill_dummy_object(struct obj *);
|
||||
extern void costly_alteration(struct obj *, int);
|
||||
extern void clear_dknown(struct obj *);
|
||||
extern void unknow_object(struct obj *);
|
||||
extern struct obj *mksobj(int, boolean, boolean);
|
||||
extern struct obj *mksobj(int, boolean, boolean) NONNULL;
|
||||
extern int bcsign(struct obj *);
|
||||
extern int weight(struct obj *);
|
||||
extern struct obj *mkgold(long, coordxy, coordxy);
|
||||
|
||||
Reference in New Issue
Block a user