- len = COUCH_MIN(len, sizeof (db->state[db->depth].name)-1);
- sstrncpy (name, (char *)val, len+1);
-
- if (c_avl_get (tree, name, (void *) &value) == 0)
- db->state[db->depth].key = value;
+ name_len = COUCH_MIN ((size_t) in_name_len,
+ sizeof (db->state[db->depth].name) - 1);
+ memcpy (name, in_name, name_len);
+ name[name_len] = 0;
+
+ if (c_avl_get (tree, name, (void *) &value) == 0) {
+ if (CJ_IS_KEY((cj_key_t*)value)) {
+ db->state[db->depth].key = value;
+ }
+ else {
+ db->state[db->depth].tree = (c_avl_tree_t*) value;
+ }
+ }