From 1dd617fb5b98adcd1b0dbffec709bd25a9124cc7 Mon Sep 17 00:00:00 2001 From: Alex Syvolap <80973788+alexsyvolap@users.noreply.github.com> Date: Wed, 23 Apr 2025 17:27:42 +0200 Subject: [PATCH] fix(sentry): prevent crash on non-scalar redis parameters using RedisCommand --- .../src/Tracing/Listener/TracingRedisListener.php | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/src/sentry/src/Tracing/Listener/TracingRedisListener.php b/src/sentry/src/Tracing/Listener/TracingRedisListener.php index 7133ca8c3..ae788b590 100644 --- a/src/sentry/src/Tracing/Listener/TracingRedisListener.php +++ b/src/sentry/src/Tracing/Listener/TracingRedisListener.php @@ -52,6 +52,8 @@ public function process(object $event): void $pool = $this->container->get(PoolFactory::class)->getPool($event->connectionName); $config = $this->config->get('redis.' . $event->connectionName, []); + $redisStatement = (string) new RedisCommand($event->command, $event->parameters); + $data = [ 'coroutine.id' => Coroutine::id(), 'duration' => $event->time * 1000, @@ -59,7 +61,7 @@ public function process(object $event): void 'db.redis.connection' => $event->connectionName, 'db.redis.database_index' => $config['db'] ?? 0, 'db.redis.parameters' => $event->parameters, - 'db.statement' => (new RedisCommand($event->command, $event->parameters))->__toString(), + 'db.statement' => $redisStatement, 'db.redis.pool.name' => $event->connectionName, 'db.redis.pool.max' => $pool->getOption()->getMaxConnections(), 'db.redis.pool.max_idle_time' => $pool->getOption()->getMaxIdleTime(), @@ -69,15 +71,7 @@ public function process(object $event): void // rule: operation db.table $op = 'db.redis'; - $description = sprintf( - '%s %s', - strtoupper($event->command), - match (strtoupper($event->command)) { - 'EVAL' => '', - default => implode(' ', [$event->parameters[0] ?? '', $event->parameters[1] ?? '']), - } - ); - $span = $this->startSpan($op, $description); + $span = $this->startSpan($op, $redisStatement); if (! $span) { return;