Skip to content

Commit d291104

Browse files
committed
rustdoc json: check target existance before redirecting to S3
1 parent c58f51c commit d291104

File tree

1 file changed

+6
-0
lines changed

1 file changed

+6
-0
lines changed

src/web/rustdoc.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -830,6 +830,7 @@ pub(crate) async fn json_download_handler(
830830
Path(params): Path<JsonDownloadParams>,
831831
mut conn: DbConnection,
832832
Extension(config): Extension<Arc<Config>>,
833+
Extension(storage): Extension<Arc<AsyncStorage>>,
833834
) -> AxumResult<impl IntoResponse> {
834835
let matched_release = match_version(&mut conn, &params.name, &params.version)
835836
.await?
@@ -875,6 +876,10 @@ pub(crate) async fn json_download_handler(
875876
format_version,
876877
);
877878

879+
if !storage.exists(&storage_path).await? {
880+
return Err(AxumNope::ResourceNotFound);
881+
}
882+
878883
// since we didn't build rustdoc json for all releases yet,
879884
// this redirect might redirect to a location that doesn't exist.
880885
Ok(super::axum_cached_redirect(
@@ -3166,6 +3171,7 @@ mod test {
31663171

31673172
#[test_case("0.1.0/json"; "rustdoc status false")]
31683173
#[test_case("0.2.0/unknown-target/json"; "unknown target")]
3174+
#[test_case("0.2.0/json/99"; "target file doesnt exist")]
31693175
#[test_case("0.42.0/json"; "unknown version")]
31703176
fn json_download_not_found(request_path_suffix: &str) {
31713177
async_wrapper(|env| async move {

0 commit comments

Comments
 (0)