Don't use variable-length arrays.
Change-Id: I3f70cadaaade189fd834d9aadb8839fe8ad87f1f
diff --git a/src/dex_file.cc b/src/dex_file.cc
index d3e1c68..c3e7c84 100644
--- a/src/dex_file.cc
+++ b/src/dex_file.cc
@@ -789,13 +789,12 @@
DexDebugNewPositionCb position_cb, DexDebugNewLocalCb local_cb,
void* context) const {
const byte* stream = GetDebugInfoStream(code_item);
- LocalInfo local_in_reg[code_item->registers_size_];
-
+ UniquePtr<LocalInfo[]> local_in_reg(local_cb != NULL ? new LocalInfo[code_item->registers_size_] : NULL);
if (stream != NULL) {
- DecodeDebugInfo0(code_item, is_static, method_idx, position_cb, local_cb, context, stream, local_in_reg);
+ DecodeDebugInfo0(code_item, is_static, method_idx, position_cb, local_cb, context, stream, &local_in_reg[0]);
}
for (int reg = 0; reg < code_item->registers_size_; reg++) {
- InvokeLocalCbIfLive(context, reg, code_item->insns_size_in_code_units_, local_in_reg, local_cb);
+ InvokeLocalCbIfLive(context, reg, code_item->insns_size_in_code_units_, &local_in_reg[0], local_cb);
}
}
diff --git a/src/dex_file.h b/src/dex_file.h
index 429c7bc..e6c8a94 100644
--- a/src/dex_file.h
+++ b/src/dex_file.h
@@ -1041,7 +1041,8 @@
ClassDataField() : field_idx_delta_(0), access_flags_(0) {}
private:
DISALLOW_COPY_AND_ASSIGN(ClassDataField);
- } field_;
+ };
+ ClassDataField field_;
// Read and decode a field from a class_data_item stream into field
void ReadClassDataField();
@@ -1054,7 +1055,8 @@
ClassDataMethod() : method_idx_delta_(0), access_flags_(0), code_off_(0) {}
private:
DISALLOW_COPY_AND_ASSIGN(ClassDataMethod);
- } method_;
+ };
+ ClassDataMethod method_;
// Read and decode a method from a class_data_item stream into method
void ReadClassDataMethod();
diff --git a/src/dex_file_verifier.cc b/src/dex_file_verifier.cc
index eb06e2a..af9d4bb 100644
--- a/src/dex_file_verifier.cc
+++ b/src/dex_file_verifier.cc
@@ -642,8 +642,8 @@
return false;
}
- uint32_t handler_offsets[handlers_size];
- if (!CheckAndGetHandlerOffsets(code_item, handler_offsets, handlers_size)) {
+ UniquePtr<uint32_t[]> handler_offsets(new uint32_t[handlers_size]);
+ if (!CheckAndGetHandlerOffsets(code_item, &handler_offsets[0], handlers_size)) {
return false;
}
diff --git a/src/jni_internal_test.cc b/src/jni_internal_test.cc
index 414f003..8bdc8c6 100644
--- a/src/jni_internal_test.cc
+++ b/src/jni_internal_test.cc
@@ -783,29 +783,29 @@
env_->set_region_fn(a, size - 1, size, NULL); \
EXPECT_EXCEPTION(aioobe_); \
/* Prepare a couple of buffers. */ \
- scalar_type src_buf[size]; \
- scalar_type dst_buf[size]; \
+ UniquePtr<scalar_type[]> src_buf(new scalar_type[size]); \
+ UniquePtr<scalar_type[]> dst_buf(new scalar_type[size]); \
for (jsize i = 0; i < size; ++i) { src_buf[i] = scalar_type(i); } \
for (jsize i = 0; i < size; ++i) { dst_buf[i] = scalar_type(-1); } \
/* Copy all of src_buf onto the heap. */ \
- env_->set_region_fn(a, 0, size, src_buf); \
+ env_->set_region_fn(a, 0, size, &src_buf[0]); \
/* Copy back only part. */ \
env_->get_region_fn(a, 1, size - 2, &dst_buf[1]); \
- EXPECT_NE(memcmp(src_buf, dst_buf, sizeof(src_buf)), 0) << "short copy equal"; \
+ EXPECT_NE(memcmp(&src_buf[0], &dst_buf[0], size * sizeof(scalar_type)), 0) << "short copy equal"; \
/* Copy the missing pieces. */ \
- env_->get_region_fn(a, 0, 1, dst_buf); \
+ env_->get_region_fn(a, 0, 1, &dst_buf[0]); \
env_->get_region_fn(a, size - 1, 1, &dst_buf[size - 1]); \
- EXPECT_EQ(memcmp(src_buf, dst_buf, sizeof(src_buf)), 0) << "fixed copy not equal"; \
+ EXPECT_EQ(memcmp(&src_buf[0], &dst_buf[0], size * sizeof(scalar_type)), 0) << "fixed copy not equal"; \
/* Copy back the whole array. */ \
- env_->get_region_fn(a, 0, size, dst_buf); \
- EXPECT_EQ(memcmp(src_buf, dst_buf, sizeof(src_buf)), 0) << "full copy not equal"; \
+ env_->get_region_fn(a, 0, size, &dst_buf[0]); \
+ EXPECT_EQ(memcmp(&src_buf[0], &dst_buf[0], size * sizeof(scalar_type)), 0) << "full copy not equal"; \
/* GetPrimitiveArrayCritical */ \
void* v = env_->GetPrimitiveArrayCritical(a, NULL); \
- EXPECT_EQ(memcmp(src_buf, v, sizeof(src_buf)), 0) << "GetPrimitiveArrayCritical not equal"; \
+ EXPECT_EQ(memcmp(&src_buf[0], v, size * sizeof(scalar_type)), 0) << "GetPrimitiveArrayCritical not equal"; \
env_->ReleasePrimitiveArrayCritical(a, v, 0); \
/* GetXArrayElements */ \
scalar_type* xs = env_->get_elements_fn(a, NULL); \
- EXPECT_EQ(memcmp(src_buf, xs, sizeof(src_buf)), 0) << # get_elements_fn " not equal"; \
+ EXPECT_EQ(memcmp(&src_buf[0], xs, size * sizeof(scalar_type)), 0) << # get_elements_fn " not equal"; \
env_->release_elements_fn(a, xs, 0); \
EXPECT_EQ(reinterpret_cast<uintptr_t>(v), reinterpret_cast<uintptr_t>(xs))
diff --git a/src/object_test.cc b/src/object_test.cc
index 3512171..80ed0bb 100644
--- a/src/object_test.cc
+++ b/src/object_test.cc
@@ -35,7 +35,7 @@
const char* utf8_in,
const char* utf16_expected_le,
int32_t expected_hash) {
- uint16_t utf16_expected[length];
+ UniquePtr<uint16_t[]> utf16_expected(new uint16_t[length]);
for (int32_t i = 0; i < length; i++) {
uint16_t ch = (((utf16_expected_le[i*2 + 0] & 0xff) << 8) |
((utf16_expected_le[i*2 + 1] & 0xff) << 0));