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

RE: [PATCH] fix "svnadmin create" fail on x86

From: Bert Huijben <bert_at_qqmail.nl>
Date: Wed, 2 Nov 2016 11:57:29 +0100

> -----Original Message-----
> From: Dengke Du [mailto:dengke.du_at_windriver.com]
> Sent: woensdag 2 november 2016 10:22
> To: dev_at_subversion.apache.org
> Subject: [PATCH] fix "svnadmin create" fail on x86
>
> When run the following command on x86:
>
> svnadmin create /var/test_repo
>
> It cause segmentation fault error like the following:
>
> [16499.751837] svnadmin[21117]: segfault at 83 ip 00000000f74bf7f6
sp
> 00000000ffdd9b34 error 4 in libc-2.24.so[f7441000+1af000]
> Segmentation fault (core dumped)
>
> This is because in source code ./subversion/libsvn_fs_fs/low_level.c,
> function svn_fs_fs__unparse_footer, when:
>
> target arch: x86
> apr_off_t: 4 bytes
>
> if the "APR_OFF_T_FMT" is "lld", it still use type "apr_off_t" to pass
> data to apr, but in apr source code file apr_snprintf.c the function
> apr_vformatter meet "lld", it would use the:
>
> i_quad = va_arg(ap, apr_int64_t);
>
> It uses the apr_int64_t to deal data, it read 8 bytes, so the follow-up
> data may be error.
>
> Signed-off-by: Dengke Du <dengke.du_at_windriver.com>
> ---
> subversion/libsvn_fs_fs/low_level.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/subversion/libsvn_fs_fs/low_level.c
> b/subversion/libsvn_fs_fs/low_level.c
> index a27bbcc..6ddbe28 100644
> --- a/subversion/libsvn_fs_fs/low_level.c
> +++ b/subversion/libsvn_fs_fs/low_level.c
> @@ -250,10 +250,10 @@ svn_fs_fs__unparse_footer(apr_off_t l2p_offset,
> {
> return svn_stringbuf_createf(result_pool,
> "%" APR_OFF_T_FMT " %s %" APR_OFF_T_FMT "
%s",
> - l2p_offset,
> + (APR_OFF_T_FMT=="lld") ?
(apr_int64_t)l2p_offset :
> l2p_offset,

This doesn't change the size of the argument...

The result of the '?:' operator is always the same type, following a set of
rules set by the C standard.

Besides that the result of the '==' operator on static strings is not
defined and commonly different between release and debug builds.

And if there is a bug in formatting apr_off_t with that macro it should
really be fixed in APR... These macros are designed to abstract away
platform specifics, we can't just fix all similar cases in our code.

        Bert
Received on 2016-11-02 11:57:41 CET

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