가상의 C 라이브러리가 포인터와 길이를 반환한다고 가정합니다. 단일 스레드에서 호출을 순서대로 할 때, 버퍼는 다음 라이브러리 호출 전까지 읽을 수 있고 유효합니다. 소유권 이전은 없다고 가정합니다. 다른 핸들, 콜백, 백그라운드 스레드도 버퍼를 무효로 만들 수 있는지는 아직 미확인입니다.
가리키는 바이트에 const가 붙었다면 그 포인터를 통한 변경이 제한됩니다. 하지만 버퍼의 수명을 보장하거나 다른 경로의 변경까지 막지는 않습니다. 따라서 라이브러리 핸들을 살려 두는 일이 필요하더라도 그것만으로는 부족할 수 있습니다.
다른 호출을 허용하기 전에 바이트를 복사해서 소유권을 가진 Vec<u8>로 만드는 래퍼를 생각할 수 있습니다. 포인터와 길이가 가리키는 범위는 복사 내내 유효하고 읽을 수 있어야 하며, 외부 코드에서 충돌하는 변경도 없어야 합니다. 이미 무효인 포인터를 복사로 고칠 수는 없습니다.
빌려 쓰는 뷰를 제공한다면 그 뷰가 있는 동안 무효화를 일으킬 수 있는 모든 호출을 막아야 합니다. 핸들 하나에 묶인 대여로 충분하려면 관련된 무효화 경로가 모두 그 핸들을 거쳐야 합니다. 라이브러리가 전역 저장 공간을 공유한다면 다른 핸들도 고려해야 합니다. 동시 호출과 재진입하는 콜백도 이 근거에 포함해야 합니다.
저라면 소유권을 가진 복사본부터 제공하고, 그래도 외부 코드에서 보장해야 할 사항을 문서에 적겠습니다. 이는 경계를 이렇게 정하자는 제안이며, 외부 코드가 그 약속을 지킨다는 증거는 아닙니다.