Revert^4 "Use cpplint.py from repohooks"
This reverts commit dc26639f11ef2a97bc9aa9d9f4a8b8cbf9791481.
Reason for revert: repohooks now in sync across branches
(thanks to tavila@).
Bug: 200914293
Test: Treehugger
Test: m cpplint-art
Change-Id: I55cf52db799e7d99dde488ff0bfbc7b3dc158a59
diff --git a/build/Android.cpplint.mk b/build/Android.cpplint.mk
index ce68214..ab70e97 100644
--- a/build/Android.cpplint.mk
+++ b/build/Android.cpplint.mk
@@ -20,7 +20,7 @@
LOCAL_PATH := $(art_path)
# Use upstream cpplint (toolpath from .repo/manifests/GLOBAL-PREUPLOAD.cfg).
-ART_CPPLINT := external/google-styleguide/cpplint/cpplint.py
+ART_CPPLINT := tools/repohooks/tools/cpplint.py
# This file previously configured many cpplint settings.
# Everything that could be moved to CPPLINT.cfg has moved there.
diff --git a/dex2oat/common_compiler_driver_test.cc b/dex2oat/common_compiler_driver_test.cc
index 2007c5a..7e71976 100644
--- a/dex2oat/common_compiler_driver_test.cc
+++ b/dex2oat/common_compiler_driver_test.cc
@@ -67,7 +67,7 @@
MemMap::Init();
image_reservation_ = MemMap::MapAnonymous("image reservation",
reinterpret_cast<uint8_t*>(ART_BASE_ADDRESS),
- (size_t)120 * 1024 * 1024, // 120MB
+ static_cast<size_t>(120 * 1024 * 1024), // 120MB
PROT_NONE,
false /* no need for 4gb flag with fixed mmap */,
/*reuse=*/ false,
diff --git a/dexdump/dexdump.cc b/dexdump/dexdump.cc
index 1d1eab8..d10ed26 100644
--- a/dexdump/dexdump.cc
+++ b/dexdump/dexdump.cc
@@ -1367,7 +1367,7 @@
}
}
- bail:
+bail:
free(typeDescriptor);
free(accessStr);
}
diff --git a/dexlayout/dexlayout.cc b/dexlayout/dexlayout.cc
index 75afc78..86973f6 100644
--- a/dexlayout/dexlayout.cc
+++ b/dexlayout/dexlayout.cc
@@ -1272,7 +1272,7 @@
}
}
- bail:
+bail:
free(type_descriptor);
free(access_str);
}
diff --git a/runtime/native/jdk_internal_misc_Unsafe.cc b/runtime/native/jdk_internal_misc_Unsafe.cc
index 61154d0..6acf4a5 100644
--- a/runtime/native/jdk_internal_misc_Unsafe.cc
+++ b/runtime/native/jdk_internal_misc_Unsafe.cc
@@ -38,6 +38,30 @@
namespace art {
+namespace {
+ // Checks a JNI argument `size` fits inside a size_t and throws a RuntimeException if not (see
+ // jdk/internal/misc/Unsafe.java comments).
+ bool ValidJniSizeArgument(jlong size) REQUIRES_SHARED(Locks::mutator_lock_) {
+ const jlong maybe_truncated_size = static_cast<jlong>(static_cast<size_t>(size));
+ if (LIKELY(size >= 0 && size == maybe_truncated_size)) {
+ return true;
+ }
+ ThrowRuntimeException("Bad size: %" PRIu64, size);
+ return false;
+ }
+
+ // Checks a JNI argument `offset` fits inside a size_t and is less than the size. This method
+ // and throws a RuntimeException if not (see jdk/internal/misc/Unsafe.java comments).
+ bool ValidJniOffsetArgument(jlong offset, jlong size) REQUIRES_SHARED(Locks::mutator_lock_) {
+ const jlong maybe_truncated_offset = static_cast<jlong>(static_cast<size_t>(offset));
+ if (LIKELY(offset >= 0 && offset < size && offset == maybe_truncated_offset)) {
+ return true;
+ }
+ ThrowRuntimeException("Bad offset %" PRIu64 " size %" PRIu64, offset, size);
+ return false;
+ }
+} // namespace
+
static jboolean Unsafe_compareAndSetInt(JNIEnv* env, jobject, jobject javaObj, jlong offset,
jint expectedValue, jint newValue) {
ScopedFastNativeObjectAccess soa(env);
@@ -253,17 +277,21 @@
static jlong Unsafe_allocateMemory(JNIEnv* env, jobject, jlong bytes) {
ScopedFastNativeObjectAccess soa(env);
- // bytes is nonnegative and fits into size_t
- if (bytes < 0 || bytes != (jlong)(size_t) bytes) {
- ThrowIllegalAccessException("wrong number of bytes");
+ if (bytes == 0) {
return 0;
}
- void* mem = malloc(bytes);
+ // bytes is nonnegative and fits into size_t
+ if (!ValidJniSizeArgument(bytes)) {
+ DCHECK(soa.Self()->IsExceptionPending());
+ return 0;
+ }
+ const size_t malloc_bytes = static_cast<size_t>(bytes);
+ void* mem = malloc(malloc_bytes);
if (mem == nullptr) {
soa.Self()->ThrowOutOfMemoryError("native alloc");
return 0;
}
- return (uintptr_t) mem;
+ return reinterpret_cast<uintptr_t>(mem);
}
static void Unsafe_freeMemory(JNIEnv* env ATTRIBUTE_UNUSED, jobject, jlong address) {
@@ -331,16 +359,17 @@
static void Unsafe_copyMemory(JNIEnv *env, jobject unsafe ATTRIBUTE_UNUSED, jlong src,
jlong dst, jlong size) {
+ ScopedFastNativeObjectAccess soa(env);
if (size == 0) {
return;
}
// size is nonnegative and fits into size_t
- if (size < 0 || size != (jlong)(size_t) size) {
- ScopedFastNativeObjectAccess soa(env);
- ThrowIllegalAccessException("wrong number of bytes");
+ if (!ValidJniSizeArgument(size)) {
+ DCHECK(soa.Self()->IsExceptionPending());
+ return;
}
- size_t sz = (size_t)size;
- memcpy(reinterpret_cast<void *>(dst), reinterpret_cast<void *>(src), sz);
+ const size_t memcpy_size = static_cast<size_t>(size);
+ memcpy(reinterpret_cast<void *>(dst), reinterpret_cast<void *>(src), memcpy_size);
}
template<typename T>
@@ -382,27 +411,32 @@
return;
}
// size is nonnegative and fits into size_t
- if (size < 0 || size != (jlong)(size_t) size) {
- ThrowIllegalAccessException("wrong number of bytes");
+ if (!ValidJniSizeArgument(size)) {
+ DCHECK(soa.Self()->IsExceptionPending());
+ return;
}
- size_t sz = (size_t)size;
- size_t dst_offset = (size_t)dstOffset;
+ if (!ValidJniOffsetArgument(dstOffset, size)) {
+ DCHECK(soa.Self()->IsExceptionPending());
+ return;
+ }
+ const size_t copy_bytes = static_cast<size_t>(size);
+ const size_t dst_offset = static_cast<size_t>(dstOffset);
ObjPtr<mirror::Object> dst = soa.Decode<mirror::Object>(dstObj);
ObjPtr<mirror::Class> component_type = dst->GetClass()->GetComponentType();
if (component_type->IsPrimitiveByte() || component_type->IsPrimitiveBoolean()) {
// Note: Treating BooleanArray as ByteArray.
- copyToArray(srcAddr, ObjPtr<mirror::ByteArray>::DownCast(dst), dst_offset, sz);
+ copyToArray(srcAddr, ObjPtr<mirror::ByteArray>::DownCast(dst), dst_offset, copy_bytes);
} else if (component_type->IsPrimitiveShort() || component_type->IsPrimitiveChar()) {
// Note: Treating CharArray as ShortArray.
- copyToArray(srcAddr, ObjPtr<mirror::ShortArray>::DownCast(dst), dst_offset, sz);
+ copyToArray(srcAddr, ObjPtr<mirror::ShortArray>::DownCast(dst), dst_offset, copy_bytes);
} else if (component_type->IsPrimitiveInt() || component_type->IsPrimitiveFloat()) {
// Note: Treating FloatArray as IntArray.
- copyToArray(srcAddr, ObjPtr<mirror::IntArray>::DownCast(dst), dst_offset, sz);
+ copyToArray(srcAddr, ObjPtr<mirror::IntArray>::DownCast(dst), dst_offset, copy_bytes);
} else if (component_type->IsPrimitiveLong() || component_type->IsPrimitiveDouble()) {
// Note: Treating DoubleArray as LongArray.
- copyToArray(srcAddr, ObjPtr<mirror::LongArray>::DownCast(dst), dst_offset, sz);
+ copyToArray(srcAddr, ObjPtr<mirror::LongArray>::DownCast(dst), dst_offset, copy_bytes);
} else {
- ThrowIllegalAccessException("not a primitive array");
+ ThrowIllegalArgumentException("not a primitive array");
}
}
@@ -417,27 +451,32 @@
return;
}
// size is nonnegative and fits into size_t
- if (size < 0 || size != (jlong)(size_t) size) {
- ThrowIllegalAccessException("wrong number of bytes");
+ if (!ValidJniSizeArgument(size)) {
+ DCHECK(soa.Self()->IsExceptionPending());
+ return;
}
- size_t sz = (size_t)size;
- size_t src_offset = (size_t)srcOffset;
+ if (!ValidJniOffsetArgument(srcOffset, size)) {
+ DCHECK(soa.Self()->IsExceptionPending());
+ return;
+ }
+ const size_t copy_bytes = static_cast<size_t>(size);
+ const size_t src_offset = static_cast<size_t>(srcOffset);
ObjPtr<mirror::Object> src = soa.Decode<mirror::Object>(srcObj);
ObjPtr<mirror::Class> component_type = src->GetClass()->GetComponentType();
if (component_type->IsPrimitiveByte() || component_type->IsPrimitiveBoolean()) {
// Note: Treating BooleanArray as ByteArray.
- copyFromArray(dstAddr, ObjPtr<mirror::ByteArray>::DownCast(src), src_offset, sz);
+ copyFromArray(dstAddr, ObjPtr<mirror::ByteArray>::DownCast(src), src_offset, copy_bytes);
} else if (component_type->IsPrimitiveShort() || component_type->IsPrimitiveChar()) {
// Note: Treating CharArray as ShortArray.
- copyFromArray(dstAddr, ObjPtr<mirror::ShortArray>::DownCast(src), src_offset, sz);
+ copyFromArray(dstAddr, ObjPtr<mirror::ShortArray>::DownCast(src), src_offset, copy_bytes);
} else if (component_type->IsPrimitiveInt() || component_type->IsPrimitiveFloat()) {
// Note: Treating FloatArray as IntArray.
- copyFromArray(dstAddr, ObjPtr<mirror::IntArray>::DownCast(src), src_offset, sz);
+ copyFromArray(dstAddr, ObjPtr<mirror::IntArray>::DownCast(src), src_offset, copy_bytes);
} else if (component_type->IsPrimitiveLong() || component_type->IsPrimitiveDouble()) {
// Note: Treating DoubleArray as LongArray.
- copyFromArray(dstAddr, ObjPtr<mirror::LongArray>::DownCast(src), src_offset, sz);
+ copyFromArray(dstAddr, ObjPtr<mirror::LongArray>::DownCast(src), src_offset, copy_bytes);
} else {
- ThrowIllegalAccessException("not a primitive array");
+ ThrowIllegalArgumentException("not a primitive array");
}
}
static jboolean Unsafe_getBoolean(JNIEnv* env, jobject, jobject javaObj, jlong offset) {
diff --git a/runtime/native/sun_misc_Unsafe.cc b/runtime/native/sun_misc_Unsafe.cc
index 5014f34..e9c5af0 100644
--- a/runtime/native/sun_misc_Unsafe.cc
+++ b/runtime/native/sun_misc_Unsafe.cc
@@ -230,7 +230,7 @@
static jlong Unsafe_allocateMemory(JNIEnv* env, jobject, jlong bytes) {
ScopedFastNativeObjectAccess soa(env);
// bytes is nonnegative and fits into size_t
- if (bytes < 0 || bytes != (jlong)(size_t) bytes) {
+ if (bytes < 0 || bytes != static_cast<jlong>(static_cast<size_t>(bytes))) {
ThrowIllegalAccessException("wrong number of bytes");
return 0;
}
@@ -311,11 +311,11 @@
return;
}
// size is nonnegative and fits into size_t
- if (size < 0 || size != (jlong)(size_t) size) {
+ if (size < 0 || size != static_cast<jlong>(static_cast<size_t>(size))) {
ScopedFastNativeObjectAccess soa(env);
ThrowIllegalAccessException("wrong number of bytes");
}
- size_t sz = (size_t)size;
+ size_t sz = static_cast<size_t>(size);
memcpy(reinterpret_cast<void *>(dst), reinterpret_cast<void *>(src), sz);
}
@@ -358,11 +358,11 @@
return;
}
// size is nonnegative and fits into size_t
- if (size < 0 || size != (jlong)(size_t) size) {
+ if (size < 0 || size != static_cast<jlong>(static_cast<size_t>(size))) {
ThrowIllegalAccessException("wrong number of bytes");
}
- size_t sz = (size_t)size;
- size_t dst_offset = (size_t)dstOffset;
+ size_t sz = static_cast<size_t>(size);
+ size_t dst_offset = static_cast<size_t>(dstOffset);
ObjPtr<mirror::Object> dst = soa.Decode<mirror::Object>(dstObj);
ObjPtr<mirror::Class> component_type = dst->GetClass()->GetComponentType();
if (component_type->IsPrimitiveByte() || component_type->IsPrimitiveBoolean()) {
@@ -393,11 +393,11 @@
return;
}
// size is nonnegative and fits into size_t
- if (size < 0 || size != (jlong)(size_t) size) {
+ if (size < 0 || size != static_cast<jlong>(static_cast<size_t>(size))) {
ThrowIllegalAccessException("wrong number of bytes");
}
- size_t sz = (size_t)size;
- size_t src_offset = (size_t)srcOffset;
+ size_t sz = static_cast<size_t>(size);
+ size_t src_offset = static_cast<size_t>(srcOffset);
ObjPtr<mirror::Object> src = soa.Decode<mirror::Object>(srcObj);
ObjPtr<mirror::Class> component_type = src->GetClass()->GetComponentType();
if (component_type->IsPrimitiveByte() || component_type->IsPrimitiveBoolean()) {
diff --git a/tools/dmtracedump/tracedump.cc b/tools/dmtracedump/tracedump.cc
index 42527c5..3cb7374 100644
--- a/tools/dmtracedump/tracedump.cc
+++ b/tools/dmtracedump/tracedump.cc
@@ -849,7 +849,7 @@
return nullptr;
}
- if (fread(pKeys->fileData, 1, pKeys->fileLen, fp) != (size_t)pKeys->fileLen) {
+ if (fread(pKeys->fileData, 1, pKeys->fileLen, fp) != static_cast<size_t>(pKeys->fileLen)) {
fprintf(stderr, "ERROR: unable to read %" PRIu64 " bytes from trace file\n", pKeys->fileLen);
freeDataKeys(pKeys);
return nullptr;