From d1dda93abd36b5e6fefaf74647c79f7ca239cb9e Mon Sep 17 00:00:00 2001 From: Alice39s Date: Sun, 28 Jun 2026 05:10:04 +0900 Subject: [PATCH] fix(erlang): guard xdb:search against unconfigured pool --- binding/erlang/src/xdb.erl | 25 +++++++++++++++---------- binding/erlang/test/xdb_test.erl | 8 ++++++++ 2 files changed, 23 insertions(+), 10 deletions(-) diff --git a/binding/erlang/src/xdb.erl b/binding/erlang/src/xdb.erl index fa2ff83..66b1c0d 100644 --- a/binding/erlang/src/xdb.erl +++ b/binding/erlang/src/xdb.erl @@ -29,15 +29,20 @@ do_search(PoolName, Version, IpBin) -> case ets:lookup(CacheTable, IpBin) of [{_, Region}] -> Region; _ -> - Worker = poolboy:checkout(PoolName, true, infinity), - try - case ip2region_worker:search(Worker, IpBin) of - {error, _} = Err -> Err; - Region -> - ets:insert(CacheTable, {IpBin, Region}), - Region - end - after - poolboy:checkin(PoolName, Worker) + case whereis(PoolName) of + undefined -> + {error, pool_not_configured}; + _ -> + Worker = poolboy:checkout(PoolName, true, infinity), + try + case ip2region_worker:search(Worker, IpBin) of + {error, _} = Err -> Err; + Region -> + ets:insert(CacheTable, {IpBin, Region}), + Region + end + after + poolboy:checkin(PoolName, Worker) + end end end. diff --git a/binding/erlang/test/xdb_test.erl b/binding/erlang/test/xdb_test.erl index a725709..aea2439 100644 --- a/binding/erlang/test/xdb_test.erl +++ b/binding/erlang/test/xdb_test.erl @@ -34,6 +34,14 @@ invalid_search_test_() -> ?_assertEqual({error, bad_ip_format}, xdb:search({1,2,3})) ]. +ipv6_pool_not_configured_test() -> + try application:stop(ip2region) catch _:_ -> ok end, + try application:unload(ip2region) catch _:_ -> ok end, + ok = application:load(ip2region), + ok = application:set_env(ip2region, db, [{ipv4, "ip2region.xdb"}]), + {ok, _} = application:ensure_all_started(ip2region), + ?assertEqual({error, pool_not_configured}, xdb:search("2001:4860:4860::8888")). + setup_ipv6() -> try application:stop(ip2region) catch _:_ -> ok end, try application:unload(ip2region) catch _:_ -> ok end,