On Fri, Oct 2, 2009 at 13:22, Hyrum K. Wright <hyrum_at_hyrumwright.org> wrote:
>...
> +++ trunk/subversion/libsvn_fs_fs/fs_fs.c Fri Oct 2 10:22:06 2009 (r39768)
>...
> @@ -6185,18 +6172,17 @@ recover_find_max_ids(svn_fs_t *fs, svn_r
> iterpool = svn_pool_create(pool);
> for (hi = apr_hash_first(NULL, entries); hi; hi = apr_hash_next(hi))
> {
> - void *val;
> char *str_val;
> char *str, *last_str;
> svn_node_kind_t kind;
> svn_fs_id_t *id;
> const char *node_id, *copy_id;
> apr_off_t child_dir_offset;
> + const char *path = svn_apr_hash_index_val(hi);
>
> svn_pool_clear(iterpool);
>
> - apr_hash_this(hi, NULL, NULL, &val);
> - str_val = apr_pstrdup(iterpool, *((char **)val));
> + str_val = apr_pstrdup(iterpool, path);
This is an incorrect transformation.
The original code was being "too smart" and knew that val was an
svn_string_t* and that val->data is the first member, thus deref'ing a
char** would be equivalent to fetching val->data.
So. You want something like:
svn_string_t *path = svn_apr_hash_index_val(hi);
...
str_val = apr_pstrdup(iterpool, path->data);
As it stands, you're dup'ing the svn_string_t structure itself.
>...
Cheers,
-g
------------------------------------------------------
http://subversion.tigris.org/ds/viewMessage.do?dsForumId=462&dsMessageId=2404752
Received on 2009-10-08 02:52:10 CEST