nostrdb: Fix issue where id tag filters are pushed as strings

When creating filters, sometimes IDs are pushed as strings, so if there
is ever a 0 byte, the id prematurely ends, causing the filter to not
match

Fixes: https://github.com/rust-nostr/nostr/issues/454
Signed-off-by: William Casarin <jb55@jb55.com>
This commit is contained in:
William Casarin
2024-08-01 16:55:22 -07:00
committed by Daniel D’Aquino
parent 2d02a17af6
commit 8dd048681b

View File

@@ -784,8 +784,18 @@ static int ndb_filter_add_element(struct ndb_filter *filter, union ndb_filter_el
offset = el.integer;
break;
case NDB_FILTER_TAGS:
if (!cursor_push_c_str(&filter->data_buf, el.string))
switch (current->field.elem_type) {
case NDB_ELEMENT_ID:
if (!cursor_push(&filter->data_buf, (unsigned char *)el.id, 32))
return 0;
break;
case NDB_ELEMENT_STRING:
if (!cursor_push_c_str(&filter->data_buf, el.string))
return 0;
break;
case NDB_ELEMENT_UNKNOWN:
return 0;
}
// push a pointer of the string in the databuf as an element
break;
}