iOS 12.0 과 macOS 모하비에 탑재된 Safari 12.0 에서 배열의 순서를 역으로 바꾸는 함수인 Array.prototype.reverse() 에서 심각한 버그가 발견되었습니다.
스택오버플로에서 한 질문자가 배열에 reverse() 를 한 후 브라우저를 새로고침하면 해당 배열 변수가 초기화되지 않고 마지막에 reverse() 한 결과가 보존된다는 발견하였습니다. [1] 해당 iOS/macOS를 쓰고 있는 사용자들은 링크 [2] 가서 해당 버그를 확인 할 수 있습니다.
또한 해당 버그 트래킹에 따르면 특정상황에서는 reverse() 를 하고나서도 결과가 제대로 반영되지 않는다고 합니다. [3]
버그의 원인은 해당 배열 오브젝트를 변형할 때 Copy-On-Write (CoW) 를 통하여 오브젝트를 새 메모리 영역에 복사한 다음 오브젝트를 변형하게 되는데, reverse()는 개발자의 실수로 CoW를 부르지 않게 되어서 발생한 것으로 보입니다.
이 버그는 이미 Safari Technology Preview 에서 고쳐진 버그이지만 해당 픽스가 일반사용자들에게 적용되려면 iOS/macOS 다음 마이너 버전 업데이트까지 (예: iOS 12.1) 기다려야 할 것 으로 보입니다.
브라우저에서 해당 함수를 쓰고 있는 개발자들은 임시적으로 관련 polyfill를 써야할 것으로 보입니다.