
Rust 공식 저장소에 따르면 지난 20일 공개된 Rust 1.98.0에서 특정 제네릭과 트레이트 조합을 처리할 때 컴파일러가 잘못된 실행 코드를 만들 수 있는 결함이 확인됐다. 이슈 #161441에는 P-critical, I-miscompile, 안정판 간 회귀를 뜻하는 regression-from-stable-to-stable 라벨이 붙었다.
보고자는 Rust 1.97.1에서는 정상 동작하던 코드가 1.98.0에서만 충돌한다고 설명했다. 컴파일러가 동적 디스패치에 필요한 vtable의 메서드 슬롯을 비워 둬, 안전한 Rust 코드가 널 포인터를 통해 호출되는 형태로 이어질 수 있다는 것이 이슈의 요지다. 보고된 재현 사례에서는 프로세스가 세그먼테이션 폴트로 종료됐다.
영향은 모든 Rust 프로그램에 일괄적으로 나타나는 문제가 아니라, 이 결함을 유발하는 특정 타입·트레이트 조합을 사용하는 코드에 한정돼 있다. 다만 컴파일러가 오류 없이 바이너리를 만들고 실행 단계에서 비정상 동작할 수 있다는 점에서 일반적인 빌드 실패보다 대응 난도가 높다.
Rust 유지관리자는 이슈 토론에서 결함이 사실상 예측 가능한 충돌로 이어질 수 있다고 언급했고, 이후 수정 사항을 최신 안정판으로 되돌려 적용하는 PR #161555를 열었다. 해당 PR 설명은 기존 수정이 베타 마감 이후에 반영돼 1.98 안정판에는 포함되지 않았다고 밝히며, 이슈 #161441을 해결한다고 적었다.
PR은 현재 검토 중이며 아직 병합되거나 패치 릴리스가 배포된 상태는 아니다. Rust 1.98을 새로 적용했거나 영향을 받는 고급 트레이트·제네릭 패턴을 사용하는 프로젝트는 공식 이슈의 최소 재현 코드와 후속 릴리스 공지를 확인할 필요가 있다.
출처: Rust 공식 이슈 #161441 https://github.com/rust-lang/rust/issues/161441
출처: Rust 공식 수정 백포트 PR #161555 https://github.com/rust-lang/rust/pulls/161555
출처: Rust 1.98.0 공식 릴리스 https://github.com/rust-lang/rust/releases/tag/1.98.0









