From f2d8c6a009d3f08806e1565bf9b92407e659f178 Mon Sep 17 00:00:00 2001 From: "Alexander \"PapaTutuWawa" Date: Sat, 10 Jun 2023 21:06:30 +0200 Subject: [PATCH] fix(xep): Fix parsing user avatar data with newlines --- packages/moxxmpp/lib/src/xeps/xep_0084.dart | 5 ++++- packages/moxxmpp/test/xeps/xep_0084_test.dart | 14 ++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 packages/moxxmpp/test/xeps/xep_0084_test.dart diff --git a/packages/moxxmpp/lib/src/xeps/xep_0084.dart b/packages/moxxmpp/lib/src/xeps/xep_0084.dart index e676f44..17bdd88 100644 --- a/packages/moxxmpp/lib/src/xeps/xep_0084.dart +++ b/packages/moxxmpp/lib/src/xeps/xep_0084.dart @@ -16,6 +16,7 @@ abstract class AvatarError {} class UnknownAvatarError extends AvatarError {} +/// The result of a successful query of a users avatar. class UserAvatarData { const UserAvatarData(this.base64, this.hash); @@ -26,7 +27,9 @@ class UserAvatarData { final String hash; /// The raw avatar data. - List get data => base64Decode(base64); + /// NOTE: Remove newlines because "Line feeds SHOULD NOT be added but MUST be accepted" + /// (https://xmpp.org/extensions/xep-0084.html#proto-data). + List get data => base64Decode(base64.replaceAll('\n', '')); } class UserAvatarMetadata { diff --git a/packages/moxxmpp/test/xeps/xep_0084_test.dart b/packages/moxxmpp/test/xeps/xep_0084_test.dart new file mode 100644 index 0000000..383cc8f --- /dev/null +++ b/packages/moxxmpp/test/xeps/xep_0084_test.dart @@ -0,0 +1,14 @@ +import 'dart:convert'; +import 'package:moxxmpp/moxxmpp.dart'; +import 'package:test/test.dart'; + +void main() { + test('Test accepting newlines', () { + const data = UserAvatarData( + 'cGFwYXR1d\nHV3\n\nYXdh', + 'some-id', + ); + + expect(utf8.decode(data.data), 'papatutuwawa'); + }); +}