Ops... :-(
Thank you very much!

On Mon, Apr 13, 2020 at 10:38 AM Christian Grothoff <groth...@gnunet.org>
wrote:

> 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
> >
>
>

Reply via email to