diff --git a/src/mapping.c b/src/mapping.c index 3946447fe637df767d1da6e26ba1aefed09663d6..c45c59e52876d3bc2dee4840cead6591a2351e28 100644 --- a/src/mapping.c +++ b/src/mapping.c @@ -350,10 +350,13 @@ static void mapping_rehash_backwards_evil(struct mapping_data *md, } break; case MAPPING_WEAK: - if ((TYPEOF(from->ind) <= MAX_REF_TYPE) && - (*from->ind.u.refs > 1) && - (TYPEOF(from->val) <= MAX_REF_TYPE) && - (*from->val.u.refs > 1)) { + /* NB: Compat: Unreference counted values are counted + * as multi-referenced here. + */ + if (((TYPEOF(from->ind) > MAX_REF_TYPE) || + (*from->ind.u.refs > 1)) && + ((TYPEOF(from->val) > MAX_REF_TYPE) || + (*from->val.u.refs > 1))) { goto keep_keypair; } break; @@ -440,10 +443,13 @@ static void mapping_rehash_backwards_good(struct mapping_data *md, } break; case MAPPING_WEAK: - if ((TYPEOF(from->ind) <= MAX_REF_TYPE) && - (*from->ind.u.refs > 1) && - (TYPEOF(from->val) <= MAX_REF_TYPE) && - (*from->val.u.refs > 1)) { + /* NB: Compat: Unreference counted values are counted + * as multi-referenced here. + */ + if (((TYPEOF(from->ind) > MAX_REF_TYPE) || + (*from->ind.u.refs > 1)) && + ((TYPEOF(from->val) > MAX_REF_TYPE) || + (*from->val.u.refs > 1))) { goto keep_keypair; } break;