| Index: src/trusted/validator/validation_cache_test.cc
|
| diff --git a/src/trusted/validator/validation_cache_test.cc b/src/trusted/validator/validation_cache_test.cc
|
| index d8b01ebde8d33e49d09b081b8220c0475d2e258c..c1531885f139eb4c2ca05659afeca58229d8fa9f 100644
|
| --- a/src/trusted/validator/validation_cache_test.cc
|
| +++ b/src/trusted/validator/validation_cache_test.cc
|
| @@ -17,6 +17,7 @@
|
| #include "native_client/src/trusted/validator/validation_cache.h"
|
| #include "native_client/src/trusted/cpu_features/arch/x86/cpu_x86.h"
|
| #include "native_client/src/trusted/service_runtime/include/sys/fcntl.h"
|
| +#include "native_client/src/trusted/validator/rich_file_info.h"
|
| #include "native_client/src/trusted/validator/validation_metadata.h"
|
|
|
| #define CONTEXT_MARKER 31
|
| @@ -252,124 +253,111 @@ TEST_F(ValidationCachingInterfaceTests, Metadata) {
|
|
|
| extern "C" {
|
| extern int SerializeNaClDescMetadata(
|
| - uint8_t known_file,
|
| - const char *file_name,
|
| - uint32_t file_name_length,
|
| + const struct RichFileInfo *info,
|
| uint8_t **buffer,
|
| uint32_t *buffer_length);
|
|
|
| extern int DeserializeNaClDescMetadata(
|
| - uint8_t *buffer,
|
| + const uint8_t *buffer,
|
| uint32_t buffer_length,
|
| - uint8_t *known_file,
|
| - char **file_name,
|
| - uint32_t *file_name_length);
|
| + struct RichFileInfo *info);
|
| }
|
|
|
| class ValidationCachingSerializationTests : public ::testing::Test {
|
| protected:
|
| + struct RichFileInfo info;
|
| uint8_t *buffer;
|
| uint32_t buffer_length;
|
| - uint8_t known_file;
|
| - char *file_name;
|
| - uint32_t file_name_length;
|
| + struct RichFileInfo inp;
|
| + struct RichFileInfo outp;
|
|
|
| void SetUp() {
|
| buffer = 0;
|
| buffer_length = 0;
|
| - known_file = 0;
|
| - file_name = 0;
|
| - file_name_length = 0;
|
| + RichFileInfoCtor(&inp);
|
| + RichFileInfoCtor(&outp);
|
| + }
|
| +
|
| + void TearDown() {
|
| + free(buffer);
|
| + // Don't free the inp structure, it does not contain malloced memory.
|
| + RichFileInfoDtor(&outp);
|
| }
|
| };
|
|
|
| TEST_F(ValidationCachingSerializationTests, NormalOperationSimple) {
|
| - EXPECT_EQ(0, SerializeNaClDescMetadata(0, "foo", 3, &buffer, &buffer_length));
|
| - EXPECT_EQ(0, DeserializeNaClDescMetadata(buffer, buffer_length, &known_file,
|
| - &file_name, &file_name_length));
|
| - free(buffer);
|
| -
|
| - EXPECT_EQ((uint8_t) 0, known_file);
|
| - EXPECT_EQ((uint32_t) 0, file_name_length);
|
| - EXPECT_EQ(NULL, file_name);
|
| + inp.known_file = 0;
|
| + inp.file_path = "foo";
|
| + inp.file_path_length = 3;
|
| + EXPECT_EQ(0, SerializeNaClDescMetadata(&inp, &buffer, &buffer_length));
|
| + EXPECT_EQ(0, DeserializeNaClDescMetadata(buffer, buffer_length, &outp));
|
| +
|
| + EXPECT_EQ((uint8_t) 0, outp.known_file);
|
| + EXPECT_EQ((uint32_t) 0, outp.file_path_length);
|
| + EXPECT_EQ(NULL, outp.file_path);
|
| }
|
|
|
| TEST_F(ValidationCachingSerializationTests, NormalOperationFull) {
|
| - EXPECT_EQ(0, SerializeNaClDescMetadata(1, "foo", 3, &buffer, &buffer_length));
|
| - EXPECT_EQ(0, DeserializeNaClDescMetadata(buffer, buffer_length, &known_file,
|
| - &file_name, &file_name_length));
|
| - free(buffer);
|
| -
|
| - EXPECT_EQ((uint8_t) 1, known_file);
|
| - EXPECT_EQ((uint32_t) 3, file_name_length);
|
| - EXPECT_EQ(0, memcmp("foo", file_name, file_name_length));
|
| - free(file_name);
|
| + inp.known_file = 1;
|
| + inp.file_path = "foo";
|
| + inp.file_path_length = 3;
|
| +
|
| + EXPECT_EQ(0, SerializeNaClDescMetadata(&inp, &buffer, &buffer_length));
|
| + EXPECT_EQ(0, DeserializeNaClDescMetadata(buffer, buffer_length, &outp));
|
| +
|
| + EXPECT_EQ((uint8_t) 1, outp.known_file);
|
| + EXPECT_EQ((uint32_t) 3, outp.file_path_length);
|
| + EXPECT_EQ(0, memcmp("foo", outp.file_path, outp.file_path_length));
|
| }
|
|
|
| TEST_F(ValidationCachingSerializationTests, BadSizeSimple) {
|
| - EXPECT_EQ(0, SerializeNaClDescMetadata(0, NULL, 0, &buffer, &buffer_length));
|
| + inp.known_file = 0;
|
| + EXPECT_EQ(0, SerializeNaClDescMetadata(&inp, &buffer, &buffer_length));
|
| for (uint32_t i = -1; i <= buffer_length + 4; i++) {
|
| /* The only case that is OK. */
|
| if (i == buffer_length)
|
| continue;
|
|
|
| /* Wrong number of bytes, fail. */
|
| - EXPECT_EQ(1, DeserializeNaClDescMetadata(buffer, i, &known_file,
|
| - &file_name, &file_name_length));
|
| + EXPECT_EQ(1, DeserializeNaClDescMetadata(buffer, i, &outp));
|
| }
|
| - free(buffer);
|
| }
|
|
|
| TEST_F(ValidationCachingSerializationTests, BadSizeFull) {
|
| - EXPECT_EQ(0, SerializeNaClDescMetadata(1, "foo", 3, &buffer, &buffer_length));
|
| + inp.known_file = 1;
|
| + inp.file_path = "foo";
|
| + inp.file_path_length = 3;
|
| + EXPECT_EQ(0, SerializeNaClDescMetadata(&inp, &buffer, &buffer_length));
|
| for (uint32_t i = -1; i <= buffer_length + 4; i++) {
|
| /* The only case that is OK. */
|
| if (i == buffer_length)
|
| continue;
|
|
|
| /* Wrong number of bytes, fail. */
|
| - EXPECT_EQ(1, DeserializeNaClDescMetadata(buffer, i, &known_file,
|
| - &file_name, &file_name_length));
|
| + EXPECT_EQ(1, DeserializeNaClDescMetadata(buffer, i, &outp));
|
| /* Paranoia. */
|
| - EXPECT_EQ(0, known_file);
|
| + EXPECT_EQ(0, outp.known_file);
|
| /* Make sure we don't leak on failure. */
|
| - EXPECT_EQ(NULL, file_name);
|
| + EXPECT_EQ(NULL, outp.file_path);
|
| }
|
| - free(buffer);
|
| }
|
|
|
| -extern "C" {
|
| - extern int SetFileOriginInfo(
|
| - struct NaClDesc *desc,
|
| - uint8_t known_file,
|
| - const char *file_name,
|
| - uint32_t file_name_length);
|
| -
|
| - extern int GetFileOriginInfo(
|
| - struct NaClDesc *desc,
|
| - uint8_t *known_file,
|
| - char **file_name,
|
| - uint32_t *file_name_length);
|
| -}
|
| -
|
| -char *AN_ARBITRARY_FILE_PATH = NULL;
|
| +static char *AN_ARBITRARY_FILE_PATH = NULL;
|
|
|
| class ValidationCachingFileOriginTests : public ::testing::Test {
|
| protected:
|
| struct NaClDesc *desc;
|
|
|
| - uint8_t known_file;
|
| - char *file_name;
|
| - uint32_t file_name_length;
|
| + struct RichFileInfo inp;
|
| + struct RichFileInfo outp;
|
|
|
| void SetUp() {
|
| struct NaClHostDesc *host_desc = NULL;
|
| int fd = open(AN_ARBITRARY_FILE_PATH, O_RDONLY);
|
|
|
| desc = NULL;
|
| - known_file = 0;
|
| - file_name = NULL;
|
| - file_name_length = 0;
|
| + RichFileInfoCtor(&inp);
|
| + RichFileInfoCtor(&outp);
|
|
|
| ASSERT_NE(-1, fd);
|
| host_desc = NaClHostDescPosixMake(fd, NACL_ABI_O_RDONLY);
|
| @@ -378,35 +366,39 @@ class ValidationCachingFileOriginTests : public ::testing::Test {
|
| }
|
|
|
| void TearDown() {
|
| - free(file_name);
|
| + // Don't free the inp structure, it does not contain malloced memory.
|
| + RichFileInfoDtor(&outp);
|
| NaClDescSafeUnref(desc);
|
| }
|
| };
|
|
|
| TEST_F(ValidationCachingFileOriginTests, None) {
|
| - EXPECT_EQ(1, GetFileOriginInfo(desc, &known_file, &file_name,
|
| - &file_name_length));
|
| + EXPECT_EQ(1, GetFileOriginInfo(desc, &outp));
|
| }
|
|
|
| TEST_F(ValidationCachingFileOriginTests, Simple) {
|
| - EXPECT_EQ(0, SetFileOriginInfo(desc, 0, "foobar", 6));
|
| - EXPECT_EQ(0, GetFileOriginInfo(desc, &known_file, &file_name,
|
| - &file_name_length));
|
| -
|
| - EXPECT_EQ(0, known_file);
|
| - EXPECT_EQ((uint32_t) 0, file_name_length);
|
| - EXPECT_EQ(NULL, file_name);
|
| + inp.known_file = 0;
|
| + inp.file_path = "foobar";
|
| + inp.file_path_length = 6;
|
| + EXPECT_EQ(0, SetFileOriginInfo(desc, &inp));
|
| + EXPECT_EQ(0, GetFileOriginInfo(desc, &outp));
|
| +
|
| + EXPECT_EQ(0, outp.known_file);
|
| + EXPECT_EQ((uint32_t) 0, outp.file_path_length);
|
| + EXPECT_EQ(NULL, outp.file_path);
|
| }
|
|
|
|
|
| TEST_F(ValidationCachingFileOriginTests, Full) {
|
| - EXPECT_EQ(0, SetFileOriginInfo(desc, 1, "foobar", 6));
|
| - EXPECT_EQ(0, GetFileOriginInfo(desc, &known_file, &file_name,
|
| - &file_name_length));
|
| -
|
| - EXPECT_EQ(1, known_file);
|
| - EXPECT_EQ((uint32_t) 6, file_name_length);
|
| - EXPECT_EQ(0, memcmp("foobar", file_name, file_name_length));
|
| + inp.known_file = 1;
|
| + inp.file_path = "foobar";
|
| + inp.file_path_length = 6;
|
| + EXPECT_EQ(0, SetFileOriginInfo(desc, &inp));
|
| + EXPECT_EQ(0, GetFileOriginInfo(desc, &outp));
|
| +
|
| + EXPECT_EQ(1, outp.known_file);
|
| + EXPECT_EQ((uint32_t) 6, outp.file_path_length);
|
| + EXPECT_EQ(0, memcmp("foobar", outp.file_path, outp.file_path_length));
|
| }
|
|
|
| // Test driver function.
|
|
|