Just a wild guess, but you may be accessing beyond the end of the buffer...
You do: apr_status_t rv = apr_socket_recv(sock, buf, &len); which requests "len" number of bytes, being placed into "buf". What happens if you get "len" then try to format it using apr_psprintf(r->pool, "---%s---", bufp) apr_psprintf() assumes bufp is a string... that is a NULL terminated string, but you did not guarantee that "len" number of bytes in "buf" has a NULL following it. -----Original Message----- From: Graf László [mailto:[email protected]] Sent: Wednesday, May 29, 2013 3:06 PM To: Ben Reser Cc: dev Subject: Re: How to convert char[] to char*? Hi Ben, this is my code snippet and if I enable the commented line then I get an Apache error AH00052: child pid 24982 exit signal Segmentation fault (11) The snippet: static apr_status_t do_client_task(apr_socket_t *sock, const char *filepath, request_rec *r) { apr_status_t rv; const char *req_hdr = apr_pstrcat(r->pool, "GET /", filepath, " HTTP/1.0" CRLF_STR CRLF_STR, NULL); apr_size_t len = strlen(req_hdr); rv = apr_socket_send(sock, req_hdr, &len); if (rv != APR_SUCCESS) { return rv; } { char buf[BUFSIZE]; apr_size_t len = sizeof(buf); char *bufp = 0; while (1) { apr_status_t rv = apr_socket_recv(sock, buf, &len); if (rv == APR_EOF || len == 0) { break; } bufp = apr_palloc(r->pool, len); bufp = buf; ap_log_perror(APLOG_MARK, APLOG_NOTICE, 0, r->pool, apr_psprintf(r->pool, "---%s---", bufp)); // ap_rputs(apr_psprintf(r->pool, "---%s---<br/>\n", bufp), r); } } return rv; } A hint would help me a lot. Thank you. Best regards, grafl On 2013-05-27 23:25, Ben Reser wrote: > On Mon, May 27, 2013 at 1:21 PM, Graf László<[email protected]> wrote: >> I have a handler module which reads the HTTP response from a remote web >> server. >> In this module I have a >> >> char[] buf >> >> and it contains the bytes red using apr_socket_recv. With >> >> ap_log_perror(APLOG_MARK, APLOG_NOTICE, 0, r->pool, apr_psprintf(r->pool, >> "<%s>", buf)); >> >> I can see the buf's content in the error_log but the >> >> ap_rputs(apr_psprintf(r->pool, "%s", (char *)buf), r); >> >> fails. How can I convert this array to a char* to be able to put the HTTP >> response in the handler's request using ap_rputs? > You haven't given enough info to answer your question. However, this > is really a question of how to write C so I'd point you to references > on C. > > See this question on Stack Overflow: > http://stackoverflow.com/questions/1790704/difference-between-square-brackets-and-asterisk > > (that question is about C++ but as far as I know there's no difference > between the two in this case) >
