Add gitea download git diff limit

This commit is contained in:
2026-06-05 19:34:29 +00:00
parent 6aa653e846
commit ced1fca563
4 changed files with 37 additions and 5 deletions
+18 -5
View File
@@ -1,9 +1,11 @@
use std::time::Duration;
use futures_util::stream::TryStreamExt;
use serde::Deserialize;
use std::time::Duration;
use tokio::io::AsyncReadExt;
use tokio_util::io::StreamReader;
use crate::{
consts::{BOT_PROCESS_MSG, REVIEW_PROMPT},
consts::{BOT_PROCESS_MSG, MAX_DIFF_SIZE, REVIEW_PROMPT},
env::EnvConfig,
errors::AppError,
gitea::{GiteaAPI, ReviewPayload, WebhookType},
@@ -197,7 +199,18 @@ impl Bot {
async fn download_git_diff(&self, url: &str) -> anyhow::Result<String> {
let response = self.http_client.get(url).send().await?;
let body = response.text().await?;
Ok(body)
let stream = response.bytes_stream().map_err(std::io::Error::other);
let mut buf = Vec::with_capacity(MAX_DIFF_SIZE);
StreamReader::new(stream)
.take((MAX_DIFF_SIZE + 1) as u64)
.read_to_end(&mut buf)
.await?;
if buf.len() > MAX_DIFF_SIZE {
anyhow::bail!("Git diff exceeds the maximum allowed size of 1 Mo");
}
Ok(String::from_utf8_lossy(&buf).into_owned())
}
}