使用URLConnection时java.lang.NegativeArraySizeException

时间:2017-01-27 12:17:35

标签: java openjdk sigsegv urlconnection fedora-25

我正在尝试创建一个Telegram机器人,我的代码已经可以工作,但突然间我无法启动我的程序,因为它崩溃时出现以下错误。我没有更改任何代码或做任何事情。

也许这是操作系统的错误?

Exception in thread "main" javax.net.ssl.SSLException: java.security.ProviderException: java.lang.NegativeArraySizeException
    at sun.security.ssl.Alerts.getSSLException(Alerts.java:208)
    at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1949)
    at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1906)
    at sun.security.ssl.SSLSocketImpl.handleException(SSLSocketImpl.java:1889)
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1410)
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1387)
    at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:559)
    at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:153)
    at test.main(test.java:10)
Caused by: java.security.ProviderException: java.lang.NegativeArraySizeException
    at sun.security.ec.ECKeyPairGenerator.generateKeyPair(ECKeyPairGenerator.java:147)
    at java.security.KeyPairGenerator$Delegate.generateKeyPair(KeyPairGenerator.java:703)
    at sun.security.ssl.ECDHCrypt.<init>(ECDHCrypt.java:77)
    at sun.security.ssl.ClientHandshaker.serverKeyExchange(ClientHandshaker.java:721)
    at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:281)
    at sun.security.ssl.Handshaker.processLoop(Handshaker.java:979)
    at sun.security.ssl.Handshaker.process_record(Handshaker.java:914)
    at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1062)
    at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1375)
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1403)
    ... 5 more
Caused by: java.lang.NegativeArraySizeException
    at sun.security.ec.ECKeyPairGenerator.generateECKeyPair(Native Method)
    at sun.security.ec.ECKeyPairGenerator.generateKeyPair(ECKeyPairGenerator.java:128)
    ... 14 more

有时代码会导致分段错误:

#
# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x00007f2b1fb65711, pid=3982, tid=0x00007f2b2081f700
#
# JRE version: OpenJDK Runtime Environment (8.0_111-b16) (build 1.8.0_111-b16)
# Java VM: OpenJDK 64-Bit Server VM (25.111-b16 mixed mode linux-amd64 compressed oops)
# Problematic frame:
# C  [libc.so.6+0x14f711]  __memmove_avx_unaligned_erms+0x211
#
# Failed to write core dump. Core dumps have been disabled. To enable core   dumping, try "ulimit -c unlimited" before starting Java again
#
# An error report file with more information is saved as:
# /tmp/hs_err_pid3982.log
#
# If you would like to submit a bug report, please visit:
#   http://bugreport.java.com/bugreport/crash.jsp
#
Aborted (luotiin core-tiedosto)

重现错误的最小代码:

import java.net.URL;
import java.net.URLConnection;
import java.io.IOException;
import java.net.MalformedURLException;

class test {
    public static void main(String[] args) throws IOException, MalformedURLException {
        URL url = new URL("https://api.telegram.org/bot<ID>/getUpdates?offset=0");
        URLConnection c = url.openConnection();
        c.connect();
    }
}

我在Fedora 25和OpenJDK上运行代码。

$ uname -a
Linux localhost.localdomain 4.9.5-200.fc25.x86_64 #1 SMP Fri Jan 20 12:24:16 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
$ java -version
openjdk version "1.8.0_111"
OpenJDK Runtime Environment (build 1.8.0_111-b16)
OpenJDK 64-Bit Server VM (build 25.111-b16, mixed mode)

1 个答案:

答案 0 :(得分:4)

检查你的NSS库版本,nss 3.28似乎打破了java的东西。它也发生在gentoo上:https://bugs.gentoo.org/show_bug.cgi?id=605430

降级到nss 3.27.x也为我和其他人修好了。