index 51bbc6a..2a60fc7 100644 (file)
@@ -172,20 +172,6 @@ if (Ustrncmp(name, "partial", 7) == 0)
/* Now we are left with a lookup name, possibly followed by * or *@,
and then by options starting with a "," */

-#ifdef old
-len = Ustrlen(ss);
-if (len >= 2 && Ustrncmp(ss + len - 2, "*@", 2) == 0)
-  {
-  *starflags |= SEARCH_STARAT;
-  len -= 2;
-  }
-else if (len >= 1 && ss[len-1]  == '*')
-  {
-  *starflags |= SEARCH_STAR;
-  len--;
-  }
-#endif
-
len = Ustrlen(ss);
if ((t = Ustrchr(ss, '*')))
{
@@ -195,7 +181,14 @@ if ((t = Ustrchr(ss, '*')))
else
t = ss;

-* USS opts = (t = Ustrchr(t, ',')) ? string_copy(t+1) : NULL;
+if ((t = Ustrchr(t, ',')))
+  {
+  int l = t - ss;
+  if (l < len) len = l;
+  *opts = string_copy(t+1);
+  }
+else
+  * opts = NULL;

/* Check for the individual search type. Only those that are actually in the
binary are valid. For query-style types, "partial" and default types are
@@ -513,6 +506,7 @@ file. No need to check c->item_cache for NULL, tree_search will do so. */

if (  (t = tree_search(c->item_cache, keystring))
&& (!(e = t->data.ptr)->expiry || e->expiry > time(NULL))
+   && (!opts && !e->opts  ||  opts && e->opts && Ustrcmp(opts, e->opts) == 0)
)
{ /* Data was in the cache already; set the pointer from the tree node */
data = e->data.ptr;
@@ -527,7 +521,8 @@ else

DEBUG(D_lookup)
{
-    if (t) debug_printf_indent("cached data found but past valid time; ");
+    if (t)
+      debug_printf_indent("cached data found but either wrong opts or dated; ");
debug_printf_indent("%s lookup required for %s%s%s\n",
filename ? US"file" : US"database",
keystring,
@@ -555,12 +550,14 @@ else
if (t)     /* Previous, out-of-date cache entry.  Update with the */
{        /* new result and forget the old one */
e->expiry = do_cache == UINT_MAX ? 0 : time(NULL)+do_cache;
+      e->opts = opts;
e->data.ptr = data;
}
else
{
e = store_get(sizeof(expiring_data) + sizeof(tree_node) + len, is_tainted(keystring));
e->expiry = do_cache == UINT_MAX ? 0 : time(NULL)+do_cache;
+      e->opts = opts;
e->data.ptr = data;
t = (tree_node *)(e+1);
memcpy(t->name, keystring, len);
{"ft_lang_label":"__label__en","ft_lang_prob":0.5370621,"math_prob":0.8851657,"size":1761,"snap":"2021-21-2021-25","text_gpt3_token_len":551,"char_repetition_ratio":0.09732498,"word_repetition_ratio":0.08306709,"special_character_ratio":0.40318,"punctuation_ratio":0.19461077,"nsfw_num_words":0,"has_unicode_error":false,"math_prob_llama3":0.98152417,"pos_list":[0],"im_url_duplicate_count":[null],"WARC_HEADER":"{\"WARC-Type\":\"response\",\"WARC-Date\":\"2021-05-11T00:25:11Z\",\"WARC-Record-ID\":\"<urn:uuid:53dc93b4-6535-494c-9c67-e5acafbe36ff>\",\"Content-Length\":\"15110\",\"Content-Type\":\"application/http; msgtype=response\",\"WARC-Warcinfo-ID\":\"<urn:uuid:5e657eba-27fa-437a-9fa2-fc03b3fe7d82>\",\"WARC-Concurrent-To\":\"<urn:uuid:706aa094-fb01-4655-bc23-d8601e6595b2>\",\"WARC-IP-Address\":\"209.51.188.160\",\"WARC-Target-URI\":\"https://vcs.fsf.org/?p=exim.git;a=blobdiff;f=src/src/search.c;h=2a60fc78a046c6702179df3840ed038ccdcdd3e4;hp=51bbc6aed12eabe33a016caa4826318d3a39c911;hb=a5dc727afcc92deab722a84ae5cf3d00ae74c5f6;hpb=67a57a5afd313490a8763d60ec4df857b9cf239b\",\"WARC-Payload-Digest\":\"sha1:DEQH243PSSV7RXWNIY5TLVBD72VGALQJ\",\"WARC-Block-Digest\":\"sha1:5ZRBJSC27CFTZAXQP27C2NAKUY6ZEZVI\",\"WARC-Identified-Payload-Type\":\"application/xhtml+xml\",\"warc_filename\":\"/cc_download/warc_2021/CC-MAIN-2021-21/CC-MAIN-2021-21_segments_1620243991553.4_warc_CC-MAIN-20210510235021-20210511025021-00357.warc.gz\"}"}