From 3d20275bb4d434f53055c3c0b645fd8bb072965e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20P=C3=A9rez=20de=20Algaba?= <124347725+jperezdealgaba@users.noreply.github.com> Date: Wed, 17 Jun 2026 13:07:13 +0200 Subject: [PATCH] fix(security): enforce audio decode duration limit in chat completions path (#45908) Signed-off-by: jperezde --- vllm/multimodal/media/audio.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/vllm/multimodal/media/audio.py b/vllm/multimodal/media/audio.py index 5e998be3fc..c9e5753ca7 100644 --- a/vllm/multimodal/media/audio.py +++ b/vllm/multimodal/media/audio.py @@ -9,6 +9,7 @@ import numpy.typing as npt import pybase64 import torch +import vllm.envs as envs from vllm.logger import init_logger from vllm.multimodal.audio import resample_audio_pyav from vllm.utils.import_utils import PlaceholderModule @@ -235,7 +236,11 @@ class AudioMediaIO(MediaIO[tuple[npt.NDArray, float]]): self.kwargs = kwargs def load_bytes(self, data: bytes) -> tuple[npt.NDArray, float]: - return load_audio(BytesIO(data), sr=None) + return load_audio( + BytesIO(data), + sr=None, + max_duration_s=envs.VLLM_MAX_AUDIO_DECODE_DURATION_S, + ) def load_base64( self, @@ -245,7 +250,11 @@ class AudioMediaIO(MediaIO[tuple[npt.NDArray, float]]): return self.load_bytes(pybase64.b64decode(data)) def load_file(self, filepath: Path) -> tuple[npt.NDArray, float]: - return load_audio(filepath, sr=None) + return load_audio( + filepath, + sr=None, + max_duration_s=envs.VLLM_MAX_AUDIO_DECODE_DURATION_S, + ) def encode_base64( self,