|
|
|
|
@ -326,7 +326,10 @@ static struct store_upload* store_upload_find(struct mf_storage* s, uint64_t gro
|
|
|
|
|
static int store_begin(struct mf_storage* s, uint64_t group, uint64_t peer, const char* path, const struct mf_message* q) { |
|
|
|
|
if (q->size > INT64_MAX || mf_zero(q->upload, 16)) return MF_INVALID_RANGE; |
|
|
|
|
if (!strncmp(q->path, "avatars/", 8)) { |
|
|
|
|
if (!mf_avatar_file_valid(q->path + 8) || !q->size || q->size > MF_AVATAR_MAX_BYTES) return MF_INVALID_RANGE; |
|
|
|
|
if (!q->size || q->size > mf_avatar_file_limit(q->path + 8)) { |
|
|
|
|
DEBUG_WARN(DEBUG_CATEGORY_MEDIA, "avatar: invalid object path=%s bytes=%llu", q->path, (unsigned long long)q->size); |
|
|
|
|
return MF_INVALID_RANGE; |
|
|
|
|
} |
|
|
|
|
if (!mf_zero(q->version, 16)) return MF_EXISTS; |
|
|
|
|
char hash[65]; for (unsigned i = 0; i < 32; i++) snprintf(hash + i * 2, 3, "%02x", q->hash[i]); |
|
|
|
|
if (strncmp(q->path + 8, hash, 64)) return MF_HASH_MISMATCH; |
|
|
|
|
|