Skip to content

Commit b82135a

Browse files
committed
Close all streams for TOFU known hosts file
1 parent 7256ed3 commit b82135a

File tree

2 files changed

+30
-28
lines changed

2 files changed

+30
-28
lines changed

driver/src/main/java/org/neo4j/driver/internal/security/TrustOnFirstUseTrustManager.java

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -82,22 +82,23 @@ private void load() throws IOException
8282

8383
assertKnownHostFileReadable();
8484

85-
BufferedReader reader = new BufferedReader( new FileReader( knownHosts ) );
86-
String line;
87-
while ( (line = reader.readLine()) != null )
85+
try ( BufferedReader reader = new BufferedReader( new FileReader( knownHosts ) ) )
8886
{
89-
if ( (!line.trim().startsWith( "#" )) )
87+
String line;
88+
while ( (line = reader.readLine()) != null )
9089
{
91-
String[] strings = line.split( " " );
92-
if ( strings[0].trim().equals( serverId ) )
90+
if ( (!line.trim().startsWith( "#" )) )
9391
{
94-
// load the certificate
95-
fingerprint = strings[1].trim();
96-
return;
92+
String[] strings = line.split( " " );
93+
if ( strings[0].trim().equals( serverId ) )
94+
{
95+
// load the certificate
96+
fingerprint = strings[1].trim();
97+
return;
98+
}
9799
}
98100
}
99101
}
100-
reader.close();
101102
}
102103

103104
/**
@@ -113,10 +114,11 @@ private void saveTrustedHost( String fingerprint ) throws IOException
113114
createKnownCertFileIfNotExists();
114115

115116
assertKnownHostFileWritable();
116-
BufferedWriter writer = new BufferedWriter( new FileWriter( knownHosts, true ) );
117-
writer.write( serverId + " " + this.fingerprint );
118-
writer.newLine();
119-
writer.close();
117+
try ( BufferedWriter writer = new BufferedWriter( new FileWriter( knownHosts, true ) ) )
118+
{
119+
writer.write( serverId + " " + this.fingerprint );
120+
writer.newLine();
121+
}
120122
}
121123

122124

driver/src/test/java/org/neo4j/driver/internal/security/TrustOnFirstUseTrustManagerTest.java

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -68,10 +68,11 @@ void setUp() throws Throwable
6868
knownCertificate = mock( X509Certificate.class );
6969
when( knownCertificate.getEncoded() ).thenReturn( "certificate".getBytes( UTF_8 ) );
7070

71-
PrintWriter writer = new PrintWriter( knownCertsFile );
72-
writer.println( " # I am a comment." );
73-
writer.println( knownServer + " " + fingerprint( knownCertificate ) );
74-
writer.close();
71+
try ( PrintWriter writer = new PrintWriter( knownCertsFile ) )
72+
{
73+
writer.println( " # I am a comment." );
74+
writer.println( knownServer + " " + fingerprint( knownCertificate ) );
75+
}
7576
}
7677

7778
@AfterEach
@@ -86,8 +87,7 @@ void shouldLoadExistingCert() throws Throwable
8687
// Given
8788
BoltServerAddress knownServerAddress = new BoltServerAddress( knownServerIp, knownServerPort );
8889
Logger logger = mock(Logger.class);
89-
TrustOnFirstUseTrustManager manager =
90-
new TrustOnFirstUseTrustManager( knownServerAddress, knownCertsFile, logger );
90+
TrustOnFirstUseTrustManager manager = new TrustOnFirstUseTrustManager( knownServerAddress, knownCertsFile, logger );
9191

9292
X509Certificate wrongCertificate = mock( X509Certificate.class );
9393
when( wrongCertificate.getEncoded() ).thenReturn( "fake certificate".getBytes() );
@@ -116,14 +116,14 @@ void shouldSaveNewCert() throws Throwable
116116
verify( logger ).info( "Adding %s as known and trusted certificate for %s.", fingerprint, "1.2.3.4:200" );
117117

118118
// And the file should contain the right info
119-
Scanner reader = new Scanner( knownCertsFile );
120-
121-
String line;
122-
line = nextLine( reader );
123-
assertEquals( knownServer + " " + fingerprint, line );
124-
assertTrue( reader.hasNextLine() );
125-
line = nextLine( reader );
126-
assertEquals( knownServerIp + ":" + newPort + " " + fingerprint, line );
119+
try ( Scanner reader = new Scanner( knownCertsFile ) )
120+
{
121+
String line1 = nextLine( reader );
122+
assertEquals( knownServer + " " + fingerprint, line1 );
123+
assertTrue( reader.hasNextLine() );
124+
String line2 = nextLine( reader );
125+
assertEquals( knownServerIp + ":" + newPort + " " + fingerprint, line2 );
126+
}
127127
}
128128

129129
private String nextLine( Scanner reader )

0 commit comments

Comments
 (0)