[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

Re: svn commit: r39768 - trunk/subversion/libsvn_fs_fs

From: Greg Stein <gstein_at_gmail.com>
Date: Wed, 7 Oct 2009 20:57:37 -0400

Oop. Since you're offline for a couple more days, I went ahead and
fixed this. r39856.

On Wed, Oct 7, 2009 at 20:52, Greg Stein <gstein_at_gmail.com> wrote:
> 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=2404754
Received on 2009-10-08 02:57:47 CEST

This is an archived mail posted to the Subversion Dev mailing list.