r8665: fixed a segv at high debug level in the web server
authorAndrew Tridgell <tridge@samba.org>
Thu, 21 Jul 2005 07:52:31 +0000 (07:52 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:29:51 +0000 (13:29 -0500)
thanks to volker for finding this

source/web_server/http.c

index e7d5c399ce769b3109d2f3eecfbbce7cdd5fc117..07a9a3be8dc091833d54e1a798b49d4341670fa8 100644 (file)
@@ -870,20 +870,22 @@ void http_process_input(struct websrv_context *web)
        mprSetCtx(edata->application_data);
        mprCopyVar(edata->application_data, &esp->variables[ESP_APPLICATION_OBJ], 
                   MPR_DEEP_COPY);
+       mprSetCtx(esp);
 
        /* copy any session data */
        if (web->session) {
                talloc_free(web->session->data);
                web->session->data = talloc_zero(web->session, struct MprVar);
-               mprSetCtx(web->session->data);
                if (esp->variables[ESP_SESSION_OBJ].properties == NULL ||
                    esp->variables[ESP_SESSION_OBJ].properties[0].numItems == 0) {
                        talloc_free(web->session);
                        web->session = NULL;
                } else {
+                       mprSetCtx(web->session->data);
                        mprCopyVar(web->session->data, &esp->variables[ESP_SESSION_OBJ], 
                                   MPR_DEEP_COPY);
                        /* setup the timeout for the session data */
+                       mprSetCtx(esp);
                        talloc_free(web->session->te);
                        web->session->te = event_add_timed(web->conn->event.ctx, web->session, 
                                                           timeval_current_ofs(web->session->lifetime, 0), 
@@ -895,6 +897,7 @@ void http_process_input(struct websrv_context *web)
        return;
        
 internal_error:
+       mprSetCtx(esp);
        talloc_free(esp);
        http_error(web, 500, "Internal server error");
 }