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 *filters[MAX_FILTERS];
struct ndb_filter filters[MAX_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)
return 0;
group->filters[group->num_filters++] = filter;
memcpy(&group->filters[group->num_filters++], filter, sizeof(*filter));
return 1;
}
@@ -987,7 +987,7 @@ static int ndb_filter_group_matches(struct ndb_filter_group *group,
return 1;
for (i = 0; i < group->num_filters; i++) {
filter = group->filters[i];
filter = &group->filters[i];
if (ndb_filter_matches(filter, note))
return 1;
@@ -3975,7 +3975,7 @@ void ndb_filter_group_destroy(struct ndb_filter_group *group)
struct ndb_filter *filter;
int i;
for (i = 0; i < group->num_filters; i++) {
filter = group->filters[i];
filter = &group->filters[i];
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;
ndb_filter_group_init(&sub->group);
for (index = 0; index < num_filters; index++) {
if (!ndb_filter_group_add(&sub->group, &filters[index]))
return 0;
}
if (!ndb_filter_group_add_filters(&sub->group, filters, num_filters))
return 0;
// 500k ought to be enough for anyone
buflen = sizeof(uint64_t) * 65536;