diff --git a/Telegram/SourceFiles/core/mime_type.cpp b/Telegram/SourceFiles/core/mime_type.cpp index 3fb80ab6a..82ecc1d9c 100644 --- a/Telegram/SourceFiles/core/mime_type.cpp +++ b/Telegram/SourceFiles/core/mime_type.cpp @@ -102,9 +102,13 @@ MimeType MimeTypeForData(const QByteArray &data) { return MimeType(QMimeDatabase().mimeTypeForData(data)); } +bool IsMimeStickerAnimated(const QString &mime) { + return mime == qsl("application/x-tgsticker"); +} + bool IsMimeSticker(const QString &mime) { return mime == qsl("image/webp") - || mime == qsl("application/x-tgsticker"); + || IsMimeStickerAnimated(mime); } } // namespace Core diff --git a/Telegram/SourceFiles/core/mime_type.h b/Telegram/SourceFiles/core/mime_type.h index 25d30d2b1..1adff6aea 100644 --- a/Telegram/SourceFiles/core/mime_type.h +++ b/Telegram/SourceFiles/core/mime_type.h @@ -39,6 +39,7 @@ MimeType MimeTypeForName(const QString &mime); MimeType MimeTypeForFile(const QFileInfo &file); MimeType MimeTypeForData(const QByteArray &data); +bool IsMimeStickerAnimated(const QString &mime); bool IsMimeSticker(const QString &mime); } // namespace Core diff --git a/Telegram/SourceFiles/data/data_document.cpp b/Telegram/SourceFiles/data/data_document.cpp index c8b8156e4..995139c2e 100644 --- a/Telegram/SourceFiles/data/data_document.cpp +++ b/Telegram/SourceFiles/data/data_document.cpp @@ -573,8 +573,11 @@ void DocumentData::setattributes( }); } if (type == StickerDocument - && (!GoodStickerDimensions(dimensions.width(), dimensions.height()) - || (size > Storage::kMaxStickerBytesSize))) { + && ((size > Storage::kMaxStickerBytesSize) + || (!sticker()->animated + && !GoodStickerDimensions( + dimensions.width(), + dimensions.height())))) { type = FileDocument; _additional = nullptr; } diff --git a/Telegram/SourceFiles/mtproto/details/mtproto_tls_socket.cpp b/Telegram/SourceFiles/mtproto/details/mtproto_tls_socket.cpp index 55e6e1d0c..b8cb2bb12 100644 --- a/Telegram/SourceFiles/mtproto/details/mtproto_tls_socket.cpp +++ b/Telegram/SourceFiles/mtproto/details/mtproto_tls_socket.cpp @@ -82,12 +82,12 @@ using BigNumContext = openssl::Context; Z(32); S(qstr("\x20")); R(32); - S(qstr("\x00\x22")); + S(qstr("\x00\x20")); G(0); S(qstr("" "\x13\x01\x13\x02\x13\x03\xc0\x2b\xc0\x2f\xc0\x2c\xc0\x30\xcc\xa9" - "\xcc\xa8\xc0\x13\xc0\x14\x00\x9c\x00\x9d\x00\x2f\x00\x35\x00\x0a" - "\x01\x00\x01\x91")); + "\xcc\xa8\xc0\x13\xc0\x14\x00\x9c\x00\x9d\x00\x2f\x00\x35\x01\x00" + "\x01\x93")); G(2); S(qstr("\x00\x00\x00\x00")); Open(); @@ -103,9 +103,9 @@ using BigNumContext = openssl::Context; S(qstr("" "\x00\x1d\x00\x17\x00\x18\x00\x0b\x00\x02\x01\x00\x00\x23\x00\x00" "\x00\x10\x00\x0e\x00\x0c\x02\x68\x32\x08\x68\x74\x74\x70\x2f\x31" - "\x2e\x31\x00\x05\x00\x05\x01\x00\x00\x00\x00\x00\x0d\x00\x14\x00" - "\x12\x04\x03\x08\x04\x04\x01\x05\x03\x08\x05\x05\x01\x08\x06\x06" - "\x01\x02\x01\x00\x12\x00\x00\x00\x33\x00\x2b\x00\x29")); + "\x2e\x31\x00\x05\x00\x05\x01\x00\x00\x00\x00\x00\x0d\x00\x12\x00" + "\x10\x04\x03\x08\x04\x04\x01\x05\x03\x08\x05\x05\x01\x08\x06\x06" + "\x01\x00\x12\x00\x00\x00\x33\x00\x2b\x00\x29")); G(4); S(qstr("\x00\x01\x00\x00\x1d\x00\x20")); K(); diff --git a/Telegram/SourceFiles/storage/localimageloader.cpp b/Telegram/SourceFiles/storage/localimageloader.cpp index ae4ab6522..15f576e5a 100644 --- a/Telegram/SourceFiles/storage/localimageloader.cpp +++ b/Telegram/SourceFiles/storage/localimageloader.cpp @@ -842,8 +842,9 @@ void FileLoadTask::process() { if (ValidateThumbDimensions(w, h)) { isSticker = Core::IsMimeSticker(filemime) - && GoodStickerDimensions(w, h) - && (filesize < Storage::kMaxStickerBytesSize); + && (filesize < Storage::kMaxStickerBytesSize) + && (Core::IsMimeStickerAnimated(filemime) + || GoodStickerDimensions(w, h)); if (isSticker) { attributes.push_back(MTP_documentAttributeSticker( MTP_flags(0),