Fix binary tag value handling for e/p tags across database layer
Some checks failed
Go / build-and-release (push) Has been cancelled

- Update nostr library to v1.0.3 with improved binary tag support
- Replace tag.Value() calls with tag.ValueHex() to handle both binary and hex formats
- Add NormalizeTagValueForHash() for consistent filter tag normalization
- Update QueryPTagGraph to handle binary-encoded and hex-encoded pubkeys
- Fix tag matching in query-events.go using TagValuesMatchUsingTagMethods
- Add filter_utils.go with tag normalization helper functions
- Update delete operations in process-delete.go and neo4j/delete.go
- Fix ACL follows extraction to use ValueHex() for consistent decoding
- Add binary_tag_filter_test.go for testing tag value normalization
- Bump version to v0.30.3
This commit is contained in:
2025-11-26 21:16:46 +00:00
parent fad39ec201
commit 1810c8bef3
14 changed files with 801 additions and 63 deletions

View File

@@ -281,12 +281,14 @@ func (d *D) QueryEventsWithOptions(c context.Context, f *filter.F, includeDelete
// For replaceable events, we need to check if there are any
// e-tags that reference events with the same kind and pubkey
for _, eTag := range eTags {
if len(eTag.Value()) != 64 {
// Use ValueHex() to handle both binary and hex storage formats
eTagHex := eTag.ValueHex()
if len(eTagHex) != 64 {
continue
}
// Get the event ID from the e-tag
evId := make([]byte, sha256.Size)
if _, err = hex.DecBytes(evId, eTag.Value()); err != nil {
if _, err = hex.DecBytes(evId, eTagHex); err != nil {
continue
}
@@ -363,10 +365,10 @@ func (d *D) QueryEventsWithOptions(c context.Context, f *filter.F, includeDelete
eventTag.Key(), actualKey,
) {
// Check if the event's tag value matches any of the filter's values
// Using TagValuesMatchUsingTagMethods handles binary/hex conversion
// for e/p tags automatically
for _, filterValue := range filterTag.T[1:] {
if bytes.Equal(
eventTag.Value(), filterValue,
) {
if TagValuesMatchUsingTagMethods(eventTag, filterValue) {
eventHasTag = true
break
}