Вызов SSLEngine.unwrap(srcBB, dstBB) может неожиданно изменить исходный ByteBuffer (scrBB).
Поскольку я исследовал использованные исходные байты, я полагаюсь на srcBB продвигать свою позицию. Обычно это работает, но в какой-то момент srcBB.array() используется глубоко внутри движка, во время некоторой работы шифрования SSL. Некоторые байты изменяются в общем байте[].
Обычно мне нужно только это:
//read some bytes in netBufferIn...then:
netBufferIn.flip();
SSLEngineResult result = sslEngine.unwrap(netBufferIn, appBufferIn);
netBufferIn.compact();
Исходный код jdk показывает, что он будет использовать для себя любой исходный буфер, не предназначенный только для чтения, и я видел, как это произошло. Это очень неправильно. Поэтому я передаю буфер, доступный только для чтения, но пользовательскому интерфейсу приходится вручную перемещать мою исходную позицию в буфере, вынуждая доверять результату.bytesConsumed():
//read some bytes in netBufferIn...then:
netBufferIn.flip();
ByteBuffer roBB = netBufferIn.asReadOnlyBuffer(); //
Подробнее здесь: https://stackoverflow.com/questions/793 ... bytebuffer
SSLEngine.unwrap может изменять исходный байт-буфер. ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение