nostrdb: filters: copy filter metadata into subscription

This fixes a few ownership issues

Signed-off-by: William Casarin <jb55@jb55.com>
This commit is contained in:
William Casarin
2024-02-07 13:55:57 -08:00
committed by Daniel D’Aquino
parent 62625c6ff3
commit 1b77b4f0e0

View File

@@ -178,7 +178,7 @@ struct ndb_ingester {
}; };
struct ndb_filter_group { struct ndb_filter_group {
struct ndb_filter *filters[MAX_FILTERS]; struct ndb_filter filters[MAX_FILTERS];
int num_filters; int num_filters;
}; };
@@ -973,7 +973,7 @@ static int ndb_filter_group_add(struct ndb_filter_group *group,
if (group->num_filters + 1 > MAX_FILTERS) if (group->num_filters + 1 > MAX_FILTERS)
return 0; return 0;
group->filters[group->num_filters++] = filter; memcpy(&group->filters[group->num_filters++], filter, sizeof(*filter));
return 1; return 1;
} }
@@ -987,7 +987,7 @@ static int ndb_filter_group_matches(struct ndb_filter_group *group,
return 1; return 1;
for (i = 0; i < group->num_filters; i++) { for (i = 0; i < group->num_filters; i++) {
filter = group->filters[i]; filter = &group->filters[i];
if (ndb_filter_matches(filter, note)) if (ndb_filter_matches(filter, note))
return 1; return 1;
@@ -3975,7 +3975,7 @@ void ndb_filter_group_destroy(struct ndb_filter_group *group)
struct ndb_filter *filter; struct ndb_filter *filter;
int i; int i;
for (i = 0; i < group->num_filters; i++) { for (i = 0; i < group->num_filters; i++) {
filter = group->filters[i]; filter = &group->filters[i];
ndb_filter_destroy(filter); ndb_filter_destroy(filter);
} }
} }
@@ -5663,10 +5663,8 @@ uint64_t ndb_subscribe(struct ndb *ndb, struct ndb_filter *filters, int num_filt
sub->subid = subid; sub->subid = subid;
ndb_filter_group_init(&sub->group); ndb_filter_group_init(&sub->group);
for (index = 0; index < num_filters; index++) { if (!ndb_filter_group_add_filters(&sub->group, filters, num_filters))
if (!ndb_filter_group_add(&sub->group, &filters[index])) return 0;
return 0;
}
// 500k ought to be enough for anyone // 500k ought to be enough for anyone
buflen = sizeof(uint64_t) * 65536; buflen = sizeof(uint64_t) * 65536;