preg 계열 함수들의 버그?

preg_match('/(.)*/', str_repeat('x', 20000), $matches);

PHP에서 위 명령을 실행하면 $matches 변수에 아래와 같은 값이 들어가야 정상이지만,

array(2) {
   [0]=>
   string(20000) "xx...xx"
   [1]=>
   string(1) "x"
}

Segmentation fault를 내고 죽어버리는 경우가 있다. 이유는 아직 이해불가; 20000번의 매치 과정중 두번째 원소에 계속 x를 저장하는 과정에서 메모리가 빵꾸나는게 아닐까 하는 생각이 들지만 캡쳐기능이 없는 괄호 (?:.)*를 사용해봐도 역시 죽어버린다. ereg 계열 함수는 제대로 실행이 되는걸 보면 preg 함수가 삽질하고 있는게 맞는 것 같다. preg_replace(), preg_match_all() 등 모든 함수에서 동일한 결과가 나오며 PHP 4.4.1, 5.1.4에서 이런 증상을 보였다.

좀 복잡하다 싶은 정규식은 극한 상황의 테스트를 꼭 해볼 것;

'컴퓨터 얘기 > 프로그래밍' 카테고리의 다른 글

멜론 앨범 커버 다운로더  (20) 2007/02/04
Crizin.HTTPRequest.php  (8) 2007/02/03
preg 계열 함수들의 버그?  (10) 2006/08/21
IE 6.0의 버그들  (7) 2006/08/11
태터툴즈 1.0.5 플러그인  (58) 2006/05/09
태터툴즈 방문자 그래프 플러그인  (9) 2006/03/22