반응형


윈도우즈 프로그래밍을 하다가 파일 경로나 파일명 관련된 구현을 하다 보면 종종 MAX_PATH 매크로를 자주 사용하게 된다. stdlib.h 에 정의되어 있는 MAX_PATH 는 260 으로 정의되어 있다.


그런데 간혹 착각을 하는 것이, 이 MAX_PATH 가 허용하는 길이는 폴더의 길이 및 파일의 길이이지, 파일명과 폴더명을 포함한 경로를 커버하는 크기는 아니란 것이다.


그러므로 파일명이 포함된 폴더 경로를 나타내는 배열을 아래와 같이 잡으면 경로가 길 경우에 에러가 발생할 소지가 있다.




그리고 윈도우즈에서 확인한 결과 재미있는 버그를 하나 발견할 수 있었다.
파일명을 260 글자 까지 만들 경우 이 이상 파일명을 늘릴 수 없다. 마찬가지로 폴더를 생성한 후에 이 폴더명을 260 자까지 만들 경우 이 이상으로 폴더 명은 늘릴 수 없다. MAX_PATH 에 정의된 크기만큼 생성된 것이다. 이 때, 이 폴더나 파일을 복사나 삭제등을 하려고 하는 경우 파일 탐색기가 런타임 에러 팝업도 없이 그냥 죽어버리는 신기한 버그가 발견된다. (지금 바로 해 보시라.. ㅋㅋ ) 이 외에도 260 글자 길이의 폴더나 파일을 가지고 파일 작업을 할 경우 여러가지 오동작을 일으킨다.

추가 ) 근래에 버그 픽스를 한 것인지 XP SP3 의 경우 261 자를 넘는 폴더명을 생성시 폴더명이 너무 길다는 경고 창과 함께 261 자가 넘는 폴더명은 생성이 되지 않는다. 폴더명은 261 자 까지 허용.

구글을 찾아보니 이 문제는 Windows XP 와 Windows Vista 에서 공히 발견되는 꽤나 유명한 버그였다.

사용자 삽입 이미지


http://blog.cumps.be/explorer-bug-long-path-damaged-directories/

참고 : MSDN 의 Path Limits

+ Recent posts