[LEDE-DEV] uhttpd problems with env variable in cgi
Felix Fietkau
nbd at nbd.name
Tue Oct 24 06:15:38 PDT 2017
On 2017-10-22 14:19, p.wassi at gmx.at wrote:
> Hi Karl,
>
>> There's really been very few commits to uhttpd, it shouldn't be
>> hard to bisect to the specific one that causes this.
>
> Ok, I tracked it down to 88c0b4b6d00152c54a0f1367ae839c71547281e1 commited
> by Jo-Philipp. Before that commit, everything is fine to me.
> However, IMHO this commit is totaly unrelated to what my problems are, so I
> investigated further (in the meantime also on brmc47xx).
>
> I've traced it up to uh_create_process() in proc.c where it forks a new process.
> When entering the uh_create_process(), everything is still fine (i.e. pi->query is still
> holding the correct value).
> However, after doing blob_buf_init(&proc->hdr, 0); the value of pi->query is gone.
> So neither the parent nor the child process have the value then.
> If the QUERY_STRING is long enough (>= 8 chars), it will survive blob_buf_init().
> Interesting to me: when using another user/pswd, that border is at >= 16 chars.
> Anyway, I've landed at libubox - is this a libubox issue, is the blob_buf_init
> not used as intended, or am I foolish when interpreting pi's member variables
> after doing blob_buf_init?
Previous blob_buf contents should not be used after blob_buf_init, so
it's not a libubox bug. Please try this patch:
diff --git a/file.c b/file.c
index a1775f5..b3702c8 100644
--- a/file.c
+++ b/file.c
@@ -132,6 +132,7 @@ uh_path_lookup(struct client *cl, const char *url)
{
static char path_phys[PATH_MAX];
static char path_info[PATH_MAX];
+ static char path_query[PATH_MAX];
static struct path_info p;
const char *docroot = conf.docroot;
@@ -156,7 +157,11 @@ uh_path_lookup(struct client *cl, const char *url)
/* separate query string from url */
if ((pathptr = strchr(url, '?')) != NULL) {
- p.query = pathptr[1] ? pathptr + 1 : NULL;
+ if (pathptr[1]) {
+ p.query = path_query;
+ snprintf(path_query, sizeof(path_query), "%s",
+ pathptr + 1);
+ }
/* urldecode component w/o query */
if (pathptr > url) {
More information about the Lede-dev
mailing list