3
0
mirror of https://github.com/Qortal/altcoinj.git synced 2025-01-31 23:32:16 +00:00

WalletProtobufSerializer: throw IllegalArgumentException if tx cannot be connected.

This commit is contained in:
Mike Hearn 2013-03-30 18:06:40 +00:00
parent 9201cba0cc
commit 11b5ea11b8

View File

@ -314,8 +314,8 @@ public class WalletProtobufSerializer {
* Parses a wallet from the given stream. The stream is expected to contain a binary serialization of a * Parses a wallet from the given stream. The stream is expected to contain a binary serialization of a
* {@link Protos.Wallet} object.<p> * {@link Protos.Wallet} object.<p>
* *
* If the stream is invalid or the serialized wallet contains unsupported features, * @throws IOException if there is a problem reading the stream.
* {@link IllegalArgumentException} is thrown. * @throws IllegalArgumentException if the wallet is corrupt.
*/ */
public Wallet readWallet(InputStream input) throws IOException { public Wallet readWallet(InputStream input) throws IOException {
// TODO: This method should throw more specific exception types than IllegalArgumentException. // TODO: This method should throw more specific exception types than IllegalArgumentException.
@ -461,8 +461,11 @@ public class WalletProtobufSerializer {
TransactionOutput output = tx.getOutputs().get(i); TransactionOutput output = tx.getOutputs().get(i);
final Protos.TransactionOutput transactionOutput = txProto.getTransactionOutput(i); final Protos.TransactionOutput transactionOutput = txProto.getTransactionOutput(i);
if (transactionOutput.hasSpentByTransactionHash()) { if (transactionOutput.hasSpentByTransactionHash()) {
Transaction spendingTx = txMap.get(transactionOutput.getSpentByTransactionHash()); final ByteString spentByTransactionHash = transactionOutput.getSpentByTransactionHash();
checkNotNull(spendingTx); Transaction spendingTx = txMap.get(spentByTransactionHash);
if (spendingTx == null)
throw new IllegalArgumentException(String.format("Could not connect %s to %s",
tx.getHashAsString(), byteStringToHash(spentByTransactionHash)));
final int spendingIndex = transactionOutput.getSpentByTransactionIndex(); final int spendingIndex = transactionOutput.getSpentByTransactionIndex();
TransactionInput input = checkNotNull(spendingTx.getInput(spendingIndex)); TransactionInput input = checkNotNull(spendingTx.getInput(spendingIndex));
input.connect(output); input.connect(output);