No need to check for short strings in tooLongMsg. Getting the actual length calculation 100% is not very important, but THIS IS JAVA so here's an attempt that looks correct even for maximal length input (untested - you could check that the exception detail gets the 3x expansion right):
private static String tooLongMsg(String s, int bits32) { int slen = s.length(); String head = s.substring(0, 8); String tail = s.substring(slen - 8, slen); // handle int overflow with max 3x expansion long actualLength = (long)slen + Integer.toUnsignedLong(bits32 - slen); return "encoded string (" + head + "..." + tail + ") too long: " + actualLength + " bytes"; } Otherwise looks good to me. On Fri, Mar 22, 2019 at 1:46 PM Brian Burkhalter < brian.burkhal...@oracle.com> wrote: > > On Mar 18, 2019, at 1:03 PM, Martin Buchholz <marti...@google.com> wrote: > > Below is another attempt at micro-optimization (might be too tricky!), BUT: > > > I like this version better and have updated the CR accordingly: > > http://cr.openjdk.java.net/~bpb/8219196/webrev.02/ > > I refrained from doing a global replace of <code></code> => {@code } and > @exception => @throws although it was tempting. > > - consider documenting the UTFDataFormatException and the 64k length limit > > > Done; will require a CSR. > > - error message would actually be more useful if it contained a few chars > from head and tail instead of length > > > Done. I also changed the calculation of the length to use > Integer.toUnsignedLong(). > > On Mar 18, 2019, at 11:35 AM, Roger Riggs <roger.ri...@oracle.com> wrote: > > The test only needs enough memory to create the input string (MAXINT/3+1) > and a bit more for the default sized ByteArrayOutputStream. > So it should run in 2G configurations. > > > Fixed. > > Thanks, > > Brian >