continue;
                        if (size < rawsz)
                                goto error;
-                       memcpy(ui->oid[i].hash, (const unsigned char *)data, rawsz);
+                       oidread(&ui->oid[i], (const unsigned char *)data);
                        size -= rawsz;
                        data += rawsz;
                }
                struct cache_entry *nce;
                if (!ru->mode[i])
                        continue;
-               nce = make_cache_entry(ru->mode[i], ru->oid[i].hash,
+               nce = make_cache_entry(istate,
+                                      ru->mode[i],
+                                      &ru->oid[i],
                                       name, i + 1, 0);
                if (matched)
                        nce->ce_flags |= CE_MATCHED;