httpd-modules-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "SAILESH KRISHNAMURTI, BLOOMBERG/ 731 LEXIN" <skrishnam...@bloomberg.net>
Subject Re: http-redirect url gets corrupted in request_rec - apache 2
Date Tue, 11 Dec 2007 19:38:21 GMT


----- Original Message -----
From: Joe Lewis <modules-dev@httpd.apache.org>
To: modules-dev@httpd.apache.org
At: 12/11 12:32:07

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                                                                              jOE- just
one question, do you want me to put in the strncpy as well as snprintf. i.e as below :   
                                                    sprintf (loc, strlen(location), "%s",
location);//note the comma before"%s"     strncpy(loc,location,strlen(location));        
                                please confirm                     
-- 
Joseph Lewis <http://sharktooth.org/>
"Divide the fire, and you will sooner put it out." - Publius Syrus

Mime
View raw message