Full_Name: Hallvard B Furuseth Version: HEAD, RE24 OS: Linux URL: Submission from: (NULL) (129.240.6.233) Submitted by: hallvard
Thinko in dds_expire():
Traversing a list chained on (struct dds_expire_t).de_next, it keeps dds_expire_t **dep == &(previous element).de_next. Before freeing (de = *dep), it points dep into de. Fixing.
Suspicious code in same function:
The 'default:' branch says "deferring" (deferring what? deletion?) and does not increment ndeletes, yet 'dds_expire_t *de' is deleted in that case as well. Is that intentional? I don't know dds. If it's not, we could just move the free() into 'case LDAP_SUCCESS:' and remove the 'de = NULL;' in the LDAP_NOT_ALLOWED_ON_NONLEAF case.