提交 3ea6816a 编写于 作者: S shshahma

8162419: closed/com/oracle/jfr/runtime/TestVMInfoEvent.sh failing after JDK-8155968

Summary: Under error conditions, always return -1 and perform null termination regardless of the behavior of underlying vsnprintf() implementation.
Reviewed-by: dholmes, cjplummer
上级 c0bf5dd8
/* /*
* Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1997, 2016, 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
...@@ -2868,7 +2868,18 @@ ATTRIBUTE_PRINTF(3, 0) ...@@ -2868,7 +2868,18 @@ ATTRIBUTE_PRINTF(3, 0)
int jio_vsnprintf(char *str, size_t count, const char *fmt, va_list args) { int jio_vsnprintf(char *str, size_t count, const char *fmt, va_list args) {
// see bug 4399518, 4417214 // see bug 4399518, 4417214
if ((intptr_t)count <= 0) return -1; if ((intptr_t)count <= 0) return -1;
return vsnprintf(str, count, fmt, args);
int result = vsnprintf(str, count, fmt, args);
// Note: on truncation vsnprintf(3) on Unix returns number of
// characters which would have been written had the buffer been large
// enough; on Windows, it returns -1. We handle both cases here and
// always return -1, and perform null termination.
if ((result > 0 && (size_t)result >= count) || result == -1) {
str[count - 1] = '\0';
result = -1;
}
return result;
} }
ATTRIBUTE_PRINTF(3, 0) ATTRIBUTE_PRINTF(3, 0)
......
...@@ -1881,8 +1881,6 @@ const char* Deoptimization::format_trap_state(char* buf, size_t buflen, ...@@ -1881,8 +1881,6 @@ const char* Deoptimization::format_trap_state(char* buf, size_t buflen,
trap_reason_name(reason), trap_reason_name(reason),
recomp_flag ? " recompiled" : ""); recomp_flag ? " recompiled" : "");
} }
if (len >= buflen)
buf[buflen-1] = '\0';
return buf; return buf;
} }
...@@ -1952,8 +1950,6 @@ const char* Deoptimization::format_trap_request(char* buf, size_t buflen, ...@@ -1952,8 +1950,6 @@ const char* Deoptimization::format_trap_request(char* buf, size_t buflen,
len = jio_snprintf(buf, buflen, "reason='%s' action='%s' index='%d'", len = jio_snprintf(buf, buflen, "reason='%s' action='%s' index='%d'",
reason, action, unloaded_class_index); reason, action, unloaded_class_index);
} }
if (len >= buflen)
buf[buflen-1] = '\0';
return buf; return buf;
} }
......
/* /*
* Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1997, 2016, 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
...@@ -773,25 +773,36 @@ int JDK_Version::compare(const JDK_Version& other) const { ...@@ -773,25 +773,36 @@ int JDK_Version::compare(const JDK_Version& other) const {
} }
void JDK_Version::to_string(char* buffer, size_t buflen) const { void JDK_Version::to_string(char* buffer, size_t buflen) const {
assert(buffer && buflen > 0, "call with useful buffer");
size_t index = 0; size_t index = 0;
if (!is_valid()) { if (!is_valid()) {
jio_snprintf(buffer, buflen, "%s", "(uninitialized)"); jio_snprintf(buffer, buflen, "%s", "(uninitialized)");
} else if (is_partially_initialized()) { } else if (is_partially_initialized()) {
jio_snprintf(buffer, buflen, "%s", "(uninitialized) pre-1.6.0"); jio_snprintf(buffer, buflen, "%s", "(uninitialized) pre-1.6.0");
} else { } else {
index += jio_snprintf( int rc = jio_snprintf(
&buffer[index], buflen - index, "%d.%d", _major, _minor); &buffer[index], buflen - index, "%d.%d", _major, _minor);
if (rc == -1) return;
index += rc;
if (_micro > 0) { if (_micro > 0) {
index += jio_snprintf(&buffer[index], buflen - index, ".%d", _micro); rc = jio_snprintf(&buffer[index], buflen - index, ".%d", _micro);
if (rc == -1) return;
index += rc;
} }
if (_update > 0) { if (_update > 0) {
index += jio_snprintf(&buffer[index], buflen - index, "_%02d", _update); rc = jio_snprintf(&buffer[index], buflen - index, "_%02d", _update);
if (rc == -1) return;
index += rc;
} }
if (_special > 0) { if (_special > 0) {
index += jio_snprintf(&buffer[index], buflen - index, "%c", _special); rc = jio_snprintf(&buffer[index], buflen - index, "%c", _special);
if (rc == -1) return;
index += rc;
} }
if (_build > 0) { if (_build > 0) {
index += jio_snprintf(&buffer[index], buflen - index, "-b%02d", _build); rc = jio_snprintf(&buffer[index], buflen - index, "-b%02d", _build);
if (rc == -1) return;
index += rc;
} }
} }
} }
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册