Skip to content

Commit 46454a2

Browse files
authored
feat(log):verify columns of hellomessage to avoid too long log (#5667)
1 parent 32e1e15 commit 46454a2

File tree

3 files changed

+67
-6
lines changed

3 files changed

+67
-6
lines changed

framework/src/main/java/org/tron/core/net/message/handshake/HelloMessage.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import lombok.Getter;
55
import org.apache.commons.lang3.StringUtils;
66
import org.tron.common.utils.ByteArray;
7+
import org.tron.common.utils.DecodeUtil;
78
import org.tron.common.utils.StringUtil;
89
import org.tron.core.ChainBaseManager;
910
import org.tron.core.capsule.BlockCapsule;
@@ -169,6 +170,22 @@ public boolean valid() {
169170
return false;
170171
}
171172

173+
int maxByteSize = 200;
174+
ByteString address = this.helloMessage.getAddress();
175+
if (!address.isEmpty() && address.toByteArray().length > maxByteSize) {
176+
return false;
177+
}
178+
179+
ByteString sig = this.helloMessage.getSignature();
180+
if (!sig.isEmpty() && sig.toByteArray().length > maxByteSize) {
181+
return false;
182+
}
183+
184+
ByteString codeVersion = this.helloMessage.getCodeVersion();
185+
if (!codeVersion.isEmpty() && codeVersion.toByteArray().length > maxByteSize) {
186+
return false;
187+
}
188+
172189
return true;
173190
}
174191

framework/src/main/java/org/tron/core/net/service/handshake/HandshakeService.java

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -48,12 +48,15 @@ public void processHelloMessage(PeerConnection peer, HelloMessage msg) {
4848
}
4949

5050
if (!msg.valid()) {
51-
logger.warn("Peer {} invalid hello message parameters, "
52-
+ "GenesisBlockId: {}, SolidBlockId: {}, HeadBlockId: {}",
53-
peer.getInetSocketAddress(),
54-
ByteArray.toHexString(msg.getInstance().getGenesisBlockId().getHash().toByteArray()),
55-
ByteArray.toHexString(msg.getInstance().getSolidBlockId().getHash().toByteArray()),
56-
ByteArray.toHexString(msg.getInstance().getHeadBlockId().getHash().toByteArray()));
51+
logger.warn("Peer {} invalid hello message parameters, GenesisBlockId: {}, SolidBlockId: {}, "
52+
+ "HeadBlockId: {}, address: {}, sig: {}, codeVersion: {}",
53+
peer.getInetSocketAddress(),
54+
ByteArray.toHexString(msg.getInstance().getGenesisBlockId().getHash().toByteArray()),
55+
ByteArray.toHexString(msg.getInstance().getSolidBlockId().getHash().toByteArray()),
56+
ByteArray.toHexString(msg.getInstance().getHeadBlockId().getHash().toByteArray()),
57+
msg.getInstance().getAddress().toByteArray().length,
58+
msg.getInstance().getSignature().toByteArray().length,
59+
msg.getInstance().getCodeVersion().toByteArray().length);
5760
peer.disconnect(ReasonCode.UNEXPECTED_IDENTITY);
5861
return;
5962
}

framework/src/test/java/org/tron/core/net/services/HandShakeServiceTest.java

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import org.mockito.Mockito;
2222
import org.springframework.context.ApplicationContext;
2323
import org.tron.common.application.TronApplicationContext;
24+
import org.tron.common.utils.ByteArray;
2425
import org.tron.common.utils.ReflectUtils;
2526
import org.tron.common.utils.Sha256Hash;
2627
import org.tron.core.ChainBaseManager;
@@ -137,6 +138,37 @@ public void testInvalidHelloMessage() {
137138
}
138139
}
139140

141+
@Test
142+
public void testInvalidHelloMessage2() throws Exception {
143+
Protocol.HelloMessage.Builder builder = getTestHelloMessageBuilder();
144+
Assert.assertTrue(new HelloMessage(builder.build().toByteArray()).valid());
145+
146+
builder.setAddress(ByteString.copyFrom(new byte[201]));
147+
HelloMessage helloMessage = new HelloMessage(builder.build().toByteArray());
148+
Assert.assertFalse(helloMessage.valid());
149+
150+
builder.setAddress(ByteString.copyFrom(new byte[200]));
151+
helloMessage = new HelloMessage(builder.build().toByteArray());
152+
Assert.assertTrue(helloMessage.valid());
153+
154+
builder.setSignature(ByteString.copyFrom(new byte[201]));
155+
helloMessage = new HelloMessage(builder.build().toByteArray());
156+
Assert.assertFalse(helloMessage.valid());
157+
158+
builder.setSignature(ByteString.copyFrom(new byte[200]));
159+
helloMessage = new HelloMessage(builder.build().toByteArray());
160+
Assert.assertTrue(helloMessage.valid());
161+
162+
builder.setCodeVersion(ByteString.copyFrom(new byte[201]));
163+
helloMessage = new HelloMessage(builder.build().toByteArray());
164+
Assert.assertFalse(helloMessage.valid());
165+
166+
builder.setCodeVersion(ByteString.copyFrom(new byte[200]));
167+
helloMessage = new HelloMessage(builder.build().toByteArray());
168+
Assert.assertTrue(helloMessage.valid());
169+
}
170+
171+
140172
@Test
141173
public void testRelayHelloMessage() throws NoSuchMethodException {
142174
InetSocketAddress a1 = new InetSocketAddress("127.0.0.1", 10001);
@@ -266,4 +298,13 @@ private Protocol.HelloMessage.Builder getHelloMessageBuilder(Node from, long tim
266298

267299
return builder;
268300
}
301+
302+
private Protocol.HelloMessage.Builder getTestHelloMessageBuilder() {
303+
InetSocketAddress a1 = new InetSocketAddress("127.0.0.1", 10001);
304+
Node node = new Node(NetUtil.getNodeId(), a1.getAddress().getHostAddress(), null, a1.getPort());
305+
Protocol.HelloMessage.Builder builder =
306+
getHelloMessageBuilder(node, System.currentTimeMillis(),
307+
ChainBaseManager.getChainBaseManager());
308+
return builder;
309+
}
269310
}

0 commit comments

Comments
 (0)