2012-12-07 5 views
0

저는 C에서 매우 기본적인 서버를 구현하려고합니다. 그 중 하나는 HTTP 헤더를 구성하는 부분입니다. 이렇게하기 위해 header_builder라는 클래스를 작성했습니다.이 클래스는 기본적으로 헤더를 구성합니다. 이 클래스의 가장 기본적인 방법 중 하나는 append_header_line, 다음과 같습니다strcat()가 종료되지 않습니다

void append_header_line(const char *line, char *hdr) { 
    printf("Adding header line\n"); 
    strcat(hdr, line); 
    printf("Line added. Adding ending.\n"); 
    strcat(hdr, "\r\n"); 
    printf("Success\n"); 
} 

가 \ "는"HDR "매개 변수의 마지막 상"라인 "매개 변수를 압정으로되어 수행 한 후 추가 해야하는 모든 R \ n "끝까지. 문제는 첫 번째 strcat 호출이 종료되지 않는다는 것입니다. 이 코드를 실행하면이하는 모든 말입니다 : 다음 줄이 실행되지 않음을 의미 헤더 행

추가

, 그리고 그 이유를 알아낼 수 없습니다. 이견있는 사람?

+2

너무 부르는 코드를 표시 할 수 있습니까? 또한,'strcat'이 크래시가 아닌 종료되지 않는 것이 확실합니까? – simonc

+0

"strcat"에 의존하는 서버를 생각할 때 Shadders *는 추가 된 바이트 수의 대상 버퍼에 – TJD

+0

* 여유 공간이 있는지 확인하십시오. https://buildsecurityin.us-cert.gov/bsi-rules/home/g1/844-BSI.html –

답변

1

hdr 및/또는 line은 제대로 제로 종료되지 않으므로 범위를 벗어날 때까지 strcat이 실행됩니다.

0

문자열 중 하나에 Null 종결자가없는 것 같습니다.

1

아마도 hdrline 중 하나 (또는 ​​둘 다)는 함수가 호출 될 때 null로 끝나는 C 문자열이 아닙니다. 특히 첫 번째 헤더를 추가하기 전에 hdr[0] = 0;으로 빈 문자열에 hdr을 초기화해야한다는 점을 잊지 마십시오.

관련 문제