[c]c=(*id+i) vs c=*(id+i)
글쓴이: 송효진 / 작성시간: 토, 2006/11/18 - 8:10오후
checkpassword-0.90-mysql-0.7.4 를 gcc 4.1 로 컴파일 하니까 실행할 때 에러가 났습니다.
잘 모르는 c 를 디버깅 해보다가 아이디를 제대로 잘라내지 못하고 쓰레기값도 들어가는것을 발견하였습니다.
문제의 부분이 @ 로 자르는 부분이었는데,
char *id 로 test@test.com 을 받아와서
(c=(*id+i)) == sep_char 요렇게 비교하게 되어 있었습니다.
printf 로 c 를 찍어보니 완전히 엉뚱한 값이 나오더군요.
포인터연산으로 다음문자를 가져오는 부분이라는것은 이해 되어 괄호를 하나 더 쳐봤습니다.
(c=(*(id+i))) == sep_char
되네요.
제가 궁금한것은 gcc 버전 몇까지 전자의 경우도 제대로 동작했었나 하는 것입니다.
젠투와 vpopmail 을 알기 전에는 checkpassword 설치 하다가 포기한적이 한두번이 아니거든요.
지금에와서 또 한 이유는 회사의 이메일 솔루션이 여기에 맞춰졌기 때문이고요...
Forums:
checkpassword-0.90-mysql-0.7.
checkpassword-0.90-mysql-0.7.4.patch.gz 패치에는 그런 줄이 안보이는군요. 혹시 원본 패치가 맞는지 확인해 보시기 바랍니다. 질문하신 내용대로라면 이전 버전의 gcc로도 정상동작이 되지 않습니다. (버그임)
http://download.softagency.net/mysql/Downloads/Contrib/checkpassword-0.90-mysql-0.7.4.patch.gz
여기의 패치를 보면
로 나와 있습니다.
그런가요-_-; 그
그런가요-_-; 그 부분은 제 착각이었나보군요. 여기저기 보다보니 -_-;;;;;;
idid 랑 ide 를 malloc 한 다음 바로 strncat 로 붙여버리는곳이 진짜 버그였나보군요.
malloc 다음줄에 *idid = 0, *ide = 0 도 넣어주었습니다.
emerge money

https://xenosi.de/
댓글 달기