You are viewing a plain text version of this content. The canonical link for it is here.
Posted to modperl-cvs@perl.apache.org by jk...@apache.org on 2013/07/15 14:03:58 UTC

svn commit: r1503193 - in /perl/modperl/branches/httpd24/src/modules/perl: modperl_interp.c modperl_util.c

Author: jkaluza
Date: Mon Jul 15 12:03:58 2013
New Revision: 1503193

URL: http://svn.apache.org/r1503193
Log:
Return NULL in modperl_interp_pool_select in case scfg->mip is not defined.
Handle that situation in modperl_util.

Modified:
    perl/modperl/branches/httpd24/src/modules/perl/modperl_interp.c
    perl/modperl/branches/httpd24/src/modules/perl/modperl_util.c

Modified: perl/modperl/branches/httpd24/src/modules/perl/modperl_interp.c
URL: http://svn.apache.org/viewvc/perl/modperl/branches/httpd24/src/modules/perl/modperl_interp.c?rev=1503193&r1=1503192&r2=1503193&view=diff
==============================================================================
--- perl/modperl/branches/httpd24/src/modules/perl/modperl_interp.c (original)
+++ perl/modperl/branches/httpd24/src/modules/perl/modperl_interp.c Mon Jul 15 12:03:58 2013
@@ -351,6 +351,13 @@ modperl_interp_t *modperl_interp_pool_se
              * before server merge.
              */
             modperl_init_vhost(s, p, NULL);
+            if (!scfg->mip) {
+                /* FIXME: We get here if global "server_rec" == s, scfg->mip
+                 * is not created then. I'm not sure if that's bug or 
+                 * bad/good design decicision. For now just return NULL.
+                 */
+                return NULL;
+            }
         }
 
         interp = scfg->mip->parent;

Modified: perl/modperl/branches/httpd24/src/modules/perl/modperl_util.c
URL: http://svn.apache.org/viewvc/perl/modperl/branches/httpd24/src/modules/perl/modperl_util.c?rev=1503193&r1=1503192&r2=1503193&view=diff
==============================================================================
--- perl/modperl/branches/httpd24/src/modules/perl/modperl_util.c (original)
+++ perl/modperl/branches/httpd24/src/modules/perl/modperl_util.c Mon Jul 15 12:03:58 2013
@@ -994,43 +994,44 @@ static const char *perl_parse_require_li
     int count;
     void *key;
     auth_callback *ab;
-    modperl_interp_t *interp = NULL;
+    modperl_interp_t *interp = modperl_interp_pool_select(cmd->server->process->pool, cmd->server);
+    if (interp) {
+        dTHXa(interp->perl);
+        dSP;
 
-    if (global_authz_providers == NULL) {
-        return ret;
-    }
-
-    apr_pool_userdata_get(&key, AUTHZ_PROVIDER_NAME_NOTE, cmd->temp_pool);
-    ab = apr_hash_get(global_authz_providers, (char *) key, APR_HASH_KEY_STRING);
-    if (ab == NULL || ab->cb2 == NULL) {
-        return ret;
-    }
+        if (global_authz_providers == NULL) {
+            return ret;
+        }
 
-    modperl_interp_pool_select(cmd->server->process->pool, cmd->server);
-    dTHXa(interp->perl);
-    dSP;
-    ENTER;
-    SAVETMPS;
-    PUSHMARK(SP);
-    XPUSHs(sv_2mortal(modperl_ptr2obj(aTHX_ "Apache2::CmdParms", cmd)));
-    XPUSHs(sv_2mortal(newSVpv(require_line, 0)));
-    PUTBACK;
-    count = call_sv(ab->cb2, G_SCALAR);
-    SPAGAIN;
+        apr_pool_userdata_get(&key, AUTHZ_PROVIDER_NAME_NOTE, cmd->temp_pool);
+        ab = apr_hash_get(global_authz_providers, (char *) key, APR_HASH_KEY_STRING);
+        if (ab == NULL || ab->cb2 == NULL) {
+            return ret;
+        }
 
-    if (count == 1) {
-        ret_sv = POPs;
-        if (SvOK(ret_sv)) {
-            char *tmp = SvPV_nolen(ret_sv);
-            if (*tmp != '\0') {
-                ret = apr_pstrdup(cmd->pool, tmp);
+        ENTER;
+        SAVETMPS;
+        PUSHMARK(SP);
+        XPUSHs(sv_2mortal(modperl_ptr2obj(aTHX_ "Apache2::CmdParms", cmd)));
+        XPUSHs(sv_2mortal(newSVpv(require_line, 0)));
+        PUTBACK;
+        count = call_sv(ab->cb2, G_SCALAR);
+        SPAGAIN;
+
+        if (count == 1) {
+            ret_sv = POPs;
+            if (SvOK(ret_sv)) {
+                char *tmp = SvPV_nolen(ret_sv);
+                if (*tmp != '\0') {
+                    ret = apr_pstrdup(cmd->pool, tmp);
+                }
             }
         }
-    }
 
-    PUTBACK;
-    FREETMPS;
-    LEAVE;
+        PUTBACK;
+        FREETMPS;
+        LEAVE;
+    }
     return ret;
 }