Skip to content

Commit f9a5b64

Browse files
committed
Abort if we add a duplicate input
1 parent 5756a56 commit f9a5b64

File tree

1 file changed

+6
-3
lines changed

1 file changed

+6
-3
lines changed

lightning/src/ln/interactivetxs.rs

+6-3
Original file line numberDiff line numberDiff line change
@@ -310,7 +310,10 @@ impl NegotiationContext {
310310
};
311311
let prev_output =
312312
tx.output.get(msg.prevtx_out as usize).ok_or(AbortReason::PrevTxOutInvalid)?.clone();
313-
self.prevtx_outpoints.insert(input.previous_output.clone());
313+
if !self.prevtx_outpoints.insert(input.previous_output.clone()) {
314+
// We have added an input that already exists
315+
return Err(AbortReason::PrevTxOutInvalid);
316+
}
314317
self.inputs.insert(msg.serial_id, TxInputWithPrevOutput { input, prev_output });
315318
Ok(())
316319
}
@@ -1272,7 +1275,7 @@ mod tests {
12721275
outputs_a: generate_outputs(&[1_000_000]),
12731276
inputs_b: vec![],
12741277
outputs_b: vec![],
1275-
expect_error: Some((AbortReason::PrevTxOutInvalid, ErrorCulprit::NodeA)),
1278+
expect_error: Some((AbortReason::PrevTxOutInvalid, ErrorCulprit::NodeB)),
12761279
});
12771280
// Non-initiator uses same prevout as initiator.
12781281
let duplicate_input = TxIn {
@@ -1285,7 +1288,7 @@ mod tests {
12851288
outputs_a: generate_outputs(&[1_000_000]),
12861289
inputs_b: vec![(duplicate_input.clone(), tx.clone())],
12871290
outputs_b: vec![],
1288-
expect_error: Some((AbortReason::PrevTxOutInvalid, ErrorCulprit::NodeB)),
1291+
expect_error: Some((AbortReason::PrevTxOutInvalid, ErrorCulprit::NodeA)),
12891292
});
12901293
// Initiator sends too many TxAddInputs
12911294
do_test_interactive_tx_constructor(TestSession {

0 commit comments

Comments
 (0)