Author: joes
Date: Sun May 15 17:18:19 2005
New Revision: 170286

URL: http://svn.apache.org/viewcvs?rev=170286&view=rev
Log:
Fix the domain/path bug.  The problem is that EU::XSB generates
unsafe glue for char * attributes.  We need to make a pool copy
of the SV when setting domain/path; you can't just do a pointer
assignment here.


Modified:
    
httpd/apreq/trunk/glue/perl/xsbuilder/APR/Request/Cookie/APR__Request__Cookie.h
    httpd/apreq/trunk/glue/perl/xsbuilder/APR/Request/Cookie/Cookie.xs
    httpd/apreq/trunk/glue/perl/xsbuilder/maps/apreq_structures.map

Modified: 
httpd/apreq/trunk/glue/perl/xsbuilder/APR/Request/Cookie/APR__Request__Cookie.h
URL: 
http://svn.apache.org/viewcvs/httpd/apreq/trunk/glue/perl/xsbuilder/APR/Request/Cookie/APR__Request__Cookie.h?rev=170286&r1=170285&r2=170286&view=diff
==============================================================================
--- 
httpd/apreq/trunk/glue/perl/xsbuilder/APR/Request/Cookie/APR__Request__Cookie.h 
(original)
+++ 
httpd/apreq/trunk/glue/perl/xsbuilder/APR/Request/Cookie/APR__Request__Cookie.h 
Sun May 15 17:18:19 2005
@@ -180,3 +180,19 @@
     (void)items;
     XSRETURN_EMPTY;
 }
+
+static APR_INLINE
+char *apreq_xs_cookie_pool_copy(pTHX_ SV *obj, SV *value)
+{
+    IV iv;
+    STRLEN vlen;
+    char *v;
+    MAGIC *mg;
+    apr_pool_t *p;
+
+    v = SvPV(value, vlen);
+    mg = mg_find(obj, PERL_MAGIC_ext);
+    iv = SvIVX(mg->mg_obj);
+    p = INT2PTR(apr_pool_t *, iv);
+    return apr_pstrmemdup(p, v, vlen);
+}

Modified: httpd/apreq/trunk/glue/perl/xsbuilder/APR/Request/Cookie/Cookie.xs
URL: 
http://svn.apache.org/viewcvs/httpd/apreq/trunk/glue/perl/xsbuilder/APR/Request/Cookie/Cookie.xs?rev=170286&r1=170285&r2=170286&view=diff
==============================================================================
--- httpd/apreq/trunk/glue/perl/xsbuilder/APR/Request/Cookie/Cookie.xs 
(original)
+++ httpd/apreq/trunk/glue/perl/xsbuilder/APR/Request/Cookie/Cookie.xs Sun May 
15 17:18:19 2005
@@ -106,24 +106,126 @@
   OUTPUT:
     RETVAL
 
+char *
+path(cookie, path=NULL)
+    SV *cookie
+    SV *path
+
+  PREINIT:
+    apreq_cookie_t *c;
+    SV *obj;
+    IV iv;
+
+  CODE:
+    obj = apreq_xs_sv2object(aTHX_ cookie, COOKIE_CLASS, 'c');
+    iv = SvIVX(obj);
+    c = INT2PTR(apreq_cookie_t *, iv);
+
+    RETVAL = c->path;
+    if (items == 2)
+        c->path = apreq_xs_cookie_pool_copy(aTHX_ obj, path);
+    if (RETVAL == NULL)
+        XSRETURN_UNDEF;
+
+  OUTPUT:
+    RETVAL
+
+char *
+domain(cookie, domain=NULL)
+    SV *cookie
+    SV *domain
 
