diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/base64.cc | 76 | ||||
| -rw-r--r-- | src/base64.h | 15 | ||||
| -rw-r--r-- | src/common_test.h | 67 | ||||
| -rw-r--r-- | src/jni_compiler_test.cc | 12 | ||||
| -rw-r--r-- | src/jni_internal.cc | 2 | ||||
| -rw-r--r-- | src/jni_tests.cc | 9 |
6 files changed, 75 insertions, 106 deletions
diff --git a/src/base64.cc b/src/base64.cc deleted file mode 100644 index 1709946e50..0000000000 --- a/src/base64.cc +++ /dev/null @@ -1,76 +0,0 @@ -// Copyright 2011 Google Inc. All Rights Reserved. - -#include <vector> - -#include "UniquePtr.h" -#include "globals.h" - -namespace art { - -static const byte kMap[256] = { - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 62, 255, 255, 255, 63, - 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 255, 255, - 255, 254, 255, 255, 255, 0, 1, 2, 3, 4, 5, 6, - 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, - 19, 20, 21, 22, 23, 24, 25, 255, 255, 255, 255, 255, - 255, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, - 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, - 49, 50, 51, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255 -}; - -byte* DecodeBase64(const char* src, size_t* dst_size) { - std::vector<byte> tmp; - unsigned long t = 0, y = 0; - int g = 3; - for (size_t i = 0; src[i] != '\0'; ++i) { - byte c = kMap[src[i] & 0xFF]; - if (c == 255) continue; - // the final = symbols are read and used to trim the remaining bytes - if (c == 254) { - c = 0; - // prevent g < 0 which would potentially allow an overflow later - if (--g < 0) { - return NULL; - } - } else if (g != 3) { - // we only allow = to be at the end - return NULL; - } - t = (t << 6) | c; - if (++y == 4) { - tmp.push_back((t >> 16) & 255); - if (g > 1) { - tmp.push_back((t >> 8) & 255); - } - if (g > 2) { - tmp.push_back(t & 255); - } - y = t = 0; - } - } - if (y != 0) { - return NULL; - } - UniquePtr<byte[]> dst(new byte[tmp.size()]); - if (dst_size != NULL) { - *dst_size = tmp.size(); - } - std::copy(tmp.begin(), tmp.end(), dst.get()); - return dst.release(); -} - -} // namespace art diff --git a/src/base64.h b/src/base64.h deleted file mode 100644 index a4344ea672..0000000000 --- a/src/base64.h +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2011 Google Inc. All Rights Reserved. - -#ifndef ART_SRC_BASE64_H_ -#define ART_SRC_BASE64_H_ - -#include "globals.h" - -namespace art { - -// Decodes a C string with base64 encoded data. -byte* DecodeBase64(const char* src, size_t* dst_size); - -} // namespace art - -#endif // ART_SRC_BASE64_H_ diff --git a/src/common_test.h b/src/common_test.h index 0456c35d39..3da2f37d89 100644 --- a/src/common_test.h +++ b/src/common_test.h @@ -7,7 +7,6 @@ #include <sys/types.h> #include "UniquePtr.h" -#include "base64.h" #include "class_linker.h" #include "class_loader.h" #include "compiler.h" @@ -29,6 +28,72 @@ namespace art { +static const byte kBase64Map[256] = { + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 62, 255, 255, 255, 63, + 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 255, 255, + 255, 254, 255, 255, 255, 0, 1, 2, 3, 4, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 20, 21, 22, 23, 24, 25, 255, 255, 255, 255, 255, + 255, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, + 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255 +}; + +byte* DecodeBase64(const char* src, size_t* dst_size) { + std::vector<byte> tmp; + unsigned long t = 0, y = 0; + int g = 3; + for (size_t i = 0; src[i] != '\0'; ++i) { + byte c = kBase64Map[src[i] & 0xFF]; + if (c == 255) continue; + // the final = symbols are read and used to trim the remaining bytes + if (c == 254) { + c = 0; + // prevent g < 0 which would potentially allow an overflow later + if (--g < 0) { + return NULL; + } + } else if (g != 3) { + // we only allow = to be at the end + return NULL; + } + t = (t << 6) | c; + if (++y == 4) { + tmp.push_back((t >> 16) & 255); + if (g > 1) { + tmp.push_back((t >> 8) & 255); + } + if (g > 2) { + tmp.push_back(t & 255); + } + y = t = 0; + } + } + if (y != 0) { + return NULL; + } + UniquePtr<byte[]> dst(new byte[tmp.size()]); + if (dst_size != NULL) { + *dst_size = tmp.size(); + } + std::copy(tmp.begin(), tmp.end(), dst.get()); + return dst.release(); +} + static inline const DexFile* OpenDexFileBase64(const char* base64, const std::string& location) { // decode base64 diff --git a/src/jni_compiler_test.cc b/src/jni_compiler_test.cc index 938d733ee8..5e19d4d6ca 100644 --- a/src/jni_compiler_test.cc +++ b/src/jni_compiler_test.cc @@ -17,6 +17,11 @@ #include "scoped_jni_thread_state.h" #include "thread.h" +extern "C" +JNIEXPORT jint JNICALL Java_MyClass_bar(JNIEnv* env, jobject thisObj, jint count) { + return count + 1; +} + namespace art { class JniCompilerTest : public CommonTest { @@ -109,12 +114,11 @@ TEST_F(JniCompilerTest, CompileAndRunNoArgMethod) { TEST_F(JniCompilerTest, CompileAndRunIntMethodThroughStub) { SirtRef<ClassLoader> class_loader(LoadDex("MyClassNatives")); SetupForTest(class_loader.get(), false, "bar", "(I)I", - NULL /* dlsym will find &Java_MyClass_bar later */); + NULL /* calling through stub will load &Java_MyClass_bar */); - std::string path("libarttest.so"); std::string reason; - ASSERT_TRUE(Runtime::Current()->GetJavaVM()->LoadNativeLibrary(path, class_loader.get(), reason)) - << path << ": " << reason; + ASSERT_TRUE(Runtime::Current()->GetJavaVM()->LoadNativeLibrary("", class_loader.get(), reason)) + << reason; jint result = env_->CallNonvirtualIntMethod(jobj_, jklass_, jmethod_, 24); EXPECT_EQ(25, result); diff --git a/src/jni_internal.cc b/src/jni_internal.cc index 8e7c0a2e4f..5385ae2ad3 100644 --- a/src/jni_internal.cc +++ b/src/jni_internal.cc @@ -2853,7 +2853,7 @@ bool JavaVMExt::LoadNativeLibrary(const std::string& path, ClassLoader* class_lo void* handle = NULL; { ScopedThreadStateChange tsc(self, Thread::kVmWait); - handle = dlopen(path.c_str(), RTLD_LAZY); + handle = dlopen(path.empty() ? NULL : path.c_str(), RTLD_LAZY); } VLOG(jni) << "[Call to dlopen(\"" << path << "\") returned " << handle << "]"; diff --git a/src/jni_tests.cc b/src/jni_tests.cc deleted file mode 100644 index 934ccac947..0000000000 --- a/src/jni_tests.cc +++ /dev/null @@ -1,9 +0,0 @@ -// Copyright 2011 Google Inc. All Rights Reserved. - -#include "jni.h" -#include <stdio.h> - -extern "C" -JNIEXPORT jint JNICALL Java_MyClass_bar(JNIEnv* env, jobject thisObj, jint count) { - return count + 1; -} |