dictIterator _dictGetIterator(dict *d)
{
dictIterator *iter = malloc(sizeof(_iter));
iter->d = d;
iter->table = 0;
iter->index = -1;
iter->safe = 0;
iter->entry = NULL;
iter->nextEntry = NULL;
return iter;
}
No check to see if malloc actually creates heap object.
dictEntry *dictNext(dictIterator *iter)
{
while (1) {
if (iter->entry == NULL) {
dictht *ht = &iter->d->ht[iter->table];
if (iter->safe && iter->index == -1 && iter->table == 0)
iter->d->iterators++;
iter->index++;
if (iter->index >= (signed) ht->size) {
if (dictIsRehashing(iter->d) && iter->table == 0) {
iter->table++;
iter->index = 0;
ht = &iter->d->ht[1];
} else {
break;
}
Looks like this code would break someday because of inconsistency,&iter->d->ht[iter->table] and &iter->d->ht[1]
dictIterator _dictGetIterator(dict *d)
{
dictIterator *iter = malloc(sizeof(_iter));
}
No check to see if malloc actually creates heap object.
dictEntry *dictNext(dictIterator *iter)
{
while (1) {
if (iter->entry == NULL) {
dictht *ht = &iter->d->ht[iter->table];
if (iter->safe && iter->index == -1 && iter->table == 0)
iter->d->iterators++;
iter->index++;
if (iter->index >= (signed) ht->size) {
if (dictIsRehashing(iter->d) && iter->table == 0) {
iter->table++;
iter->index = 0;
ht = &iter->d->ht[1];
} else {
break;
}
Looks like this code would break someday because of inconsistency,&iter->d->ht[iter->table] and &iter->d->ht[1]