From db15805668e923c3493d77122d20926496cf6a1a Mon Sep 17 00:00:00 2001
From: gustavonalle <gustavonalle@gmail.com>
Date: Mon, 24 Sep 2018 16:10:23 +0100
Subject: [PATCH 1/2] [wallet] Ensure wallet is unlocked before signing

---
 src/wallet/rpcwallet.cpp                  | 2 ++
 test/functional/rpc_signrawtransaction.py | 9 +++++++++
 2 files changed, 11 insertions(+)

diff --git a/src/wallet/rpcwallet.cpp b/src/wallet/rpcwallet.cpp
index 1a2dff9a9..8a402546a 100644
--- a/src/wallet/rpcwallet.cpp
+++ b/src/wallet/rpcwallet.cpp
@@ -3116,6 +3116,8 @@ UniValue signrawtransactionwithwallet(const JSONRPCRequest& request)
 
     // Sign the transaction
     LOCK2(cs_main, pwallet->cs_wallet);
+    EnsureWalletIsUnlocked(pwallet);
+
     return SignTransaction(mtx, request.params[1], pwallet, false, request.params[2]);
 }
 
diff --git a/test/functional/rpc_signrawtransaction.py b/test/functional/rpc_signrawtransaction.py
index 5c07f2cca..98648dd43 100755
--- a/test/functional/rpc_signrawtransaction.py
+++ b/test/functional/rpc_signrawtransaction.py
@@ -45,6 +45,14 @@ class SignRawTransactionsTest(BitcoinTestFramework):
         # 2) No script verification error occurred
         assert 'errors' not in rawTxSigned
 
+    def test_with_lock_outputs(self):
+        """Test correct error reporting when trying to sign a locked output"""
+        self.nodes[0].encryptwallet("password")
+        self.restart_node(0)
+        rawTx = '020000000156b958f78e3f24e0b2f4e4db1255426b0902027cb37e3ddadb52e37c3557dddb0000000000ffffffff01c0a6b929010000001600149a2ee8c77140a053f36018ac8124a6ececc1668a00000000'
+
+        assert_raises_rpc_error(-13, "Please enter the wallet passphrase with walletpassphrase first", self.nodes[0].signrawtransactionwithwallet, rawTx)
+
     def script_verification_error_test(self):
         """Create and sign a raw transaction with valid (vin 0), invalid (vin 1) and one missing (vin 2) input script.
 
@@ -138,6 +146,7 @@ class SignRawTransactionsTest(BitcoinTestFramework):
     def run_test(self):
         self.successful_signing_test()
         self.script_verification_error_test()
+        self.test_with_lock_outputs()
 
 
 if __name__ == '__main__':

From 20442f617f7f86cbdde1c41c1165e2b750f756c7 Mon Sep 17 00:00:00 2001
From: gustavonalle <gustavonalle@gmail.com>
Date: Mon, 24 Sep 2018 20:30:16 +0100
Subject: [PATCH 2/2] [wallet] remove redundand restart node

---
 test/functional/rpc_signrawtransaction.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/test/functional/rpc_signrawtransaction.py b/test/functional/rpc_signrawtransaction.py
index 98648dd43..291538df6 100755
--- a/test/functional/rpc_signrawtransaction.py
+++ b/test/functional/rpc_signrawtransaction.py
@@ -48,7 +48,7 @@ class SignRawTransactionsTest(BitcoinTestFramework):
     def test_with_lock_outputs(self):
         """Test correct error reporting when trying to sign a locked output"""
         self.nodes[0].encryptwallet("password")
-        self.restart_node(0)
+
         rawTx = '020000000156b958f78e3f24e0b2f4e4db1255426b0902027cb37e3ddadb52e37c3557dddb0000000000ffffffff01c0a6b929010000001600149a2ee8c77140a053f36018ac8124a6ececc1668a00000000'
 
         assert_raises_rpc_error(-13, "Please enter the wallet passphrase with walletpassphrase first", self.nodes[0].signrawtransactionwithwallet, rawTx)