Skip to content

Commit 13fed9d

Browse files
authored
FIX unused trailing bytes in ASN.1 SEQUENCE (#296)
1 parent 6b554bb commit 13fed9d

6 files changed

Lines changed: 27 additions & 28 deletions

File tree

.github/workflows/build.yml

Lines changed: 6 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -41,27 +41,15 @@ jobs:
4141
path: ~/.m2/repository
4242
key: ${{ runner.os }}-m2-repository-${{ hashFiles('**/pom.xml') }}
4343
restore-keys: ${{ runner.os }}-m2-repository
44-
- name: Build with Maven
45-
env:
46-
MAVEN_OPTS: -Dhttps.protocols=TLSv1.2 -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 -Dmaven.wagon.http.retryHandler.requestSentEnabled=true -Dmaven.wagon.http.retryHandler.count=10
47-
run: mvn --batch-mode --errors --update-snapshots package --file pom.xml
48-
- name: IT test
49-
id: failsafe
44+
- name: Set Integration Test Environment
45+
id: maven-profile-flag
5046
if: runner.os != 'Windows'
51-
timeout-minutes: 120
47+
run: |
48+
echo "MAVEN_PROFILE_FLAG=-P precommit" >> $GITHUB_OUTPUT
49+
- name: Build with Maven
5250
env:
5351
MAVEN_OPTS: -Dhttps.protocols=TLSv1.2 -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 -Dmaven.wagon.http.retryHandler.requestSentEnabled=true -Dmaven.wagon.http.retryHandler.count=10
54-
run: |
55-
cat /etc/hosts
56-
mvn --batch-mode --errors verify --file opendj-server-legacy/pom.xml -P precommit
57-
- name: Upload IT test failiure opendj-server-legacy/target
58-
uses: actions/upload-artifact@v3
59-
if: failure()
60-
with:
61-
name: failsafe-${{ matrix.os }}-${{ matrix.java }}
62-
retention-days: 5
63-
path: |
64-
opendj-server-legacy/target/
52+
run: mvn --batch-mode --errors --update-snapshots verify --file pom.xml ${{ steps.maven-profile-flag.outputs.MAVEN_PROFILE_FLAG }}
6553
- name: Test on Unix
6654
if: runner.os != 'Windows'
6755
run: |

opendj-grizzly/src/main/java/org/forgerock/opendj/grizzly/ASN1BufferReader.java

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,13 @@
3535
/** Grizzly ASN1 reader implementation. */
3636
final class ASN1BufferReader extends AbstractASN1Reader {
3737
private final class ChildSequenceLimiter implements SequenceLimiter {
38-
private SequenceLimiter parent;
38+
@Override
39+
public String toString() {
40+
return "ChildSequenceLimiter [parent=" + parent + ", child=" + child + ", readLimit=" + readLimit
41+
+ ", bytesRead=" + bytesRead + ", remaining()=" + remaining() + "]";
42+
}
43+
44+
private SequenceLimiter parent;
3945
private ChildSequenceLimiter child;
4046
private int readLimit;
4147
private int bytesRead;
@@ -55,7 +61,7 @@ public SequenceLimiter endSequence() throws IOException {
5561
parent.checkLimit(remaining());
5662
if (remaining() > 0) {
5763
logger.debug(LocalizableMessage.raw(
58-
"Ignoring %d unused trailing bytes in ASN.1 SEQUENCE", remaining()));
64+
"Ignoring %d unused trailing bytes in ASN.1 SEQUENCE: %s", remaining(),toString()));
5965
}
6066
for (int i = 0; i < remaining(); i++) {
6167
buffer.get();
@@ -81,11 +87,16 @@ public ChildSequenceLimiter startSequence(final int readLimit) {
8187
}
8288

8389
private final class RootSequenceLimiter implements SequenceLimiter {
84-
private ChildSequenceLimiter child;
90+
@Override
91+
public String toString() {
92+
return "RootSequenceLimiter [remaining()=" + remaining() + "]";
93+
}
94+
95+
private ChildSequenceLimiter child;
8596

8697
@Override
8798
public void checkLimit(final int readSize) throws IOException {
88-
if (buffer.remaining() < readSize) {
99+
if ( remaining() < readSize) {
89100
final LocalizableMessage message = ERR_ASN1_TRUNCATED_LENGTH_BYTE.get();
90101
throw DecodeException.fatalError(message);
91102
}
@@ -99,7 +110,7 @@ public ChildSequenceLimiter endSequence() throws DecodeException {
99110

100111
@Override
101112
public int remaining() {
102-
return buffer.remaining();
113+
return buffer.hasRemaining() ? buffer.remaining() : 0;
103114
}
104115

105116
@Override

opendj-grizzly/src/main/java/org/forgerock/opendj/grizzly/DefaultTCPNIOTransport.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ protected TCPNIOTransport newInstance() {
135135
// Enabled by default.
136136
builder.setReuseAddress(Boolean.parseBoolean(reuseAddressStr));
137137
}
138-
//builder.setMemoryManager(new PooledMemoryManager(true));
138+
builder.setMemoryManager(new PooledMemoryManager(true));
139139

140140

141141
final TCPNIOTransport transport = builder.build();

opendj-grizzly/src/main/java/org/forgerock/opendj/grizzly/LDAPClientFilter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -429,7 +429,7 @@ public final NextAction handleRead(final FilterChainContext ctx) throws IOExcept
429429
return ctx.getStopAction(buffer.duplicate());
430430
}
431431
final int length = reader.peekLength();
432-
final Buffer remainder = buffer.remaining() > length ? buffer.split(buffer.position() + length) : null;
432+
final Buffer remainder = (buffer.hasRemaining() && buffer.remaining() > length) ? buffer.split(buffer.position() + length) : null;
433433
buffer.reset();
434434
try (final ASN1BufferReader packetReader =
435435
new ASN1BufferReader(maxASN1ElementSize, buffer.asReadOnlyBuffer())) {

opendj-grizzly/src/main/java/org/forgerock/opendj/grizzly/ServerTCPNIOTransport.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ protected TCPNIOTransport newInstance() {
9898
builder.setReuseAddress(Boolean.parseBoolean(reuseAddressStr));
9999
}
100100
// Force usage of PooledMemoryManager which allows to use grizzly's buffers across threads.
101-
//builder.setMemoryManager(new PooledMemoryManager(true));
101+
builder.setMemoryManager(new PooledMemoryManager(true));
102102

103103
final TCPNIOTransport transport = builder.build();
104104

opendj-ldap-toolkit/src/test/java/com/forgerock/opendj/ldap/tools/AuthRateITCase.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ public Object[][] authRateArgs() throws Exception {
5050
args("-h", TestCaseUtils.getServerSocketAddress().getHostName(),
5151
"-p", Integer.toString(TestCaseUtils.getServerSocketAddress().getPort()),
5252
"-g", "rand(0,1000)", "-D", "uid=%d,ou=people,o=test", "-w", "password",
53-
"-i", "1", "-c", "1", "-m", "10", "-f", "-S", "-B", "0"),
53+
"-i", "1", "-c", "1", "-m", "1000", "-f", "-S", "-B", "0"),
5454
THROUGHPUT_TEXT, "" },
5555
};
5656
}
@@ -74,7 +74,7 @@ public void testITAuthRate(String[] arguments, Object expectedOut, Object expect
7474
//Skip header line
7575
for (int i = 1; i < authRateResLines.length; i++) {
7676
String[] authRateLineData = authRateResLines[i].split(",");
77-
assertThat(authRateLineData[authRateLineData.length - 1].trim()).isEqualTo("0.0");
77+
assertThat(authRateLineData[authRateLineData.length - 1].trim()).as(outContent).isEqualTo("0.0");
7878
}
7979
}
8080
}

0 commit comments

Comments
 (0)