요약
동일한 설치 경로를 대상으로 두 install.sh가 동시에 실행되면 바이너리 교체와 install.json 기록 사이에 다른 설치가 끼어들 수 있습니다. 두 설치가 모두 성공했다고 출력하면서 최종 바이너리와 영수증이 서로 다른 버전을 기록하는 것을 재현했습니다.
- 검토 기준:
main@4e87765f95c106edb3c956cfad2abc1db64c0c39
- 판정: Unix
install.sh mismatch CONFIRMED
- 우선순위: P2
영향
업그레이드, 진단, 제거 또는 이후 자동화가 잘못된 version, asset, checksum 정보를 사용할 수 있습니다.
발생 조건 및 확인 범위
- 동일 HOME, 설치 디렉터리와 receipt 경로를 사용할 것
- 서로 다른 버전 설치가 시간상 겹칠 것
- 배치·검증·영수증 이동 사이에 특정 interleaving이 발생할 것
macOS fixture에서 최종 binary 2.0.0, receipt 1.0.0을 확인했습니다. 실제 dpt version은 빨라 일반 경쟁 창은 fixture보다 좁습니다. rollback이 다른 설치를 삭제하는 경우와 install.ps1의 동일 문제는 코드상 가능하지만 직접 재현하지 않았습니다.
재현 및 검증 방법
- 올바른 checksum을 가진 1.0.0/2.0.0 로컬 release fixture를 준비합니다.
- v1 설치 후 version 검증을 지연하고, v2 download validation을 다르게 지연해 interleaving을 만듭니다.
- 동일
$HOME과 DPT_INSTALL_DIR로 두 install.sh를 병렬 실행합니다.
- 두 exit code와 성공 메시지를 확인합니다.
- 최종
dpt version과 install.json.version, asset, sha256의 일치를 검사합니다.
확인된 결과는 두 installer exit 0, binary 2.0.0, receipt 1.0.0입니다.
기대 동작
동일 설치 대상은 프로세스 간 잠금으로 직렬화되어야 하며 바이너리 교체, 최종 버전 검증, receipt 반영과 rollback이 하나의 트랜잭션으로 일관성을 유지해야 합니다.
완료 조건
관련 코드
요약
동일한 설치 경로를 대상으로 두
install.sh가 동시에 실행되면 바이너리 교체와install.json기록 사이에 다른 설치가 끼어들 수 있습니다. 두 설치가 모두 성공했다고 출력하면서 최종 바이너리와 영수증이 서로 다른 버전을 기록하는 것을 재현했습니다.main@4e87765f95c106edb3c956cfad2abc1db64c0c39install.shmismatch CONFIRMED영향
업그레이드, 진단, 제거 또는 이후 자동화가 잘못된 version, asset, checksum 정보를 사용할 수 있습니다.
발생 조건 및 확인 범위
macOS fixture에서 최종 binary
2.0.0, receipt1.0.0을 확인했습니다. 실제dpt version은 빨라 일반 경쟁 창은 fixture보다 좁습니다. rollback이 다른 설치를 삭제하는 경우와install.ps1의 동일 문제는 코드상 가능하지만 직접 재현하지 않았습니다.재현 및 검증 방법
$HOME과DPT_INSTALL_DIR로 두install.sh를 병렬 실행합니다.dpt version과install.json.version,asset,sha256의 일치를 검사합니다.확인된 결과는 두 installer exit 0, binary 2.0.0, receipt 1.0.0입니다.
기대 동작
동일 설치 대상은 프로세스 간 잠금으로 직렬화되어야 하며 바이너리 교체, 최종 버전 검증, receipt 반영과 rollback이 하나의 트랜잭션으로 일관성을 유지해야 합니다.
완료 조건
install.ps1에도 동등한 보호와 테스트를 적용한다.관련 코드
install.shrollbackinstall.shcommitinstall.ps1commit