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 |