From d5ec1d0617a9b2b463fec2fee548945c5c6987ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Luis=20Lafuente?= Date: Thu, 11 Jan 2024 22:41:57 +0100 Subject: [PATCH] C API: nix_store_open, check for empty strings --- src/libstore/c/nix_api_store.cc | 22 +++++++++++----------- tests/unit/libstore/nix_api_store.cc | 24 ++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 11 deletions(-) diff --git a/src/libstore/c/nix_api_store.cc b/src/libstore/c/nix_api_store.cc index 4aff815ff..6586d4a1b 100644 --- a/src/libstore/c/nix_api_store.cc +++ b/src/libstore/c/nix_api_store.cc @@ -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 } diff --git a/tests/unit/libstore/nix_api_store.cc b/tests/unit/libstore/nix_api_store.cc index 764cd0d88..bbf850291 100644 --- a/tests/unit/libstore/nix_api_store.cc +++ b/tests/unit/libstore/nix_api_store.cc @@ -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)); +} + }