if (nprops < 0 || nprops > SIZE_T_MAX/(sizeof(FontPropRec) + sizeof(char))) return -1;
_fs_convert_props(fsPropInfo *pi, fsPropOffset *po, pointer pd, 		  FontInfoPtr pfi){    FontPropPtr dprop;    int         i,                nprops;    char       *is_str;    fsPropOffset local_off;    char *off_adr;    char *pdc = pd;/* stolen from server/include/resource.h */#define BAD_RESOURCE 0xe0000000    nprops = pfi->nprops = pi->num_offsets;    dprop = (FontPropPtr) xalloc(sizeof(FontPropRec) * nprops +				 sizeof (char) * nprops);    if (!dprop)	return -1;        is_str = (char *) (dprop + nprops);    pfi->props = dprop;    pfi->isStringProp = is_str;    off_adr = (char *)po;    for (i = 0; i < nprops; i++, dprop++, is_str++)     {	memcpy(&local_off, off_adr, SIZEOF(fsPropOffset));	dprop->name = MakeAtom(&pdc[local_off.name.position],			       local_off.name.length, 1);	if (local_off.type != PropTypeString) {	    *is_str = FALSE;	    dprop->value = local_off.value.position;	} else {	    *is_str = TRUE;	    dprop->value = (INT32) MakeAtom(&pdc[local_off.value.position],					    local_off.value.length, 1);	    if (dprop->value == BAD_RESOURCE)	    {		xfree (pfi->props);		pfi->nprops = 0;		pfi->props = 0;		pfi->isStringProp = 0;		return -1;	    }	}	off_adr += SIZEOF(fsPropOffset);    }    return nprops;}