From: Vsevolod Stakhov Date: Mon, 24 Oct 2022 16:53:10 +0000 (+0100) Subject: [Project] Allow offsets in the hyperscan cache X-Git-Tag: 3.4~21 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=ac82ae305135c1f5d760d522d66ce47c5ccd9cf4;p=rspamd.git [Project] Allow offsets in the hyperscan cache --- diff --git a/src/libserver/hyperscan_tools.cxx b/src/libserver/hyperscan_tools.cxx index 89cc4e23b..8e7fe6083 100644 --- a/src/libserver/hyperscan_tools.cxx +++ b/src/libserver/hyperscan_tools.cxx @@ -273,7 +273,7 @@ auto load_cached_hs_file(const char *fname, std::int64_t offset = 0) -> tl::expe auto &hs_cache = hs_known_files_cache::get(); const auto *log_func = RSPAMD_LOG_FUNC; - return raii_mmaped_file::mmap_shared(fname, O_RDONLY, PROT_READ) + return raii_mmaped_file::mmap_shared(fname, O_RDONLY, PROT_READ, offset) .and_then([&](T &&cached_serialized) -> tl::expected { #if defined(HS_MAJOR) && defined(HS_MINOR) && HS_MAJOR >= 5 && HS_MINOR >= 4 auto unserialized_fname = fmt::format("{}.unser", fname); @@ -392,9 +392,9 @@ auto load_cached_hs_file(const char *fname, std::int64_t offset = 0) -> tl::expe #define C_DB_FROM_CXX(obj) (reinterpret_cast(obj)) rspamd_hyperscan_t * -rspamd_hyperscan_maybe_load(const char *filename) +rspamd_hyperscan_maybe_load(const char *filename, goffset offset) { - auto maybe_db = rspamd::util::load_cached_hs_file(filename); + auto maybe_db = rspamd::util::load_cached_hs_file(filename, offset); if (maybe_db.has_value()) { auto *ndb = new rspamd::util::hs_shared_database; diff --git a/src/libserver/hyperscan_tools.h b/src/libserver/hyperscan_tools.h index 5d50e07ec..e66e2ec91 100644 --- a/src/libserver/hyperscan_tools.h +++ b/src/libserver/hyperscan_tools.h @@ -34,7 +34,7 @@ typedef struct rspamd_hyperscan_s rspamd_hyperscan_t; * @param filename * @return cached database if available */ -rspamd_hyperscan_t *rspamd_hyperscan_maybe_load(const char *filename); +rspamd_hyperscan_t *rspamd_hyperscan_maybe_load(const char *filename, goffset offset); /** * Creates a wrapper for a raw hs db. Ownership is transferred to the enclosing object returned diff --git a/src/libserver/maps/map_helpers.c b/src/libserver/maps/map_helpers.c index 8850d052c..9e649414a 100644 --- a/src/libserver/maps/map_helpers.c +++ b/src/libserver/maps/map_helpers.c @@ -1073,7 +1073,7 @@ rspamd_try_load_re_map_cache (struct rspamd_regexp_map_helper *re_map) map->cfg->hs_cache_dir, (gint)rspamd_cryptobox_HASHBYTES / 2, re_map->re_digest); - re_map->hs_db = rspamd_hyperscan_maybe_load(fp); + re_map->hs_db = rspamd_hyperscan_maybe_load(fp, 0); return re_map->hs_db != NULL; } diff --git a/src/libutil/multipattern.c b/src/libutil/multipattern.c index dd9a37cec..489ac1beb 100644 --- a/src/libutil/multipattern.c +++ b/src/libutil/multipattern.c @@ -408,7 +408,7 @@ rspamd_multipattern_try_load_hs (struct rspamd_multipattern *mp, rspamd_snprintf (fp, sizeof (fp), "%s/%*xs.hsmp", hs_cache_dir, (gint)rspamd_cryptobox_HASHBYTES / 2, hash); - mp->hs_db = rspamd_hyperscan_maybe_load(fp); + mp->hs_db = rspamd_hyperscan_maybe_load(fp, 0); return mp->hs_db != NULL; }