Skip to content

Commit 8b9d1f9

Browse files
committed
Ignore LARGE_COMMUNITY with length 0
1 parent 5ae097c commit 8b9d1f9

File tree

2 files changed

+28
-10
lines changed

2 files changed

+28
-10
lines changed

src/main/java/org/javamrt/mrt/Attributes.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -249,10 +249,12 @@ private void decode(byte[] record, int attrLen, int attrBytes)
249249
this.hasASPATHLimit = true;
250250
break;
251251

252-
case MRTConstants.LARGE_COMMUNITY:
253-
Attribute largeCommunity = new LargeCommunity(buffer);
254-
attributes.set(MRTConstants.ATTRIBUTE_LARGE_COMMUNITY, largeCommunity);
255-
break;
252+
case MRTConstants.LARGE_COMMUNITY:
253+
if (buffer.length > 0) {
254+
Attribute largeCommunity = new LargeCommunity(buffer);
255+
attributes.set(MRTConstants.ATTRIBUTE_LARGE_COMMUNITY, largeCommunity);
256+
}
257+
break;
256258

257259
default:
258260
route_btoa.System_err_println("Ignoring unknown attribute type " + type);

src/test/java/org/javamrt/mrt/LargeCommunitiesTest.java

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,18 @@
33

44
import org.testng.annotations.Test;
55

6-
import static org.testng.Assert.assertEquals;
7-
import static org.testng.Assert.assertTrue;
8-
import static org.testng.Assert.assertNull;
9-
10-
import java.io.*;
6+
import java.io.BufferedInputStream;
7+
import java.io.ByteArrayInputStream;
8+
import java.io.InputStream;
119
import java.util.ArrayList;
12-
import java.util.HashSet;
10+
import java.util.Base64;
1311
import java.util.List;
1412
import java.util.Set;
1513
import java.util.stream.Collectors;
1614

15+
import static org.testng.Assert.assertEquals;
16+
import static org.testng.Assert.assertNull;
17+
1718
public class LargeCommunitiesTest {
1819
@Test
1920
public void testParseDump()
@@ -57,4 +58,19 @@ public void testParseDump()
5758
assertEquals(strings.size(), 1);
5859
assertEquals(strings.iterator().next(), "200753:200:46524131");
5960
}
61+
62+
@Test
63+
public void should_parse_large_community_with_zero_length() throws Exception {
64+
final String base64 = "X3+NoAAQAAQAAACRAADjuwAAMW4AAAABW840glvONP3/////////////////////AH0CADwYF4YQGBeGERgXlyEYF6mgGBerYBhAwAAYQMABGEDAAhhAwAMYQMAEGEDABRhybOsYcmz4GLYSyBi2EskAJkABAQBAAg4CAwAA47sAABsbAAB+BUADBFvONILACATjuwPo4CAAGJ73ew==";
65+
final byte[] bytes = Base64.getDecoder().decode(base64);
66+
final BGPFileReader bgpFileReader = new BGPFileReader(new ByteArrayInputStream(bytes));
67+
MRTRecord mrtRecord = null;
68+
MRTRecord tmp;
69+
while (!bgpFileReader.eof()) {
70+
tmp = bgpFileReader.readNext();
71+
if (tmp != null) mrtRecord = tmp;
72+
}
73+
assertEquals(mrtRecord.getClass(), Advertisement.class);
74+
assertEquals(mrtRecord.toString(), "BGP4MP|1602194848|A|91.206.52.130|58299|158.247.123.0/24|58299 6939 32261|IGP|91.206.52.130|0|0|58299:1000|NAG||");
75+
}
6076
}

0 commit comments

Comments
 (0)