httpd-modules-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Joe Lewis <...@joe-lewis.com>
Subject Re: http-redirect url gets corrupted in request_rec - apache 2
Date Tue, 11 Dec 2007 17:31:11 GMT
SAILESH KRISHNAMURTI, BLOOMBERG/ 731 LEXIN wrote:
> I doubt about  strace for Solaris ;-) truss' me. 

Forgot about truss!  Thanks for the reminder, Ralf!

>                                                                                     
                                                 Hi, Forgive me if my post dosent come out
looking right, the mail client Im using is a bit antiquated. However to answer the above questions,
here is a code snippet that illustrates how this is being set in the code:               
 char loc[2024];                                                                 sprintf (loc,
"%s", location);//location is passed into the method              apr_table_setn (r->headers_out,
"Location", loc);
>  r->status = HTTP_TEMPORARY_REDIRECT;
>  return (HTTP_TEMPORARY_REDIRECT);                                              The above
is pretty standard. I also printed out the r->headers_out using apr_table_getn and fprintf
statements and it looks ok. the garbage characters are the same for a given compilation attempt
and apache instance but varies between compilation attempts :-)                          
                  
>   

SAILESH : Adjust your sprintf to an snprintf line, and for the length,
use strlen(location);  For example :

sprintf (loc, "%s", location);//location is passed into the method

becomes :

sprintf (loc, strlen(location) "%s", location);//location is passed into
the method

char *loc;
loc = (char*)apr_palloc(r->pool,strlen(location));
strncpy(loc,location,strlen(location));
apr_table_setn (r->headers_out, "Location", loc);
r->status = HTTP_TEMPORARY_REDIRECT;
return (HTTP_TEMPORARY_REDIRECT);

And let us know if that behaves any differently.  (I believe that the
apr_table_setn actually sets the pointer, not copying the string, which
means the loc variable could be disappearing after leaving the function
and causing strange behavior.)

Joe
-- 
Joseph Lewis <http://sharktooth.org/>
"Divide the fire, and you will sooner put it out." - Publius Syrus

Mime
View raw message