< prev index next >
src/share/classes/com/sun/crypto/provider/ISO10126Padding.java
Print this page
rev 12526 : 8171252: Improve exception checking
8158517: Minor optimizations to ISO10126PADDING
Reviewed-by: ascarpino, mschoene
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
@@ -61,19 +61,20 @@
throws ShortBufferException
{
if (in == null)
return;
- if ((off + len) > in.length) {
+ int idx = Math.addExact(off, len);
+ if (idx > in.length) {
throw new ShortBufferException("Buffer too small to hold padding");
}
byte paddingOctet = (byte) (len & 0xff);
- byte[] padding = new byte[len];
+ byte[] padding = new byte[len - 1];
SunJCE.getRandom().nextBytes(padding);
- padding[len-1] = paddingOctet;
- System.arraycopy(padding, 0, in, off, len);
+ System.arraycopy(padding, 0, in, off, len - 1);
+ in[idx - 1] = paddingOctet;
return;
}
/**
* Returns the index where the padding starts.
@@ -92,18 +93,19 @@
if ((in == null) ||
(len == 0)) { // this can happen if input is really a padded buffer
return 0;
}
- byte lastByte = in[off + len - 1];
+ int idx = Math.addExact(off, len);
+ byte lastByte = in[idx - 1];
int padValue = (int)lastByte & 0x0ff;
if ((padValue < 0x01)
|| (padValue > blockSize)) {
return -1;
}
- int start = off + len - ((int)lastByte & 0x0ff);
+ int start = idx - padValue;
if (start < off) {
return -1;
}
return start;
< prev index next >