Skip to content

Commit e3ab041

Browse files
Merge pull request #6181 from fyyhtx/fix_transaction_handle
fix(net): add check for the number of contracts in the transaction
2 parents 6de76fb + 1365aff commit e3ab041

File tree

2 files changed

+27
-0
lines changed

2 files changed

+27
-0
lines changed

framework/src/main/java/org/tron/core/net/messagehandler/TransactionsMsgHandler.java

+4
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,10 @@ private void check(PeerConnection peer, TransactionsMessage msg) throws P2pExcep
9898
"trx: " + msg.getMessageId() + " without request.");
9999
}
100100
peer.getAdvInvRequest().remove(item);
101+
if (trx.getRawData().getContractCount() < 1) {
102+
throw new P2pException(TypeEnum.BAD_TRX,
103+
"tx " + item.getHash() + " contract size should be greater than 0");
104+
}
101105
}
102106
}
103107

framework/src/test/java/org/tron/core/net/messagehandler/TransactionsMsgHandlerTest.java

+23
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,29 @@ public void testProcessMessage() {
102102
transactionList1.add(trx1);
103103
transactionsMsgHandler.processMessage(peer, new TransactionsMessage(transactionList1));
104104
Assert.assertNull(advInvRequest.get(item1));
105+
106+
// test 0 contract
107+
Protocol.Transaction trx2 = Protocol.Transaction.newBuilder().setRawData(
108+
Protocol.Transaction.raw.newBuilder().setTimestamp(transactionTimestamp)
109+
.setRefBlockNum(1).build())
110+
.build();
111+
List<Protocol.Transaction> transactionList2 = new ArrayList<>();
112+
transactionList2.add(trx2);
113+
try {
114+
transactionsMsgHandler.processMessage(peer, new TransactionsMessage(transactionList2));
115+
} catch (Exception ep) {
116+
Assert.assertTrue(true);
117+
}
118+
Map<Item, Long> advInvRequest2 = new ConcurrentHashMap<>();
119+
Item item2 = new Item(new TransactionMessage(trx2).getMessageId(),
120+
Protocol.Inventory.InventoryType.TRX);
121+
advInvRequest2.put(item2, 0L);
122+
Mockito.when(peer.getAdvInvRequest()).thenReturn(advInvRequest2);
123+
try {
124+
transactionsMsgHandler.processMessage(peer, new TransactionsMessage(transactionList2));
125+
} catch (Exception ep) {
126+
Assert.assertTrue(true);
127+
}
105128
} catch (Exception e) {
106129
Assert.fail();
107130
} finally {

0 commit comments

Comments
 (0)