SSLEngine.unwrap kann den Quell-Bytepuffer verändern
Posted: 05 Jan 2025, 17:04
Der Aufruf von SSLEngine.unwrap(srcBB, dstBB) kann den Quell-ByteBuffer (scrBB) unerwartet ändern.
Bei der Untersuchung der verbrauchten Quellbytes verlasse ich mich auf srcBB um seine Position voranzutreiben. Im Allgemeinen funktioniert es, aber irgendwann wird srcBB.array() tief in der Engine während einiger SSL-Verschlüsselungsarbeiten verwendet. Einige Bytes werden im Shared Byte[] geändert.
Normalerweise sollte ich nur Folgendes benötigen:
Der JDK-Quellcode zeigt, dass er jeden nicht schreibgeschützten Quellpuffer für sich selbst verwendet, und ich habe gesehen, dass dies passiert ist. Das ist sehr falsch. Ich übergebe also einen schreibgeschützten Puffer, aber die Benutzeroberfläche muss meine ursprüngliche Pufferposition manuell verschieben und ist gezwungen, result.bytesConsumed():
zu vertrauen
Bei der Untersuchung der verbrauchten Quellbytes verlasse ich mich auf srcBB um seine Position voranzutreiben. Im Allgemeinen funktioniert es, aber irgendwann wird srcBB.array() tief in der Engine während einiger SSL-Verschlüsselungsarbeiten verwendet. Einige Bytes werden im Shared Byte[] geändert.
Normalerweise sollte ich nur Folgendes benötigen:
Code: Select all
//read some bytes in netBufferIn...then:
netBufferIn.flip();
SSLEngineResult result = sslEngine.unwrap(netBufferIn, appBufferIn);
netBufferIn.compact();
zu vertrauen
Code: Select all
//read some bytes in netBufferIn...then:
netBufferIn.flip();
ByteBuffer roBB = netBufferIn.asReadOnlyBuffer(); //