From 328bc88f02adbb332a90ebb84426e0d0c246c3c2 Mon Sep 17 00:00:00 2001 From: Dan Brown Date: Mon, 9 May 2022 15:57:50 +0100 Subject: [PATCH] Fixed LDAP_DUMP_* options when data contains binary Dumping details that were binary, such as the jpegphoto data, would cause the dump to fail on the encoding to JSON. This change forces content to be UTF8 before dumping. Updated existing test to cover. Closes #3396 --- app/Exceptions/JsonDebugException.php | 7 +++++-- tests/Auth/LdapTest.php | 4 +++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/app/Exceptions/JsonDebugException.php b/app/Exceptions/JsonDebugException.php index e8d61305e..8acc19778 100644 --- a/app/Exceptions/JsonDebugException.php +++ b/app/Exceptions/JsonDebugException.php @@ -19,10 +19,13 @@ class JsonDebugException extends Exception } /** - * Covert this exception into a response. + * Convert this exception into a response. + * We add a manual data conversion to UTF8 to ensure any binary data is presentable as a JSON string. */ public function render(): JsonResponse { - return response()->json($this->data); + $cleaned = mb_convert_encoding($this->data, 'UTF-8'); + + return response()->json($cleaned); } } diff --git a/tests/Auth/LdapTest.php b/tests/Auth/LdapTest.php index 03ef926cb..078940b63 100644 --- a/tests/Auth/LdapTest.php +++ b/tests/Auth/LdapTest.php @@ -615,7 +615,7 @@ class LdapTest extends TestCase public function test_dump_user_details_option_works() { - config()->set(['services.ldap.dump_user_details' => true]); + config()->set(['services.ldap.dump_user_details' => true, 'services.ldap.thumbnail_attribute' => 'jpegphoto']); $this->commonLdapMocks(1, 1, 1, 1, 1); $this->mockLdap->shouldReceive('searchAndGetEntries')->times(1) @@ -623,6 +623,8 @@ class LdapTest extends TestCase ->andReturn(['count' => 1, 0 => [ 'uid' => [$this->mockUser->name], 'cn' => [$this->mockUser->name], + // Test dumping binary data for avatar responses + 'jpegphoto' => base64_decode('/9j/4AAQSkZJRg=='), 'dn' => ['dc=test' . config('services.ldap.base_dn')], ]]);