Page 1 of 1

SSLEngine.unwrap kann den Quell-Bytepuffer verändern

Posted: 05 Jan 2025, 17:04
by Guest
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:

Code: Select all

//read some bytes in netBufferIn...then:
netBufferIn.flip();
SSLEngineResult result = sslEngine.unwrap(netBufferIn, appBufferIn);
netBufferIn.compact();
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

Code: Select all

//read some bytes in netBufferIn...then:
netBufferIn.flip();
ByteBuffer roBB = netBufferIn.asReadOnlyBuffer(); //