@ -321,18 +321,23 @@ Value signrawtransaction(const Array& params, bool fHelp)
// Fetch previous transactions (inputs):
// Fetch previous transactions (inputs):
map < COutPoint , CScript > mapPrevOut ;
map < COutPoint , CScript > mapPrevOut ;
for ( unsigned int i = 0 ; i < mergedTx . vin . size ( ) ; i + + )
{
{
CTransaction tempTx ;
MapPrevTx mapPrevTx ;
MapPrevTx mapPrevTx ;
CTxDB txdb ( " r " ) ;
CTxDB txdb ( " r " ) ;
map < uint256 , CTxIndex > unused ;
map < uint256 , CTxIndex > unused ;
bool fInvalid ;
bool fInvalid ;
mergedTx . FetchInputs ( txdb , unused , false , false , mapPrevTx , fInvalid ) ;
// FetchInputs aborts on failure, so we go one at a time.
tempTx . vin . push_back ( mergedTx . vin [ i ] ) ;
tempTx . FetchInputs ( txdb , unused , false , false , mapPrevTx , fInvalid ) ;
// Copy results into mapPrevOut:
// Copy results into mapPrevOut:
BOOST_FOREACH ( const CTxIn & txin , mergedTx . vin )
BOOST_FOREACH ( const CTxIn & txin , temp Tx. vin )
{
{
const uint256 & prevHash = txin . prevout . hash ;
const uint256 & prevHash = txin . prevout . hash ;
if ( mapPrevTx . count ( prevHash ) )
if ( mapPrevTx . count ( prevHash ) & & mapPrevTx [ prevHash ] . second . vout . size ( ) > txin . prevout . n )
mapPrevOut [ txin . prevout ] = mapPrevTx [ prevHash ] . second . vout [ txin . prevout . n ] . scriptPubKey ;
mapPrevOut [ txin . prevout ] = mapPrevTx [ prevHash ] . second . vout [ txin . prevout . n ] . scriptPubKey ;
}
}
}
}