diff options
Diffstat (limited to 'libjava/classpath/java/math/BigInteger.java')
| -rw-r--r-- | libjava/classpath/java/math/BigInteger.java | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/libjava/classpath/java/math/BigInteger.java b/libjava/classpath/java/math/BigInteger.java index 5a336b87248..86d6924af02 100644 --- a/libjava/classpath/java/math/BigInteger.java +++ b/libjava/classpath/java/math/BigInteger.java @@ -356,9 +356,9 @@ public class BigInteger extends Number implements Comparable public int signum() { - int top = words == null ? ival : words[ival-1]; - if (top == 0 && words == null) + if (ival == 0 && words == null) return 0; + int top = words == null ? ival : words[ival-1]; return top < 0 ? -1 : 1; } @@ -2227,17 +2227,25 @@ public class BigInteger extends Number implements Comparable throws IOException, ClassNotFoundException { s.defaultReadObject(); - words = byteArrayToIntArray(magnitude, signum < 0 ? -1 : 0); - BigInteger result = make(words, words.length); - this.ival = result.ival; - this.words = result.words; + if (magnitude.length == 0 || signum == 0) + { + this.ival = 0; + this.words = null; + } + else + { + words = byteArrayToIntArray(magnitude, signum < 0 ? -1 : 0); + BigInteger result = make(words, words.length); + this.ival = result.ival; + this.words = result.words; + } } private void writeObject(ObjectOutputStream s) throws IOException, ClassNotFoundException { signum = signum(); - magnitude = toByteArray(); + magnitude = signum == 0 ? new byte[0] : toByteArray(); s.defaultWriteObject(); } } |
