diff --git a/oss_c_sdk/aos_http_io.c b/oss_c_sdk/aos_http_io.c index b7ca6b75..7ec04016 100644 --- a/oss_c_sdk/aos_http_io.c +++ b/oss_c_sdk/aos_http_io.c @@ -108,6 +108,7 @@ aos_http_request_options_t *aos_http_request_options_create(aos_pool_t *p) options->verify_ssl = AOS_TRUE; options->ca_file = NULL; options->ca_path = NULL; + options->verify_object_strict = AOS_TRUE; return options; } diff --git a/oss_c_sdk/aos_status.c b/oss_c_sdk/aos_status.c index 93a97e0f..e02ee7a6 100644 --- a/oss_c_sdk/aos_status.c +++ b/oss_c_sdk/aos_status.c @@ -20,6 +20,7 @@ const char AOS_SELECT_OBJECT_ERROR[] = "SelectObjectError"; const char AOS_SELECT_OBJECT_CRC_ERROR[] = "SelectObjectCRCError"; const char AOS_CREATE_SELECT_OBJECT_META_ERROR[] = "CreateSelectObjectMetaError"; const char AOS_BUCKET_NAME_INVALID_ERROR[] = "BucketNameInvalidError"; +const char AOS_OBJECT_NAME_INVALID_ERROR[] = "ObjectNameInvalidError"; aos_status_t *aos_status_create(aos_pool_t *p) { diff --git a/oss_c_sdk/aos_status.h b/oss_c_sdk/aos_status.h index 466fb939..53e95b12 100644 --- a/oss_c_sdk/aos_status.h +++ b/oss_c_sdk/aos_status.h @@ -59,6 +59,8 @@ extern const char AOS_SELECT_OBJECT_ERROR[]; extern const char AOS_SELECT_OBJECT_CRC_ERROR[]; extern const char AOS_CREATE_SELECT_OBJECT_META_ERROR[]; extern const char AOS_BUCKET_NAME_INVALID_ERROR[]; +extern const char AOS_OBJECT_NAME_INVALID_ERROR[]; + AOS_CPP_END #endif diff --git a/oss_c_sdk/aos_transport.h b/oss_c_sdk/aos_transport.h index 87100b24..d48932fc 100644 --- a/oss_c_sdk/aos_transport.h +++ b/oss_c_sdk/aos_transport.h @@ -37,6 +37,7 @@ struct aos_http_request_options_s { int verify_ssl; char *ca_path; char *ca_file; + int verify_object_strict; }; struct aos_http_transport_options_s { diff --git a/oss_c_sdk/oss_object.c b/oss_c_sdk/oss_object.c index 2321ff82..efd437d7 100644 --- a/oss_c_sdk/oss_object.c +++ b/oss_c_sdk/oss_object.c @@ -20,6 +20,11 @@ char *oss_gen_signed_url(const oss_request_options_t *options, aos_string_t expires_time; int res = AOSE_OK; + if (!oss_is_valid_bucket_name(bucket) || + !oss_is_valid_object_name_ex(object, is_verify_object_strict(options))) { + return NULL; + } + expires_str = apr_psprintf(options->pool, "%" APR_INT64_T_FMT, expires); aos_str_set(&expires_time, expires_str); oss_get_object_uri(options, bucket, object, req); @@ -57,6 +62,7 @@ aos_status_t *oss_do_put_object_from_buffer(const oss_request_options_t *options aos_table_t *query_params = NULL; oss_ensure_bucket_name_valid(bucket); + oss_ensure_object_name_valid(object); headers = aos_table_create_if_null(options, headers, 2); set_content_type(NULL, object->data, headers); @@ -107,6 +113,7 @@ aos_status_t *oss_do_put_object_from_file(const oss_request_options_t *options, int res = AOSE_OK; oss_ensure_bucket_name_valid(bucket); + oss_ensure_object_name_valid(object); s = aos_status_create(options->pool); @@ -162,6 +169,7 @@ aos_status_t *oss_do_get_object_to_buffer(const oss_request_options_t *options, aos_http_response_t *resp = NULL; oss_ensure_bucket_name_valid(bucket); + oss_ensure_object_name_valid(object); headers = aos_table_create_if_null(options, headers, 0); params = aos_table_create_if_null(options, params, 0); @@ -193,6 +201,7 @@ aos_status_t *oss_restore_object(const oss_request_options_t *options, aos_http_response_t *resp = NULL; oss_ensure_bucket_name_valid(bucket); + oss_ensure_object_name_valid(object); params = aos_table_create_if_null(options, params, 0); apr_table_add(params, OSS_RESTORE, ""); @@ -232,6 +241,7 @@ aos_status_t *oss_restore_object_with_tier(const oss_request_options_t *options, aos_list_t body; oss_ensure_bucket_name_valid(bucket); + oss_ensure_object_name_valid(object); params = aos_table_create_if_null(options, params, 0); apr_table_add(params, OSS_RESTORE, ""); @@ -280,6 +290,7 @@ aos_status_t *oss_do_get_object_to_file(const oss_request_options_t *options, aos_string_t tmp_filename; oss_ensure_bucket_name_valid(bucket); + oss_ensure_object_name_valid(object); headers = aos_table_create_if_null(options, headers, 0); params = aos_table_create_if_null(options, params, 0); @@ -321,6 +332,7 @@ aos_status_t *oss_head_object(const oss_request_options_t *options, aos_table_t *query_params = NULL; oss_ensure_bucket_name_valid(bucket); + oss_ensure_object_name_valid(object); headers = aos_table_create_if_null(options, headers, 0); @@ -346,6 +358,7 @@ aos_status_t *oss_get_object_meta(const oss_request_options_t *options, aos_table_t *headers = NULL; oss_ensure_bucket_name_valid(bucket); + oss_ensure_object_name_valid(object); //init query_params query_params = aos_table_create_if_null(options, query_params, 1); @@ -376,6 +389,7 @@ aos_status_t *oss_put_object_acl(const oss_request_options_t *options, const char *oss_acl_str = NULL; oss_ensure_bucket_name_valid(bucket); + oss_ensure_object_name_valid(object); s = aos_status_create(options->pool); @@ -418,6 +432,7 @@ aos_status_t *oss_get_object_acl(const oss_request_options_t *options, aos_table_t *headers = NULL; oss_ensure_bucket_name_valid(bucket); + oss_ensure_object_name_valid(object); s = aos_status_create(options->pool); @@ -474,6 +489,7 @@ aos_status_t *oss_do_put_symlink(const oss_request_options_t *options, aos_table_t *query_params = NULL; oss_ensure_bucket_name_valid(bucket); + oss_ensure_object_name_valid(sym_object); headers = aos_table_create_if_null(options, headers, 1); apr_table_set(headers, OSS_CANNONICALIZED_HEADER_SYMLINK, target_object->data); @@ -502,6 +518,7 @@ aos_status_t *oss_get_symlink(const oss_request_options_t *options, aos_table_t *headers = NULL; oss_ensure_bucket_name_valid(bucket); + oss_ensure_object_name_valid(sym_object); headers = aos_table_create_if_null(options, headers, 0); @@ -529,6 +546,7 @@ aos_status_t *oss_delete_object(const oss_request_options_t *options, aos_table_t *query_params = NULL; oss_ensure_bucket_name_valid(bucket); + oss_ensure_object_name_valid(object); headers = aos_table_create_if_null(options, headers, 0); query_params = aos_table_create_if_null(options, query_params, 0); @@ -560,6 +578,7 @@ aos_status_t *oss_copy_object(const oss_request_options_t *options, int res = -1; oss_ensure_bucket_name_valid(dest_bucket); + oss_ensure_object_name_valid(dest_object); s = aos_status_create(options->pool); @@ -601,6 +620,7 @@ aos_status_t *oss_append_object_from_buffer(const oss_request_options_t *options aos_table_t *query_params = NULL; oss_ensure_bucket_name_valid(bucket); + oss_ensure_object_name_valid(object); /* init query_params */ query_params = aos_table_create_if_null(options, query_params, 2); @@ -640,6 +660,7 @@ aos_status_t *oss_do_append_object_from_buffer(const oss_request_options_t *opti aos_table_t *query_params = NULL; oss_ensure_bucket_name_valid(bucket); + oss_ensure_object_name_valid(object); /* init query_params */ query_params = aos_table_create_if_null(options, params, 2); @@ -681,6 +702,7 @@ aos_status_t *oss_append_object_from_file(const oss_request_options_t *options, int res = AOSE_OK; oss_ensure_bucket_name_valid(bucket); + oss_ensure_object_name_valid(object); /* init query_params */ query_params = aos_table_create_if_null(options, query_params, 2); @@ -727,6 +749,7 @@ aos_status_t *oss_do_append_object_from_file(const oss_request_options_t *option int res = AOSE_OK; oss_ensure_bucket_name_valid(bucket); + oss_ensure_object_name_valid(object); /* init query_params */ query_params = aos_table_create_if_null(options, params, 2); @@ -954,6 +977,7 @@ aos_status_t *oss_do_select_object_to_buffer(const oss_request_options_t *option int b64_len; oss_ensure_bucket_name_valid(bucket); + oss_ensure_object_name_valid(object); /*init query_params*/ query_params = aos_table_create_if_null(options, params, 1); @@ -1030,6 +1054,7 @@ aos_status_t *oss_do_select_object_to_file(const oss_request_options_t *options, aos_string_t tmp_filename; oss_ensure_bucket_name_valid(bucket); + oss_ensure_object_name_valid(object); /*init query_params*/ query_params = aos_table_create_if_null(options, params, 1); @@ -1097,6 +1122,7 @@ aos_status_t *oss_create_select_object_meta(const oss_request_options_t *options int b64_len; oss_ensure_bucket_name_valid(bucket); + oss_ensure_object_name_valid(object); /*init query_params*/ query_params = aos_table_create_if_null(options, query_params, 1); @@ -1146,6 +1172,7 @@ aos_status_t *oss_put_object_tagging(const oss_request_options_t *options, aos_list_t body; oss_ensure_bucket_name_valid(bucket); + oss_ensure_object_name_valid(object); //init query_params query_params = aos_table_create_if_null(options, query_params, 1); @@ -1180,6 +1207,7 @@ aos_status_t *oss_get_object_tagging(const oss_request_options_t *options, aos_table_t *headers = NULL; oss_ensure_bucket_name_valid(bucket); + oss_ensure_object_name_valid(object); query_params = aos_table_create_if_null(options, query_params, 1); apr_table_add(query_params, OSS_TAGGING, ""); @@ -1215,6 +1243,7 @@ aos_status_t *oss_delete_object_tagging(const oss_request_options_t *options, aos_table_t *headers = NULL; oss_ensure_bucket_name_valid(bucket); + oss_ensure_object_name_valid(object); query_params = aos_table_create_if_null(options, query_params, 1); apr_table_add(query_params, OSS_TAGGING, ""); diff --git a/oss_c_sdk/oss_util.c b/oss_c_sdk/oss_util.c index d928d710..1ef5b93c 100644 --- a/oss_c_sdk/oss_util.c +++ b/oss_c_sdk/oss_util.c @@ -1534,6 +1534,40 @@ aos_status_t *oss_get_bucket_name_invalid_error() return &oss_bucket_name_invalid_error; } +int oss_is_valid_object_name(const aos_string_t* str) +{ + if (aos_string_is_empty(str)) { + return 0; + } + return 1; +} + +int oss_is_valid_object_name_ex(const aos_string_t* str, int strict) +{ + + if (aos_string_is_empty(str)) { + return 0; + } + + if (strict && str->data[0] == '?') { + return 0; + } + + return 1; +} + +aos_status_t* oss_get_object_name_invalid_error() +{ + static aos_status_t oss_object_name_invalid_error = { + AOSE_INVALID_ARGUMENT, + (char*)AOS_OBJECT_NAME_INVALID_ERROR, + "The object name is invalid, please check.", + NULL + }; + + return &oss_object_name_invalid_error; +} + int oss_is_valid_host(const char *host) { //format like: userinfo@host:port, just check host @@ -1579,3 +1613,7 @@ int oss_is_valid_host(const char *host) return 1; } +int is_verify_object_strict(const oss_request_options_t* options) +{ + return options->ctl->options->verify_object_strict; +} diff --git a/oss_c_sdk/oss_util.h b/oss_c_sdk/oss_util.h index 68f56939..68c54de6 100644 --- a/oss_c_sdk/oss_util.h +++ b/oss_c_sdk/oss_util.h @@ -400,6 +400,12 @@ oss_tag_content_t *oss_create_tag_content(aos_pool_t *p); **/ int oss_is_valid_bucket_name(const aos_string_t *str); +/** + * @brief check if object name is valid. +**/ +int oss_is_valid_object_name(const aos_string_t *str); +int oss_is_valid_object_name_ex(const aos_string_t* str, int strict); + /** * @brief pre-process endpoint, just keep host and port. **/ @@ -415,14 +421,25 @@ aos_status_t *oss_get_bucket_name_invalid_error(); #define oss_ensure_bucket_name_valid(a) do { \ if (!oss_is_valid_bucket_name(a)) { \ return oss_get_bucket_name_invalid_error(); \ - } \ + } \ + } while(0) + +aos_status_t* oss_get_object_name_invalid_error(); + +#define oss_ensure_object_name_valid(a) do { \ + if (!oss_is_valid_object_name(a)) { \ + return oss_get_object_name_invalid_error(); \ + } \ } while(0) + /** * @brief check if the host is valid. **/ int oss_is_valid_host(const char *host); +int is_verify_object_strict(const oss_request_options_t * options); + OSS_CPP_END diff --git a/oss_c_sdk_test/test_aos.c b/oss_c_sdk_test/test_aos.c index dd333625..b2de2c36 100644 --- a/oss_c_sdk_test/test_aos.c +++ b/oss_c_sdk_test/test_aos.c @@ -1533,13 +1533,13 @@ static void test_oss_get_rtmp_signed_url_negative(CuTest *tc) { static void test_oss_is_valid_bucket_name(CuTest *tc) { int i; aos_string_t name; - char *invalid_name_list[] = - { "a", "1", "!", "aa", "12", "a1", - "a!", "1!", "aAa", "1A1", "a!a", "FengChao@123", "-a123", "a_123", "a123-", - "1234567890123456789012345678901234567890123456789012345678901234", "" + char *invalid_name_list[] = + { "a", "1", "!", "aa", "12", "a1", + "a!", "1!", "aAa", "1A1", "a!a", "FengChao@123", "-a123", "a_123", "a123-", + "1234567890123456789012345678901234567890123456789012345678901234", "" }; - for (i = 0; i < sizeof(invalid_name_list) / sizeof(invalid_name_list[0]); i++) { + for (i = 0; i < sizeof(invalid_name_list) / sizeof(invalid_name_list[0]); i++) { aos_str_set(&name, invalid_name_list[i]); CuAssertIntEquals(tc, 0, oss_is_valid_bucket_name(&name)); } @@ -1555,6 +1555,51 @@ static void test_oss_is_valid_bucket_name(CuTest *tc) { printf("%s ok\n", __FUNCTION__); } +static void test_oss_is_valid_object_name(CuTest *tc) { + aos_string_t name; + aos_str_set(&name, ""); + CuAssertIntEquals(tc, 0, oss_is_valid_object_name(&name)); + + aos_str_null(&name); + CuAssertIntEquals(tc, 0, oss_is_valid_object_name(&name)); + + CuAssertIntEquals(tc, 0, oss_is_valid_object_name(NULL)); + + aos_str_set(&name, "?"); + CuAssertIntEquals(tc, 1, oss_is_valid_object_name(&name)); + + //ex + aos_str_set(&name, ""); + CuAssertIntEquals(tc, 0, oss_is_valid_object_name_ex(&name, 1)); + + aos_str_null(&name); + CuAssertIntEquals(tc, 0, oss_is_valid_object_name_ex(&name, 1)); + + CuAssertIntEquals(tc, 0, oss_is_valid_object_name_ex(&name, 1)); + + aos_str_set(&name, "?"); + CuAssertIntEquals(tc, 0, oss_is_valid_object_name_ex(&name, 1)); + + aos_str_set(&name, "?123"); + CuAssertIntEquals(tc, 0, oss_is_valid_object_name_ex(&name, 1)); + + + aos_str_set(&name, ""); + CuAssertIntEquals(tc, 0, oss_is_valid_object_name_ex(&name, 0)); + + aos_str_null(&name); + CuAssertIntEquals(tc, 0, oss_is_valid_object_name_ex(&name, 0)); + + CuAssertIntEquals(tc, 0, oss_is_valid_object_name_ex(&name, 0)); + + aos_str_set(&name, "?"); + CuAssertIntEquals(tc, 1, oss_is_valid_object_name_ex(&name, 0)); + + aos_str_set(&name, "?123"); + CuAssertIntEquals(tc, 1, oss_is_valid_object_name_ex(&name, 0)); + printf("%s ok\n", __FUNCTION__); +} + static void test_oss_preprocess_endpoint(CuTest *tc) { int i; aos_string_t name; @@ -1584,7 +1629,7 @@ static void test_oss_preprocess_endpoint(CuTest *tc) { "192.168.1.1" }; - for (i = 0; i < sizeof(endpoints) / sizeof(endpoints[0]); i++) { + for (i = 0; i < sizeof(endpoints) / sizeof(endpoints[0]); i++) { aos_str_set(&name, endpoints[i]); oss_preprocess_endpoint(&name); CuAssertIntEquals(tc, strlen("www.test.com"), name.len); @@ -1592,7 +1637,7 @@ static void test_oss_preprocess_endpoint(CuTest *tc) { } CuAssertIntEquals(tc, 6, i); - for (i = 0; i < sizeof(ip_endpoints) / sizeof(ip_endpoints[0]); i++) { + for (i = 0; i < sizeof(ip_endpoints) / sizeof(ip_endpoints[0]); i++) { aos_str_set(&name, ip_endpoints[i]); oss_preprocess_endpoint(&name); CuAssertIntEquals(tc, strlen("192.168.1.1:8080"), name.len); @@ -1600,7 +1645,7 @@ static void test_oss_preprocess_endpoint(CuTest *tc) { } CuAssertIntEquals(tc, 4, i); - for (i = 0; i < sizeof(ip_endpoints2) / sizeof(ip_endpoints2[0]); i++) { + for (i = 0; i < sizeof(ip_endpoints2) / sizeof(ip_endpoints2[0]); i++) { aos_str_set(&name, ip_endpoints2[i]); oss_preprocess_endpoint(&name); CuAssertIntEquals(tc, strlen("192.168.1.1"), name.len); @@ -1641,14 +1686,14 @@ static void test_oss_get_host_from_authority(CuTest *tc) { aos_pool_create(&p, NULL); option = oss_request_options_create(p); - for (i = 0; i < sizeof(authoritys) / sizeof(authoritys[0]); i++) { + for (i = 0; i < sizeof(authoritys) / sizeof(authoritys[0]); i++) { aos_str_set(&name, authoritys[i]); value = oss_get_host_from_authority(option, &name); CuAssertStrEquals(tc, value, "www.test.com"); } CuAssertIntEquals(tc, 4, i); - for (i = 0; i < sizeof(ip_authoritys) / sizeof(ip_authoritys[0]); i++) { + for (i = 0; i < sizeof(ip_authoritys) / sizeof(ip_authoritys[0]); i++) { aos_str_set(&name, ip_authoritys[i]); value = oss_get_host_from_authority(option, &name); CuAssertStrEquals(tc, value, "192.168.1.1"); @@ -1701,12 +1746,12 @@ static void test_oss_is_valid_host(CuTest *tc) { NULL }; - for (i = 0; i < sizeof(valid_host) / sizeof(valid_host[0]); i++) { + for (i = 0; i < sizeof(valid_host) / sizeof(valid_host[0]); i++) { CuAssertIntEquals(tc, 1, oss_is_valid_host(valid_host[i])); } CuAssertIntEquals(tc, 10, i); - for (i = 0; i < sizeof(invalid_host) / sizeof(invalid_host[0]); i++) { + for (i = 0; i < sizeof(invalid_host) / sizeof(invalid_host[0]); i++) { CuAssertIntEquals(tc, 0, oss_is_valid_host(invalid_host[i])); } CuAssertIntEquals(tc, 8, i); @@ -1787,6 +1832,7 @@ CuSuite *test_aos() SUITE_ADD_TEST(suite, test_oss_fill_read_response_header); SUITE_ADD_TEST(suite, test_oss_get_host_from_authority); SUITE_ADD_TEST(suite, test_oss_is_valid_host); + SUITE_ADD_TEST(suite, test_oss_is_valid_object_name); return suite; } diff --git a/oss_c_sdk_test/test_oss_object.c b/oss_c_sdk_test/test_oss_object.c index b619bc58..697a13ea 100644 --- a/oss_c_sdk_test/test_oss_object.c +++ b/oss_c_sdk_test/test_oss_object.c @@ -966,7 +966,7 @@ void test_get_object_acl_object_empty(CuTest *tc){ s = oss_get_object_acl(options, &bucket, &object, &oss_acl_str, &resp_headers); CuAssertIntEquals(tc, AOSE_INVALID_ARGUMENT, s->code); - CuAssertStrEquals(tc, AOS_EMPTY_STRING_ERROR, s->error_code); + CuAssertStrEquals(tc, AOS_OBJECT_NAME_INVALID_ERROR, s->error_code); aos_pool_destroy(p); @@ -989,7 +989,7 @@ void test_get_object_acl_object_null(CuTest *tc){ s = oss_get_object_acl(options, &bucket, NULL, &oss_acl_str, &resp_headers); CuAssertIntEquals(tc, AOSE_INVALID_ARGUMENT, s->code); - CuAssertStrEquals(tc, AOS_EMPTY_STRING_ERROR, s->error_code); + CuAssertStrEquals(tc, AOS_OBJECT_NAME_INVALID_ERROR, s->error_code); aos_pool_destroy(p); @@ -1068,7 +1068,7 @@ void test_put_object_acl_object_empty(CuTest *tc){ s = oss_put_object_acl(options, &bucket, &object, oss_acl, &resp_headers); CuAssertIntEquals(tc, AOSE_INVALID_ARGUMENT, s->code); - CuAssertStrEquals(tc, AOS_EMPTY_STRING_ERROR, s->error_code); + CuAssertStrEquals(tc, AOS_OBJECT_NAME_INVALID_ERROR, s->error_code); aos_pool_destroy(p); @@ -1091,7 +1091,7 @@ void test_put_object_acl_object_null(CuTest *tc){ s = oss_put_object_acl(options, &bucket, NULL, oss_acl, &resp_headers); CuAssertIntEquals(tc, AOSE_INVALID_ARGUMENT, s->code); - CuAssertStrEquals(tc, AOS_EMPTY_STRING_ERROR, s->error_code); + CuAssertStrEquals(tc, AOS_OBJECT_NAME_INVALID_ERROR, s->error_code); aos_pool_destroy(p); @@ -1539,6 +1539,7 @@ void test_append_object_from_file(CuTest *tc) s = oss_append_object_from_file(options, &bucket, &object, position, &append_file, headers, &resp_headers); CuAssertIntEquals(tc, 400, s->code); + printf("msg:%s\n", s->error_msg); aos_str_set(&bucket, TEST_BUCKET_NAME); aos_str_set(&append_file, ""); @@ -1665,7 +1666,13 @@ void test_object_invalid_parameter(CuTest *tc) char *invalid_name_list[] = { "a", "1", "!", "aa", "12", "a1", "a!", "1!", "aAa", "1A1", "a!a", "FengChao@123", "-a123", "a_123", "a123-", - "1234567890123456789012345678901234567890123456789012345678901234", "" + "1234567890123456789012345678901234567890123456789012345678901234", "", + NULL, + }; + + char* invalid_object_name_list[] = + { + "", NULL, }; aos_pool_create(&p, NULL); @@ -1678,7 +1685,15 @@ void test_object_invalid_parameter(CuTest *tc) aos_table_t *resp_headers = NULL; aos_table_t *headers = NULL; aos_table_t *params = NULL; - aos_str_set(&bucket, invalid_name_list[i]); + char* url = NULL; + + if (invalid_name_list[i] == NULL) { + aos_str_null(&bucket); + } + else { + aos_str_set(&bucket, invalid_name_list[i]); + } + headers = aos_table_make(p, 1); s = oss_put_object_from_buffer(options, &bucket, NULL, NULL, headers, &resp_headers); @@ -1729,7 +1744,7 @@ void test_object_invalid_parameter(CuTest *tc) CuAssertIntEquals(tc, AOSE_INVALID_ARGUMENT, s->code); CuAssertStrEquals(tc, AOS_BUCKET_NAME_INVALID_ERROR, s->error_code); - s = oss_copy_object(options, &bucket, NULL, NULL, NULL, headers, &resp_headers); + s = oss_copy_object(options, NULL, NULL, &bucket, NULL, headers, &resp_headers); CuAssertIntEquals(tc, AOSE_INVALID_ARGUMENT, s->code); CuAssertStrEquals(tc, AOS_BUCKET_NAME_INVALID_ERROR, s->error_code); @@ -1737,31 +1752,161 @@ void test_object_invalid_parameter(CuTest *tc) CuAssertIntEquals(tc, AOSE_INVALID_ARGUMENT, s->code); CuAssertStrEquals(tc, AOS_BUCKET_NAME_INVALID_ERROR, s->error_code); + s = oss_do_append_object_from_buffer(options, &bucket, NULL, 1024LL, 0, NULL, NULL, NULL, NULL, NULL, NULL); + CuAssertIntEquals(tc, AOSE_INVALID_ARGUMENT, s->code); + CuAssertStrEquals(tc, AOS_BUCKET_NAME_INVALID_ERROR, s->error_code); + s = oss_append_object_from_file(options, &bucket, NULL, 1024LL, NULL, headers, &resp_headers); CuAssertIntEquals(tc, AOSE_INVALID_ARGUMENT, s->code); CuAssertStrEquals(tc, AOS_BUCKET_NAME_INVALID_ERROR, s->error_code); -#if 0 - s = oss_put_object_from_buffer_by_url(options, &bucket, NULL, headers, &resp_headers); + + s = oss_do_append_object_from_file(options, &bucket, NULL, 1024LL, 0, NULL, NULL, NULL, NULL, NULL, NULL); + CuAssertIntEquals(tc, AOSE_INVALID_ARGUMENT, s->code); + CuAssertStrEquals(tc, AOS_BUCKET_NAME_INVALID_ERROR, s->error_code); + + s = oss_do_select_object_to_buffer(options, &bucket, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); CuAssertIntEquals(tc, AOSE_INVALID_ARGUMENT, s->code); CuAssertStrEquals(tc, AOS_BUCKET_NAME_INVALID_ERROR, s->error_code); - s = oss_put_object_from_file_by_url(options, &bucket, NULL, headers, &resp_headers); + s = oss_do_select_object_to_file(options, &bucket, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); CuAssertIntEquals(tc, AOSE_INVALID_ARGUMENT, s->code); CuAssertStrEquals(tc, AOS_BUCKET_NAME_INVALID_ERROR, s->error_code); - s = oss_get_object_to_buffer_by_url(options, &bucket, headers, params, NULL, &resp_headers); + s = oss_create_select_object_meta(options, &bucket, NULL, NULL, NULL); CuAssertIntEquals(tc, AOSE_INVALID_ARGUMENT, s->code); CuAssertStrEquals(tc, AOS_BUCKET_NAME_INVALID_ERROR, s->error_code); - s = oss_get_object_to_file_by_url(options, &bucket, headers, params, NULL, &resp_headers); + s = oss_put_object_tagging(options, &bucket, NULL, NULL, NULL); CuAssertIntEquals(tc, AOSE_INVALID_ARGUMENT, s->code); CuAssertStrEquals(tc, AOS_BUCKET_NAME_INVALID_ERROR, s->error_code); - s = oss_head_object_by_url(options, &bucket, headers, &resp_headers); + s = oss_get_object_tagging(options, &bucket, NULL, NULL, NULL); CuAssertIntEquals(tc, AOSE_INVALID_ARGUMENT, s->code); CuAssertStrEquals(tc, AOS_BUCKET_NAME_INVALID_ERROR, s->error_code); -#endif + + s = oss_delete_object_tagging(options, &bucket, NULL, NULL); + CuAssertIntEquals(tc, AOSE_INVALID_ARGUMENT, s->code); + CuAssertStrEquals(tc, AOS_BUCKET_NAME_INVALID_ERROR, s->error_code); + + url = oss_gen_signed_url(options, &bucket, NULL, 3600, NULL); + CuAssertPtrEquals(tc, NULL, url); + } + + + for (i = 0; i < sizeof(invalid_object_name_list) / sizeof(invalid_object_name_list[0]); i++) { + aos_string_t bucket; + aos_string_t object; + aos_status_t* s = NULL; + aos_table_t* resp_headers = NULL; + aos_table_t* headers = NULL; + aos_table_t* params = NULL; + char* url = NULL; + aos_str_set(&bucket, "bucket"); + if (invalid_object_name_list[i] != NULL) { + aos_str_set(&object, invalid_object_name_list[i]); + } + else { + aos_str_null(&object); + } + headers = aos_table_make(p, 1); + + s = oss_put_object_from_buffer(options, &bucket, &object, NULL, headers, &resp_headers); + CuAssertIntEquals(tc, AOSE_INVALID_ARGUMENT, s->code); + CuAssertStrEquals(tc, AOS_OBJECT_NAME_INVALID_ERROR, s->error_code); + + s = oss_put_object_from_file(options, &bucket, &object, NULL, headers, &resp_headers); + CuAssertIntEquals(tc, AOSE_INVALID_ARGUMENT, s->code); + CuAssertStrEquals(tc, AOS_OBJECT_NAME_INVALID_ERROR, s->error_code); + + s = oss_get_object_to_buffer(options, &bucket, &object, headers, params, NULL, &resp_headers); + CuAssertIntEquals(tc, AOSE_INVALID_ARGUMENT, s->code); + CuAssertStrEquals(tc, AOS_OBJECT_NAME_INVALID_ERROR, s->error_code); + + s = oss_restore_object(options, &bucket, &object, headers, &resp_headers); + CuAssertIntEquals(tc, AOSE_INVALID_ARGUMENT, s->code); + CuAssertStrEquals(tc, AOS_OBJECT_NAME_INVALID_ERROR, s->error_code); + + s = oss_get_object_to_file(options, &bucket, &object, headers, params, NULL, &resp_headers); + CuAssertIntEquals(tc, AOSE_INVALID_ARGUMENT, s->code); + CuAssertStrEquals(tc, AOS_OBJECT_NAME_INVALID_ERROR, s->error_code); + + s = oss_head_object(options, &bucket, &object, headers, &resp_headers); + CuAssertIntEquals(tc, AOSE_INVALID_ARGUMENT, s->code); + CuAssertStrEquals(tc, AOS_OBJECT_NAME_INVALID_ERROR, s->error_code); + + s = oss_get_object_meta(options, &bucket, &object, &resp_headers); + CuAssertIntEquals(tc, AOSE_INVALID_ARGUMENT, s->code); + CuAssertStrEquals(tc, AOS_OBJECT_NAME_INVALID_ERROR, s->error_code); + + s = oss_put_object_acl(options, &bucket, &object, OSS_ACL_DEFAULT, &resp_headers); + CuAssertIntEquals(tc, AOSE_INVALID_ARGUMENT, s->code); + CuAssertStrEquals(tc, AOS_OBJECT_NAME_INVALID_ERROR, s->error_code); + + s = oss_put_object_acl(options, &bucket, &object, OSS_ACL_DEFAULT, &resp_headers); + CuAssertIntEquals(tc, AOSE_INVALID_ARGUMENT, s->code); + CuAssertStrEquals(tc, AOS_OBJECT_NAME_INVALID_ERROR, s->error_code); + + s = oss_put_symlink(options, &bucket, &object, NULL, &resp_headers); + CuAssertIntEquals(tc, AOSE_INVALID_ARGUMENT, s->code); + CuAssertStrEquals(tc, AOS_OBJECT_NAME_INVALID_ERROR, s->error_code); + + s = oss_get_symlink(options, &bucket, &object, &resp_headers); + CuAssertIntEquals(tc, AOSE_INVALID_ARGUMENT, s->code); + CuAssertStrEquals(tc, AOS_OBJECT_NAME_INVALID_ERROR, s->error_code); + + s = oss_delete_object(options, &bucket, &object, &resp_headers); + CuAssertIntEquals(tc, AOSE_INVALID_ARGUMENT, s->code); + CuAssertStrEquals(tc, AOS_OBJECT_NAME_INVALID_ERROR, s->error_code); + + s = oss_copy_object(options, NULL, NULL, &bucket, &object, headers, &resp_headers); + CuAssertIntEquals(tc, AOSE_INVALID_ARGUMENT, s->code); + CuAssertStrEquals(tc, AOS_OBJECT_NAME_INVALID_ERROR, s->error_code); + + s = oss_append_object_from_buffer(options, &bucket, &object, 1024LL, NULL, headers, &resp_headers); + CuAssertIntEquals(tc, AOSE_INVALID_ARGUMENT, s->code); + CuAssertStrEquals(tc, AOS_OBJECT_NAME_INVALID_ERROR, s->error_code); + + s = oss_do_append_object_from_buffer(options, &bucket, &object, 1024LL, 0, NULL, NULL, NULL, NULL, NULL, NULL); + CuAssertIntEquals(tc, AOSE_INVALID_ARGUMENT, s->code); + CuAssertStrEquals(tc, AOS_OBJECT_NAME_INVALID_ERROR, s->error_code); + + s = oss_append_object_from_file(options, &bucket, &object, 1024LL, NULL, headers, &resp_headers); + CuAssertIntEquals(tc, AOSE_INVALID_ARGUMENT, s->code); + CuAssertStrEquals(tc, AOS_OBJECT_NAME_INVALID_ERROR, s->error_code); + + s = oss_do_append_object_from_file(options, &bucket, &object, 1024LL, 0, NULL, NULL, NULL, NULL, NULL, NULL); + CuAssertIntEquals(tc, AOSE_INVALID_ARGUMENT, s->code); + CuAssertStrEquals(tc, AOS_OBJECT_NAME_INVALID_ERROR, s->error_code); + + s = oss_do_select_object_to_buffer(options, &bucket, &object, NULL, NULL, NULL, NULL, NULL, NULL, NULL); + CuAssertIntEquals(tc, AOSE_INVALID_ARGUMENT, s->code); + CuAssertStrEquals(tc, AOS_OBJECT_NAME_INVALID_ERROR, s->error_code); + + s = oss_do_select_object_to_file(options, &bucket, &object, NULL, NULL, NULL, NULL, NULL, NULL, NULL); + CuAssertIntEquals(tc, AOSE_INVALID_ARGUMENT, s->code); + CuAssertStrEquals(tc, AOS_OBJECT_NAME_INVALID_ERROR, s->error_code); + + s = oss_create_select_object_meta(options, &bucket, &object, NULL, NULL); + CuAssertIntEquals(tc, AOSE_INVALID_ARGUMENT, s->code); + CuAssertStrEquals(tc, AOS_OBJECT_NAME_INVALID_ERROR, s->error_code); + + s = oss_put_object_tagging(options, &bucket, &object, NULL, NULL); + CuAssertIntEquals(tc, AOSE_INVALID_ARGUMENT, s->code); + CuAssertStrEquals(tc, AOS_OBJECT_NAME_INVALID_ERROR, s->error_code); + + s = oss_get_object_tagging(options, &bucket, &object, NULL, NULL); + CuAssertIntEquals(tc, AOSE_INVALID_ARGUMENT, s->code); + CuAssertStrEquals(tc, AOS_OBJECT_NAME_INVALID_ERROR, s->error_code); + + s = oss_delete_object_tagging(options, &bucket, &object, NULL); + CuAssertIntEquals(tc, AOSE_INVALID_ARGUMENT, s->code); + CuAssertStrEquals(tc, AOS_OBJECT_NAME_INVALID_ERROR, s->error_code); + + url = oss_gen_signed_url(options, &bucket, &object, 3600, NULL); + CuAssertPtrEquals(tc, NULL, url); } + + aos_pool_destroy(p); printf("test_object_invalid_parameter ok\n"); @@ -1900,6 +2045,51 @@ void test_object_with_invalid_endpoint(CuTest *tc) } +void test_object_verify_strict(CuTest* tc) +{ + aos_pool_t* p = NULL; + oss_request_options_t* options = NULL; + aos_pool_create(&p, NULL); + options = oss_request_options_create(p); + init_test_request_options(options, 0); + aos_string_t bucket; + aos_string_t object; + char* url; + aos_http_request_t* request; + // create request + + request = aos_http_request_create(p); + request->method = HTTP_PUT; + + aos_str_set(&bucket, "bucket"); + aos_str_set(&object, "?123"); + url = oss_gen_signed_url(options, &bucket, &object, 3600, request); + CuAssertPtrEquals(tc, NULL, url); + + aos_str_set(&object, "?"); + url = oss_gen_signed_url(options, &bucket, &object, 3600, request); + CuAssertPtrEquals(tc, NULL, url); + + aos_str_set(&object, "123?123"); + url = oss_gen_signed_url(options, &bucket, &object, 3600, request); + CuAssertPtrNotNull(tc, url); + + options = oss_request_options_create(p); + init_test_request_options(options, 0); + options->ctl->options->verify_object_strict = AOS_FALSE; + aos_str_set(&object, "?123"); + url = oss_gen_signed_url(options, &bucket, &object, 3600, request); + CuAssertPtrNotNull(tc, url); + + aos_str_set(&object, "?"); + url = oss_gen_signed_url(options, &bucket, &object, 3600, request); + CuAssertPtrNotNull(tc, url); + + aos_pool_destroy(p); + + printf("test_object_verify_strict ok\n"); +} + CuSuite *test_oss_object() { @@ -1945,6 +2135,7 @@ CuSuite *test_oss_object() SUITE_ADD_TEST(suite, test_get_object_to_buffer_with_maxbuffersize); SUITE_ADD_TEST(suite, test_get_object_to_buffer_use_invalid_sts); SUITE_ADD_TEST(suite, test_object_with_invalid_endpoint); + SUITE_ADD_TEST(suite, test_object_verify_strict); SUITE_ADD_TEST(suite, test_object_cleanup); return suite;