From 7e1d5ca8944ec6b129244206860c39454dd03ec0 Mon Sep 17 00:00:00 2001 From: "Wladimir J. van der Laan" Date: Tue, 28 Jan 2014 09:38:10 +0100 Subject: [PATCH] Add check for valid keys in `importprivkey` The base58 armoring was checked, but not the resulting private key, which could be out of range. Fix this by adding a check. Conflicts: src/rpcdump.cpp Conflicts: src/rpcdump.cpp Rebased-from: b403ab80ab39d41a6f965479cdf878cd8e58a399 0.8.x --- src/rpcdump.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/rpcdump.cpp b/src/rpcdump.cpp index 2cf6a192c..f33c00369 100644 --- a/src/rpcdump.cpp +++ b/src/rpcdump.cpp @@ -54,11 +54,13 @@ Value importprivkey(const Array& params, bool fHelp) CBitcoinSecret vchSecret; bool fGood = vchSecret.SetString(strSecret); - if (!fGood) throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid private key"); + if (!fGood) throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid private key encoding"); CKey key = vchSecret.GetKey(); CPubKey pubkey = key.GetPubKey(); CKeyID vchAddress = pubkey.GetID(); + if (!key.IsValid()) throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Private key outside allowed range"); + { LOCK2(cs_main, pwalletMain->cs_wallet);