Skip to content

Commit 62d4952

Browse files
committed
Abort if we add a duplicate input
1 parent ebd57c5 commit 62d4952

File tree

1 file changed

+6
-3
lines changed

1 file changed

+6
-3
lines changed

lightning/src/ln/interactivetxs.rs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -308,7 +308,10 @@ impl NegotiationContext {
308308
};
309309
let prev_output =
310310
tx.output.get(msg.prevtx_out as usize).ok_or(AbortReason::PrevTxOutInvalid)?.clone();
311-
self.prevtx_outpoints.insert(input.previous_output);
311+
if !self.prevtx_outpoints.insert(input.previous_output) {
312+
// We have added an input that already exists
313+
return Err(AbortReason::PrevTxOutInvalid);
314+
}
312315
self.inputs.insert(msg.serial_id, TxInputWithPrevOutput { input, prev_output });
313316
Ok(())
314317
}
@@ -1253,7 +1256,7 @@ mod tests {
12531256
outputs_a: generate_outputs(&[1_000_000]),
12541257
inputs_b: vec![],
12551258
outputs_b: vec![],
1256-
expect_error: Some((AbortReason::PrevTxOutInvalid, ErrorCulprit::NodeA)),
1259+
expect_error: Some((AbortReason::PrevTxOutInvalid, ErrorCulprit::NodeB)),
12571260
});
12581261
// Non-initiator uses same prevout as initiator.
12591262
let duplicate_input = TxIn {
@@ -1266,7 +1269,7 @@ mod tests {
12661269
outputs_a: generate_outputs(&[1_000_000]),
12671270
inputs_b: vec![(duplicate_input.clone(), tx.clone())],
12681271
outputs_b: vec![],
1269-
expect_error: Some((AbortReason::PrevTxOutInvalid, ErrorCulprit::NodeB)),
1272+
expect_error: Some((AbortReason::PrevTxOutInvalid, ErrorCulprit::NodeA)),
12701273
});
12711274
// Initiator sends too many TxAddInputs
12721275
do_test_interactive_tx_constructor(TestSession {

0 commit comments

Comments
 (0)