C API: nix_store_open, check for empty strings

This commit is contained in:
José Luis Lafuente 2024-01-11 22:41:57 +01:00 committed by José Luis Lafuente
parent 535694122e
commit d5ec1d0617
No known key found for this signature in database
GPG key ID: 8A3455EBE455489A
2 changed files with 35 additions and 11 deletions

View file

@ -33,19 +33,19 @@ Store * nix_store_open(nix_c_context * context, const char * uri, const char ***
if (context)
context->last_err_code = NIX_OK;
try {
if (!uri) {
return new Store{nix::openStore()};
} else {
std::string uri_str = uri;
if (!params)
return new Store{nix::openStore(uri_str)};
std::string uri_str = uri ? uri : "";
nix::Store::Params params_map;
for (size_t i = 0; params[i] != nullptr; i++) {
params_map[params[i][0]] = params[i][1];
}
return new Store{nix::openStore(uri_str, params_map)};
if (uri_str.empty())
return new Store{nix::openStore()};
if (!params)
return new Store{nix::openStore(uri_str)};
nix::Store::Params params_map;
for (size_t i = 0; params[i] != nullptr; i++) {
params_map[params[i][0]] = params[i][1];
}
return new Store{nix::openStore(uri_str, params_map)};
}
NIXC_CATCH_ERRS_NULL
}

View file

@ -58,4 +58,28 @@ TEST_F(nix_api_store_test, get_version)
ASSERT_STREQ(PACKAGE_VERSION, value);
}
TEST_F(nix_api_util_context, nix_store_open_dummy)
{
nix_libstore_init(ctx);
Store * store = nix_store_open(ctx, "dummy://", nullptr);
ASSERT_EQ(NIX_OK, ctx->last_err_code);
ASSERT_STREQ("dummy", store->ptr->getUri().c_str());
nix_store_unref(store);
}
TEST_F(nix_api_util_context, nix_store_open_invalid)
{
nix_libstore_init(ctx);
Store * store = nix_store_open(ctx, "invalid://", nullptr);
ASSERT_EQ(NIX_ERR_NIX_ERROR, ctx->last_err_code);
ASSERT_EQ(nullptr, store);
nix_store_unref(store);
}
TEST_F(nix_api_store_test, nix_store_is_valid_path_not_in_store)
{
StorePath * path = nix_store_parse_path(ctx, store, validPath);
ASSERT_EQ(false, nix_store_is_valid_path(ctx, store, path));
}
}