From 68d5faa96e7452a3b03621735717a58cb12e62c1 Mon Sep 17 00:00:00 2001
From: Sergei Zharinov <zharinov@users.noreply.github.com>
Date: Fri, 2 Feb 2024 13:22:16 -0300
Subject: [PATCH] fix(cache): Fix compression and decompression format mismatch
 (#27021)

---
 lib/util/cache/package/file.ts  |  2 +-
 lib/util/cache/package/redis.ts |  2 +-
 lib/util/compress.spec.ts       | 10 ----------
 lib/util/compress.ts            |  6 ++----
 4 files changed, 4 insertions(+), 16 deletions(-)

diff --git a/lib/util/cache/package/file.ts b/lib/util/cache/package/file.ts
index 313f97b1a4..2669478986 100644
--- a/lib/util/cache/package/file.ts
+++ b/lib/util/cache/package/file.ts
@@ -58,7 +58,7 @@ export async function set(
     getKey(namespace, key),
     JSON.stringify({
       compress: true,
-      value: await compressToBase64(value),
+      value: await compressToBase64(JSON.stringify(value)),
       expiry: DateTime.local().plus({ minutes: ttlMinutes }),
     }),
   );
diff --git a/lib/util/cache/package/redis.ts b/lib/util/cache/package/redis.ts
index 1914ea3dca..f1b8603d44 100644
--- a/lib/util/cache/package/redis.ts
+++ b/lib/util/cache/package/redis.ts
@@ -71,7 +71,7 @@ export async function set(
       getKey(namespace, key),
       JSON.stringify({
         compress: true,
-        value: await compressToBase64(value),
+        value: await compressToBase64(JSON.stringify(value)),
         expiry: DateTime.local().plus({ minutes: ttlMinutes }),
       }),
       { EX: redisTTL },
diff --git a/lib/util/compress.spec.ts b/lib/util/compress.spec.ts
index 3c05451d83..79e654d873 100644
--- a/lib/util/compress.spec.ts
+++ b/lib/util/compress.spec.ts
@@ -10,14 +10,4 @@ describe('util/compress', () => {
     const decompressed = await decompressFromBase64(compressed);
     expect(decompressed).toBe(input);
   });
-
-  it('compresses objects', async () => {
-    const input = { foo: 'bar' };
-
-    const compressed = await compressToBase64(input);
-    expect(compressed).toBe('CwaAeyJmb28iOiJiYXIifQM=');
-
-    const decompressed = await decompressFromBase64(compressed);
-    expect(JSON.parse(decompressed)).toEqual(input);
-  });
 });
diff --git a/lib/util/compress.ts b/lib/util/compress.ts
index 5a06004247..fc3a0e8bbc 100644
--- a/lib/util/compress.ts
+++ b/lib/util/compress.ts
@@ -1,6 +1,5 @@
 import { promisify } from 'node:util';
 import zlib, { constants } from 'node:zlib';
-import is from '@sindresorhus/is';
 
 const brotliCompress = promisify(zlib.brotliCompress);
 const brotliDecompress = promisify(zlib.brotliDecompress);
@@ -8,9 +7,8 @@ const brotliDecompress = promisify(zlib.brotliDecompress);
 /**
  * @deprecated
  */
-export async function compressToBase64(input: unknown): Promise<string> {
-  const jsonStr = is.string(input) ? input : JSON.stringify(input);
-  const buf = await brotliCompress(jsonStr, {
+export async function compressToBase64(input: string): Promise<string> {
+  const buf = await brotliCompress(input, {
     params: {
       [constants.BROTLI_PARAM_MODE]: constants.BROTLI_MODE_TEXT,
       [constants.BROTLI_PARAM_QUALITY]: 8,
-- 
GitLab