@@ -129,9 +129,7 @@ private void resizeImpl(int newCapacity) {
129129 * <p>Typically used for security reasons, with buffers that contains now-unused plaintext.
130130 */
131131 public void zeroRemaining () {
132- ((Buffer ) buffer ).mark ();
133- buffer .put (zeros , 0 , buffer .remaining ());
134- ((Buffer ) buffer ).reset ();
132+ zero (buffer .position ());
135133 }
136134
137135 /**
@@ -140,9 +138,20 @@ public void zeroRemaining() {
140138 * <p>Typically used for security reasons, with buffers that contains now-unused plaintext.
141139 */
142140 public void zero () {
141+ zero (0 );
142+ }
143+
144+ private void zero (final int position ) {
143145 ((Buffer ) buffer ).mark ();
144- ((Buffer ) buffer ).position (0 );
145- buffer .put (zeros , 0 , buffer .remaining ());
146+ ((Buffer ) buffer ).position (position );
147+ int size = buffer .remaining ();
148+ int length = Math .min (size , zeros .length );
149+ int offset = 0 ;
150+ while (length > 0 ) {
151+ buffer .put (zeros , 0 , length );
152+ offset = offset + length ;
153+ length = Math .min (size - offset , zeros .length );
154+ }
146155 ((Buffer ) buffer ).reset ();
147156 }
148157
0 commit comments