[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#816243: jessie-pu: package subversion/1.8.10-6+deb8u3



On Sun, Feb 28, 2016 at 09:38:23PM -0500, James McCoy wrote:
> I'd like to propose the following update (+ s/UNRELEASED/jessie/) to fix a
> crash when running svn and using kwallet to store credentials.

Ping.

> $ debdiff subversion_1.8.10-6+deb8u{2,3}.dsc
> diffstat for subversion_1.8.10-6+deb8u2 subversion_1.8.10-6+deb8u3
> 
>  debian/patches/r1701440-kwallet-segfault |  145 +++++++++++++++++++++++++++++++
>  subversion-1.8.10/debian/changelog       |    7 +
>  subversion-1.8.10/debian/patches/series  |    1 
>  3 files changed, 153 insertions(+)
> 
> diff -u subversion-1.8.10/debian/changelog subversion-1.8.10/debian/changelog
> --- subversion-1.8.10/debian/changelog
> +++ subversion-1.8.10/debian/changelog
> @@ -1,3 +1,10 @@
> +subversion (1.8.10-6+deb8u3) UNRELEASED; urgency=medium
> +
> +  * patches/r1701440-kwallet-segfault: Fix segfault when using kwallet to
> +    store authentication information.  (Closes: #736879)
> +
> + -- James McCoy <jamessan@debian.org>  Sat, 27 Feb 2016 14:08:40 -0500
> +
>  subversion (1.8.10-6+deb8u2) jessie-security; urgency=high
>  
>    * patches/r1708699-mod_auth_ntlm-kerb-fix: Fix regression interacting with
> diff -u subversion-1.8.10/debian/patches/series subversion-1.8.10/debian/patches/series
> --- subversion-1.8.10/debian/patches/series
> +++ subversion-1.8.10/debian/patches/series
> @@ -28,0 +29 @@
> +r1701440-kwallet-segfault
> only in patch2:
> unchanged:
> --- subversion-1.8.10.orig/debian/patches/r1701440-kwallet-segfault
> +++ subversion-1.8.10/debian/patches/r1701440-kwallet-segfault
> @@ -0,0 +1,145 @@
> +------------------------------------------------------------------------
> +r1701440 | svn-role | 2015-09-06 00:00:12 -0400 (Sun, 06 Sep 2015) | 9 lines
> +
> +Merge the r1700740 group from trunk:
> +
> + * r1700740, r1700951
> +   Fix registration of kwallet to avoid double free on close
> +   Justification:
> +     Fixes segfault on kwallet close. User reported problem.
> +   Votes:
> +     +1: rhuijben, stsp, brane
> +
> +
> +Index: 1.9.x/subversion/libsvn_auth_kwallet/kwallet.cpp
> +===================================================================
> +--- 1.9.x/subversion/libsvn_auth_kwallet/kwallet.cpp	(revision 1701439)
> ++++ 1.9.x/subversion/libsvn_auth_kwallet/kwallet.cpp	(revision 1701440)
> +@@ -47,6 +47,7 @@
> + #include "svn_auth.h"
> + #include "svn_config.h"
> + #include "svn_error.h"
> ++#include "svn_hash.h"
> + #include "svn_io.h"
> + #include "svn_pools.h"
> + #include "svn_string.h"
> +@@ -135,35 +136,37 @@
> +   return wid;
> + }
> + 
> ++/* Forward definition */
> ++static apr_status_t
> ++kwallet_terminate(void *data);
> ++
> + static KWallet::Wallet *
> + get_wallet(QString wallet_name,
> +            apr_hash_t *parameters)
> + {
> +   KWallet::Wallet *wallet =
> +-    static_cast<KWallet::Wallet *> (apr_hash_get(parameters,
> +-                                                 "kwallet-wallet",
> +-                                                 APR_HASH_KEY_STRING));
> +-  if (! wallet && ! apr_hash_get(parameters,
> +-                                 "kwallet-opening-failed",
> +-                                 APR_HASH_KEY_STRING))
> ++    static_cast<KWallet::Wallet *> (svn_hash_gets(parameters,
> ++                                                  "kwallet-wallet"));
> ++  if (! wallet && ! svn_hash_gets(parameters, "kwallet-opening-failed"))
> +     {
> +       wallet = KWallet::Wallet::openWallet(wallet_name, get_wid(),
> +                                            KWallet::Wallet::Synchronous);
> ++
> ++      if (wallet)
> ++        {
> ++          svn_hash_sets(parameters, "kwallet-wallet", wallet);
> ++
> ++          apr_pool_cleanup_register(apr_hash_pool_get(parameters),
> ++                                    parameters, kwallet_terminate,
> ++                                    apr_pool_cleanup_null);
> ++
> ++          svn_hash_sets(parameters, "kwallet-initialized", "");
> ++        }
> ++      else
> ++        {
> ++          svn_hash_sets(parameters, "kwallet-opening-failed", "");
> ++        }
> +     }
> +-  if (wallet)
> +-    {
> +-      apr_hash_set(parameters,
> +-                   "kwallet-wallet",
> +-                   APR_HASH_KEY_STRING,
> +-                   wallet);
> +-    }
> +-  else
> +-    {
> +-      apr_hash_set(parameters,
> +-                   "kwallet-opening-failed",
> +-                   APR_HASH_KEY_STRING,
> +-                   "");
> +-    }
> +   return wallet;
> + }
> + 
> +@@ -171,14 +174,12 @@
> + kwallet_terminate(void *data)
> + {
> +   apr_hash_t *parameters = static_cast<apr_hash_t *> (data);
> +-  if (apr_hash_get(parameters, "kwallet-initialized", APR_HASH_KEY_STRING))
> ++  if (svn_hash_gets(parameters, "kwallet-initialized"))
> +     {
> +       KWallet::Wallet *wallet = get_wallet(NULL, parameters);
> +       delete wallet;
> +-      apr_hash_set(parameters,
> +-                   "kwallet-initialized",
> +-                   APR_HASH_KEY_STRING,
> +-                   NULL);
> ++      svn_hash_sets(parameters, "kwallet-wallet", NULL);
> ++      svn_hash_sets(parameters, "kwallet-initialized", NULL);
> +     }
> +   return APR_SUCCESS;
> + }
> +@@ -236,10 +237,6 @@
> +       KWallet::Wallet *wallet = get_wallet(wallet_name, parameters);
> +       if (wallet)
> +         {
> +-          apr_hash_set(parameters,
> +-                       "kwallet-initialized",
> +-                       APR_HASH_KEY_STRING,
> +-                       "");
> +           if (wallet->setFolder(folder))
> +             {
> +               QString q_password;
> +@@ -254,9 +251,6 @@
> +         }
> +     }
> + 
> +-  apr_pool_cleanup_register(pool, parameters, kwallet_terminate,
> +-                            apr_pool_cleanup_null);
> +-
> +   return SVN_NO_ERROR;
> + }
> + 
> +@@ -310,10 +304,6 @@
> +   KWallet::Wallet *wallet = get_wallet(wallet_name, parameters);
> +   if (wallet)
> +     {
> +-      apr_hash_set(parameters,
> +-                   "kwallet-initialized",
> +-                   APR_HASH_KEY_STRING,
> +-                   "");
> +       if (! wallet->hasFolder(folder))
> +         {
> +           wallet->createFolder(folder);
> +@@ -329,9 +319,6 @@
> +         }
> +     }
> + 
> +-  apr_pool_cleanup_register(pool, parameters, kwallet_terminate,
> +-                            apr_pool_cleanup_null);
> +-
> +   return SVN_NO_ERROR;
> + }
> + 
> +
> +------------------------------------------------------------------------

Cheers,
-- 
James
GPG Key: 4096R/331BA3DB 2011-12-05 James McCoy <jamessan@debian.org>


Reply to: