Re: cURL bug -- Segmentation Fault when timeout is 1 second
Date: Wed, 4 Feb 2009 19:23:58 +0100
I am very confused at the moment. Can you please help me? I don't know what
to do. It doesn't work...
Now I have again a memory-access-error :-(
static int writer(char* data, size_t size, size_t nmemb, char* buffer)
// What we will return
int result = 0;
// Is there anything in the buffer?
if (buffer != NULL)
buffer = (char*)realloc(buffer, size * nmemb); // Extend the buffer
// Append the data to the buffer
// How much did we write?
result = size * nmemb;
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writer);
curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, errorBuffer);
char *buffer = (char*)malloc(12); // Make a too tight buffer
buffer = '\0'; // Initialize the buffer
curl_easy_setopt(curl, CURLOPT_WRITEDATA, buffer);
I fear that I destroy things in my memory. My output is now.
From: "Daniel Marschall" <info_at_daniel-marschall.de>
Sent: Wednesday, February 04, 2009 7:12 PM
To: "libcurl development" <curl-library_at_cool.haxx.se>
Subject: Re: cURL bug -- Segmentation Fault when timeout is 1 second
> I will try to extend the writer-function, so that it extends the buffer.
> But the website http://www.example.com/ is a text-only page. So it should
> not be that my buffer has binary data at the beginning. And please look at
> my code and output:
> - The first call did output the website correctly
> - The second call had binary garbage at the beginning
> - The third call had other binary garbage at the beginning
> And every call should be the same since the functionality is independent
> of parameters!
> I never used strncpy() or any similar function in my codes. Maybe you have
> looked at the wrong example code? I used the haxx.se example code of the
> writer function that used std::string->append().
> Daniel Marschall
> From: "Gary Maxwell" <gmaxwell_at_casabi.com>
> Sent: Wednesday, February 04, 2009 7:01 PM
> To: "libcurl development" <curl-library_at_cool.haxx.se>
> Subject: RE: cURL bug -- Segmentation Fault when timeout is 1 second
>> Daniel Marschall on February 04, 2009 9:49 AM wrote:
>>> But there are 2 problems I still have:
>>> 1. I want to have an infinite big buffer, like a std::string in C++.
>>> website-output is larger than the buffer size, then I get a
>>> memory-access-error again.
>>> Isn't "char*" an infinite c-string that waits for an 0x0 termination
>>> sequence, is it?
>> "char*" is certainly NOT an infinite c-string. It is simply a pointer
>> to an area of memory that contains sequential characters, the
>> size of which you determine when you statically define or dynamically
>> allocate the memory.
>> You can easily expand the size of your buffer in the write callback
>> function. Look at the documentation for realloc().
>>> 2. The output of the buffer with printf() is not correct. Some foreign
>>> memory contents are in my string... The output is like:
>> Whoever said that the response from the server would be printable
>> UTF-8 data? The server will send back whatever data it thinks you asked
>> for, be it text, images, or sound bites. This is what particularly
>> alarmed me in your earlier example code, using strncpy() in the write
>> callback. You should instead use memcpy().
>> -GaryM at casabi
Received on 2009-02-04