fix: reject dangling file attachment links
This commit is contained in:
@@ -5135,16 +5135,27 @@ func (a *adapter) FileLinkAttachments(topic string, userId, msgId t.Uid, fids []
|
|||||||
}
|
}
|
||||||
dids = append(dids, store.DecodeUid(id))
|
dids = append(dids, store.DecodeUid(id))
|
||||||
}
|
}
|
||||||
|
var existing int
|
||||||
|
query, queryArgs, err := sqlx.In("SELECT COUNT(*) FROM im_fileuploads WHERE id IN (?) AND status=?", dids, t.UploadCompleted)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
ctx, cancel := a.getContextForTx()
|
||||||
|
if cancel != nil {
|
||||||
|
defer cancel()
|
||||||
|
}
|
||||||
|
if err = a.db.GetContext(ctx, &existing, a.db.Rebind(query), queryArgs...); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if existing != len(dids) {
|
||||||
|
return t.ErrNotFound
|
||||||
|
}
|
||||||
|
|
||||||
for _, id := range dids {
|
for _, id := range dids {
|
||||||
// createdat,fileid,[msgid|topic|userid]
|
// createdat,fileid,[msgid|topic|userid]
|
||||||
args = append(args, now, id, linkId)
|
args = append(args, now, id, linkId)
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx, cancel := a.getContextForTx()
|
|
||||||
if cancel != nil {
|
|
||||||
defer cancel()
|
|
||||||
}
|
|
||||||
tx, err := a.db.BeginTxx(ctx, nil)
|
tx, err := a.db.BeginTxx(ctx, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
|||||||
@@ -7801,17 +7801,31 @@ func (a *adapter) TenantFileLinkAttachments(id t.TenantID, topic string, userID,
|
|||||||
fids = fids[:1]
|
fids = fids[:1]
|
||||||
}
|
}
|
||||||
var args []any
|
var args []any
|
||||||
|
var dids []any
|
||||||
for _, fid := range fids {
|
for _, fid := range fids {
|
||||||
fileID := t.ParseUid(fid)
|
fileID := t.ParseUid(fid)
|
||||||
if fileID.IsZero() {
|
if fileID.IsZero() {
|
||||||
return t.ErrMalformed
|
return t.ErrMalformed
|
||||||
}
|
}
|
||||||
args = append(args, id, now, decodeUID(fileID), linkID)
|
decoded := decodeUID(fileID)
|
||||||
|
dids = append(dids, decoded)
|
||||||
|
args = append(args, id, now, decoded, linkID)
|
||||||
}
|
}
|
||||||
ctx, cancel := a.getContextForTx()
|
ctx, cancel := a.getContextForTx()
|
||||||
if cancel != nil {
|
if cancel != nil {
|
||||||
defer cancel()
|
defer cancel()
|
||||||
}
|
}
|
||||||
|
var existing int
|
||||||
|
query, queryArgs, err := sqlx.In("SELECT COUNT(*) FROM im_fileuploads WHERE tenant_id=? AND id IN (?) AND status=?", id, dids, t.UploadCompleted)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err = a.db.GetContext(ctx, &existing, a.db.Rebind(query), queryArgs...); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if existing != len(dids) {
|
||||||
|
return t.ErrNotFound
|
||||||
|
}
|
||||||
tx, err := a.db.BeginTxx(ctx, nil)
|
tx, err := a.db.BeginTxx(ctx, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
|||||||
Reference in New Issue
Block a user