Dear Christian

Could you, please, remove my e-Mail address from this distribution list?

Thanks in advance
Viktor

On Thu, 17 Nov 2022 at 17:10, Christian Grothoff <groth...@gnunet.org>
wrote:

> On 11/17/22 14:24, lingweicai via libmicrohttpd wrote:
> > Hello Experts,
> >
> >
> > I am developing a web tool, Can I define variable of char array for a
> page in
> > the function containing MHD_create_response_from_buffer, with flag of
> > MHD_RESPMEM_PERSISTENT? or I must use the flag of MUST_COPY ?
> >
> >
> > for example:
> >
> >
> > send_page ( char * str )
> >
> > {
> >
> >       char page[1024];
> >
> >       strcpy ( page, str);
> >
> >       response = MHD_create_response_from_buffer ( strlen(page), (void*)
> page,
> > MHD_RESPMEM_PERSISTENT ) ;
> >
> >    ...
> >
> > }
>
> This is NOT ok, as 'page' is on the stack and could change after you
> 'return', so if you do this, MHD may send random value from your stack
> out on the Internet. Not good.
>
> >
> > or use this :
> >
> > static char page[1024];
> >
> >
> >    in multiple threads pool mode ?
>
> Only if you can guarantee that all threads will send exactly the same
> data ;-).
>
> What might work is
>
> static __thread char page[1024];
>
> but this is still dangerous if you use MHD in a mode where one thread
> handles more than one connection.
>
> So unless you have a very, very good reason to do any of the above, I
> would strongly recommend to simply
>
> char *page = malloc();
>
> and use neither MHD_RESPMEM_MUST_COPY nor MHD_RESPMEM_PERSISTENT but
> rather MHD_RESPMEM_MUST_FREE -- that way, there is no extra copying
> *and* you don't have concurrency / use-after-free issues.
>
> Happy hacking!
>
> Christian
>
>

Reply via email to