Skip to content

Commit fecb04d

Browse files
committed
Abort if we add a duplicate input
1 parent e78c787 commit fecb04d

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
@@ -309,7 +309,10 @@ impl NegotiationContext {
309309
};
310310
let prev_output =
311311
tx.output.get(msg.prevtx_out as usize).ok_or(AbortReason::PrevTxOutInvalid)?.clone();
312-
self.prevtx_outpoints.insert(input.previous_output.clone());
312+
if !self.prevtx_outpoints.insert(input.previous_output.clone()) {
313+
// We have added an input that already exists
314+
return Err(AbortReason::PrevTxOutInvalid);
315+
}
313316
self.inputs.insert(msg.serial_id, TxInputWithPrevOutput { input, prev_output });
314317
Ok(())
315318
}
@@ -1271,7 +1274,7 @@ mod tests {
12711274
outputs_a: generate_outputs(&[1_000_000]),
12721275
inputs_b: vec![],
12731276
outputs_b: vec![],
1274-
expect_error: Some((AbortReason::PrevTxOutInvalid, ErrorCulprit::NodeA)),
1277+
expect_error: Some((AbortReason::PrevTxOutInvalid, ErrorCulprit::NodeB)),
12751278
});
12761279
// Non-initiator uses same prevout as initiator.
12771280
let duplicate_input = TxIn {
@@ -1284,7 +1287,7 @@ mod tests {
12841287
outputs_a: generate_outputs(&[1_000_000]),
12851288
inputs_b: vec![(duplicate_input.clone(), tx.clone())],
12861289
outputs_b: vec![],
1287-
expect_error: Some((AbortReason::PrevTxOutInvalid, ErrorCulprit::NodeB)),
1290+
expect_error: Some((AbortReason::PrevTxOutInvalid, ErrorCulprit::NodeA)),
12881291
});
12891292
// Initiator sends too many TxAddInputs
12901293
do_test_interactive_tx_constructor(TestSession {

0 commit comments

Comments
 (0)