-SV*
-bind_handle(cookie, req)
+  PREINIT:
+    apreq_cookie_t *c;
+    SV *obj;
+    IV iv;
+
+  CODE:
+    obj = apreq_xs_sv2object(aTHX_ cookie, COOKIE_CLASS, 'c');
+    iv = SvIVX(obj);
+    c = INT2PTR(apreq_cookie_t *, iv);
+
+    RETVAL = c->domain;
+    if (items == 2)
+        c->domain = apreq_xs_cookie_pool_copy(aTHX_ obj, domain);
+    if (RETVAL == NULL)
+        XSRETURN_UNDEF;
+
+  OUTPUT:
+    RETVAL
+
+char *
+port(cookie, port=NULL)
     SV *cookie
-    SV *req
+    SV *port
+
   PREINIT:
-    MAGIC *mg;
+    apreq_cookie_t *c;
     SV *obj;
+    IV iv;
+
   CODE:
     obj = apreq_xs_sv2object(aTHX_ cookie, COOKIE_CLASS, 'c');
-    mg = mg_find(obj, PERL_MAGIC_ext);
-    req = apreq_xs_sv2object(aTHX_ req, HANDLE_CLASS, 'r');
-    RETVAL = newRV_noinc(mg->mg_obj);
-    SvREFCNT_inc(req);
-    mg->mg_obj = req;
+    iv = SvIVX(obj);
+    c = INT2PTR(apreq_cookie_t *, iv);
+
+    RETVAL = c->port;
+    if (items == 2)
+        c->port = apreq_xs_cookie_pool_copy(aTHX_ obj, port);
+    if (RETVAL == NULL)
+        XSRETURN_UNDEF;
 
   OUTPUT:
     RETVAL
+
+char *
+comment(cookie, comment=NULL)
+    SV *cookie
+    SV *comment
+
+  PREINIT:
+    apreq_cookie_t *c;
+    SV *obj;
+    IV iv;
+
+  CODE:
+    obj = apreq_xs_sv2object(aTHX_ cookie, COOKIE_CLASS, 'c');
+    iv = SvIVX(obj);
+    c = INT2PTR(apreq_cookie_t *, iv);
+
+    RETVAL = c->comment;
+    if (items == 2)
+        c->comment = apreq_xs_cookie_pool_copy(aTHX_ obj, comment);
+    if (RETVAL == NULL)
+        XSRETURN_UNDEF;
+
+  OUTPUT:
+    RETVAL
+
+char *
+commentURL(cookie, commentURL=NULL)
+    SV *cookie
+    SV *commentURL
+
+  PREINIT:
+    apreq_cookie_t *c;
+    SV *obj;
+    IV iv;
+
+  CODE:
+    obj = apreq_xs_sv2object(aTHX_ cookie, COOKIE_CLASS, 'c');
+    iv = SvIVX(obj);
+    c = INT2PTR(apreq_cookie_t *, iv);
+
+    RETVAL = c->commentURL;
+    if (items == 2)
+        c->commentURL = apreq_xs_cookie_pool_copy(aTHX_ obj, commentURL);
+    if (RETVAL == NULL)
+        XSRETURN_UNDEF;
+
+  OUTPUT:
+    RETVAL
+
 
 
 APR::Request::Cookie

Modified: httpd/apreq/trunk/glue/perl/xsbuilder/maps/apreq_structures.map
URL: 
http://svn.apache.org/viewcvs/httpd/apreq/trunk/glue/perl/xsbuilder/maps/apreq_structures.map?rev=170286&r1=170285&r2=170286&view=diff
==============================================================================
--- httpd/apreq/trunk/glue/perl/xsbuilder/maps/apreq_structures.map (original)
+++ httpd/apreq/trunk/glue/perl/xsbuilder/maps/apreq_structures.map Sun May 15 
17:18:19 2005
@@ -18,11 +18,11 @@
 </apreq_handle_t>
 
 <apreq_cookie_t MODULE=APR::Request::Cookie>
-  path
-  domain
-  port
-  comment
-  commentURL
+!  path
+!  domain
+!  port
+!  comment
+!  commentURL
 ! max_age
 ! flags
 !  v


Reply via email to