提交 3a9753ed 编写于 作者: A andrew

Merge

...@@ -985,3 +985,6 @@ d10b8de706c1ea867abc5518dbb1cf92f6965f6a jdk8u202-ga ...@@ -985,3 +985,6 @@ d10b8de706c1ea867abc5518dbb1cf92f6965f6a jdk8u202-ga
fcf246aa327f6384be94464b2c8aa0ef03af473d jdk8u222-b00 fcf246aa327f6384be94464b2c8aa0ef03af473d jdk8u222-b00
fcf246aa327f6384be94464b2c8aa0ef03af473d jdk8u212-b01 fcf246aa327f6384be94464b2c8aa0ef03af473d jdk8u212-b01
acab6dbdd0b55e524d50e9b1c4f12c90e2f424c5 jdk8u212-b02 acab6dbdd0b55e524d50e9b1c4f12c90e2f424c5 jdk8u212-b02
ac2ef877d3e8062c1ce72757538daae6cad1118f jdk8u212-b03
01535393e060f2908b8733f2493344b636d1c515 jdk8u212-b04
ac2ef877d3e8062c1ce72757538daae6cad1118f jdk8u212-ga
/* /*
* Copyright (c) 1996, 2018, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1996, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -3060,9 +3060,32 @@ public class BigDecimal extends Number implements Comparable<BigDecimal> { ...@@ -3060,9 +3060,32 @@ public class BigDecimal extends Number implements Comparable<BigDecimal> {
* @return this {@code BigDecimal} converted to a {@code long}. * @return this {@code BigDecimal} converted to a {@code long}.
*/ */
public long longValue(){ public long longValue(){
return (intCompact != INFLATED && scale == 0) ? if (intCompact != INFLATED && scale == 0) {
intCompact: return intCompact;
toBigInteger().longValue(); } else {
// Fastpath zero and small values
if (this.signum() == 0 || fractionOnly() ||
// Fastpath very large-scale values that will result
// in a truncated value of zero. If the scale is -64
// or less, there are at least 64 powers of 10 in the
// value of the numerical result. Since 10 = 2*5, in
// that case there would also be 64 powers of 2 in the
// result, meaning all 64 bits of a long will be zero.
scale <= -64) {
return 0;
} else {
return toBigInteger().longValue();
}
}
}
/**
* Return true if a nonzero BigDecimal has an absolute value less
* than one; i.e. only has fraction digits.
*/
private boolean fractionOnly() {
assert this.signum() != 0;
return (this.precision() - this.scale) <= 0;
} }
/** /**
...@@ -3080,15 +3103,20 @@ public class BigDecimal extends Number implements Comparable<BigDecimal> { ...@@ -3080,15 +3103,20 @@ public class BigDecimal extends Number implements Comparable<BigDecimal> {
public long longValueExact() { public long longValueExact() {
if (intCompact != INFLATED && scale == 0) if (intCompact != INFLATED && scale == 0)
return intCompact; return intCompact;
// If more than 19 digits in integer part it cannot possibly fit
if ((precision() - scale) > 19) // [OK for negative scale too] // Fastpath zero
throw new java.lang.ArithmeticException("Overflow");
// Fastpath zero and < 1.0 numbers (the latter can be very slow
// to round if very small)
if (this.signum() == 0) if (this.signum() == 0)
return 0; return 0;
if ((this.precision() - this.scale) <= 0)
// Fastpath numbers less than 1.0 (the latter can be very slow
// to round if very small)
if (fractionOnly())
throw new ArithmeticException("Rounding necessary"); throw new ArithmeticException("Rounding necessary");
// If more than 19 digits in integer part it cannot possibly fit
if ((precision() - scale) > 19) // [OK for negative scale too]
throw new java.lang.ArithmeticException("Overflow");
// round to an integer, with Exception if decimal part non-0 // round to an integer, with Exception if decimal part non-0
BigDecimal num = this.setScale(0, ROUND_UNNECESSARY); BigDecimal num = this.setScale(0, ROUND_UNNECESSARY);
if (num.precision() >= 19) // need to check carefully if (num.precision() >= 19) // need to check carefully
...@@ -3130,7 +3158,7 @@ public class BigDecimal extends Number implements Comparable<BigDecimal> { ...@@ -3130,7 +3158,7 @@ public class BigDecimal extends Number implements Comparable<BigDecimal> {
public int intValue() { public int intValue() {
return (intCompact != INFLATED && scale == 0) ? return (intCompact != INFLATED && scale == 0) ?
(int)intCompact : (int)intCompact :
toBigInteger().intValue(); (int)longValue();
} }
/** /**
......
/* /*
* Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -58,8 +58,24 @@ public final class RegistryImpl_Skel ...@@ -58,8 +58,24 @@ public final class RegistryImpl_Skel
public void dispatch(java.rmi.Remote obj, java.rmi.server.RemoteCall call, int opnum, long hash) public void dispatch(java.rmi.Remote obj, java.rmi.server.RemoteCall call, int opnum, long hash)
throws java.lang.Exception { throws java.lang.Exception {
if (hash != interfaceHash) if (opnum < 0) {
throw new java.rmi.server.SkeletonMismatchException("interface hash mismatch"); if (hash == 7583982177005850366L) {
opnum = 0;
} else if (hash == 2571371476350237748L) {
opnum = 1;
} else if (hash == -7538657168040752697L) {
opnum = 2;
} else if (hash == -8381844669958460146L) {
opnum = 3;
} else if (hash == 7305022919901907578L) {
opnum = 4;
} else {
throw new java.rmi.UnmarshalException("invalid method hash");
}
} else {
if (hash != interfaceHash)
throw new java.rmi.server.SkeletonMismatchException("interface hash mismatch");
}
sun.rmi.registry.RegistryImpl server = (sun.rmi.registry.RegistryImpl) obj; sun.rmi.registry.RegistryImpl server = (sun.rmi.registry.RegistryImpl) obj;
switch (opnum) { switch (opnum) {
......
/* /*
* Copyright (c) 1996, 2016, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1996, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -40,6 +40,7 @@ import java.rmi.ServerError; ...@@ -40,6 +40,7 @@ import java.rmi.ServerError;
import java.rmi.ServerException; import java.rmi.ServerException;
import java.rmi.UnmarshalException; import java.rmi.UnmarshalException;
import java.rmi.server.ExportException; import java.rmi.server.ExportException;
import java.rmi.server.Operation;
import java.rmi.server.RemoteCall; import java.rmi.server.RemoteCall;
import java.rmi.server.RemoteRef; import java.rmi.server.RemoteRef;
import java.rmi.server.RemoteStub; import java.rmi.server.RemoteStub;
...@@ -295,15 +296,14 @@ public class UnicastServerRef extends UnicastRef ...@@ -295,15 +296,14 @@ public class UnicastServerRef extends UnicastRef
throw new UnmarshalException("error unmarshalling call header", throw new UnmarshalException("error unmarshalling call header",
readEx); readEx);
} }
if (num >= 0) { if (skel != null) {
if (skel != null) { // If there is a skeleton, use it
oldDispatch(obj, call, num); oldDispatch(obj, call, num);
return; return;
} else {
throw new UnmarshalException( } else if (num >= 0){
"skeleton class not found but required " + throw new UnmarshalException(
"for client version"); "skeleton class not found but required for client version");
}
} }
try { try {
op = in.readLong(); op = in.readLong();
...@@ -429,8 +429,8 @@ public class UnicastServerRef extends UnicastRef ...@@ -429,8 +429,8 @@ public class UnicastServerRef extends UnicastRef
/** /**
* Handle server-side dispatch using the RMI 1.1 stub/skeleton * Handle server-side dispatch using the RMI 1.1 stub/skeleton
* protocol, given a non-negative operation number that has * protocol, given a non-negative operation number or negative method hash
* already been read from the call stream. * that has already been read from the call stream.
* Exceptions are handled by the caller to be sent to the remote client. * Exceptions are handled by the caller to be sent to the remote client.
* *
* @param obj the target remote object for the call * @param obj the target remote object for the call
...@@ -462,7 +462,8 @@ public class UnicastServerRef extends UnicastRef ...@@ -462,7 +462,8 @@ public class UnicastServerRef extends UnicastRef
} }
// if calls are being logged, write out object id and operation // if calls are being logged, write out object id and operation
logCall(obj, skel.getOperations()[op]); Operation[] operations = skel.getOperations();
logCall(obj, op >= 0 && op < operations.length ? operations[op] : "op: " + op);
unmarshalCustomCallData(in); unmarshalCustomCallData(in);
// dispatch to skeleton for remote object // dispatch to skeleton for remote object
skel.dispatch(obj, call, op, hash); skel.dispatch(obj, call, op, hash);
......
...@@ -67,7 +67,10 @@ void ContextualSubstitutionBase::applySubstitutionLookups( ...@@ -67,7 +67,10 @@ void ContextualSubstitutionBase::applySubstitutionLookups(
le_uint16 lookupListIndex = SWAPW(substLookupRecordArrayPtr[subst].lookupListIndex); le_uint16 lookupListIndex = SWAPW(substLookupRecordArrayPtr[subst].lookupListIndex);
tempIterator.setCurrStreamPosition(position); tempIterator.setCurrStreamPosition(position);
tempIterator.next(sequenceIndex); if (!tempIterator.next(sequenceIndex)) {
success = LE_INTERNAL_ERROR;
return;
}
lookupProcessor->applySingleLookup(lookupListIndex, &tempIterator, fontInstance, success); lookupProcessor->applySingleLookup(lookupListIndex, &tempIterator, fontInstance, success);
} }
......
...@@ -224,6 +224,16 @@ void GlyphIterator::getCursiveExitPoint(LEPoint &exitPoint) const ...@@ -224,6 +224,16 @@ void GlyphIterator::getCursiveExitPoint(LEPoint &exitPoint) const
void GlyphIterator::setCurrGlyphID(TTGlyphID glyphID) void GlyphIterator::setCurrGlyphID(TTGlyphID glyphID)
{ {
if (direction < 0) {
if (position <= nextLimit || position >= prevLimit) {
return;
}
} else {
if (position <= prevLimit || position >= nextLimit) {
return;
}
}
LEGlyphID glyph = glyphStorage[position]; LEGlyphID glyph = glyphStorage[position];
glyphStorage[position] = LE_SET_GLYPH(glyph, glyphID); glyphStorage[position] = LE_SET_GLYPH(glyph, glyphID);
......
...@@ -67,7 +67,10 @@ void SubstitutionLookup::applySubstitutionLookups( ...@@ -67,7 +67,10 @@ void SubstitutionLookup::applySubstitutionLookups(
le_uint16 lookupListIndex = SWAPW(substLookupRecordArray[subst].lookupListIndex); le_uint16 lookupListIndex = SWAPW(substLookupRecordArray[subst].lookupListIndex);
tempIterator.setCurrStreamPosition(position); tempIterator.setCurrStreamPosition(position);
tempIterator.next(sequenceIndex); if (!tempIterator.next(sequenceIndex)) {
success = LE_INTERNAL_ERROR;
return;
}
lookupProcessor->applySingleLookup(lookupListIndex, &tempIterator, fontInstance, success); lookupProcessor->applySingleLookup(lookupListIndex, &tempIterator, fontInstance, success);
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册