You're using strncpy(), which does NOT add the 0-terminator at the end that printf() expects.
On 4/13/20 11:27 AM, Imóveis Nacionais wrote: > But I am just handling arrived data when *upload_data_size > 0. Here is > the code: > > else if(strcmp(method, "POST") == 0) > { > ST_PER_THREAD_DATA* pstThreadData = *ptr; > if( pstThreadData == NULL) > { > ST_PER_THREAD_DATA * cThreadData = (ST_PER_THREAD_DATA*) > malloc(sizeof(ST_PER_THREAD_DATA)); > cThreadData->nThreadID = nThID; > cThreadData->strData[0]='\0'; > > *ptr = cThreadData; > return MHD_YES; > } > > if(*upload_data_size > 0) > { > printf("Before strcpy (%s) (%s) > (%d)\n",pstThreadData->strData,upload_data,*upload_data_size); > strncpy(pstThreadData->strData,upload_data,*upload_data_size); > printf("After strcpy (%s) (%s) > (%d)\n",pstThreadData->strData,upload_data,*upload_data_size); > > *upload_data_size = 0; > return MHD_YES; > > //After strcpy ({"key98"}) ({"key98"}) (9) > } > else > { > //END OF POST DATA GATHERING > printf("In the end of post we have (%s) (%d) > \n",pstThreadData->strData, strlen(pstThreadData->strData)); > HandleClientPost(pstThreadData->strData)) > //In the end of post we have ({"key98"}) (10) > ... > > Please, is there anything wrong with the (testing) code? > > Thank you > > > > On Mon, Apr 13, 2020 at 10:00 AM Christian Grothoff <groth...@gnunet.org > <mailto:groth...@gnunet.org>> wrote: > > On 4/13/20 2:11 AM, Imóveis Nacionais wrote: > > Then when in the "*upload_data_size = 0" situation, using a printf > > sometimes I can see that the thread context data has the 0x7f char > appended > > and of course the strlen now is one char extra. This happens > between the > > last post call with *upload_data_size > 0 and *upload_data_size = 0. > > > > Does this char has any meaning in the libmicrohttpd context? > > Why is this char being added? > > You're seeing undefined behavior. When '*upload_data_size' is zero, you > are not allowed to look into '*upload_data'. It is NEVER warranted to be > a 0-terminated char* in the first place, and right now you're just > reading data out of bounds. Do not rely on getting 0x7f or anything > meaningful, in fact, expect reading more than '*upload_data_size' bytes > from '*upload_data' to be deadly. > > Happy hacking! > > Christian >
signature.asc
Description: OpenPGP digital signature