joes 2004/06/25 20:25:10
Modified: glue/perl/xsbuilder/Apache/Cookie Cookie_pm
glue/perl/xsbuilder/Apache/Request Request_pm
glue/perl/xsbuilder/Apache/Upload Upload_pm
Log:
All APR::Table set-type methods (add(), merge(), etc) are unsafe
in our Apache::*::Table subclasses These methods need to be
overridden to prevent segfaults within our C code, which treats
apr_table entries as being "promotable" to apreq_value_t,
apreq_param_t or apreq_cookie_t structs.
Revision Changes Path
1.15 +9 -1 httpd-apreq-2/glue/perl/xsbuilder/Apache/Cookie/Cookie_pm
Index: Cookie_pm
===================================================================
RCS file:
/home/cvs/httpd-apreq-2/glue/perl/xsbuilder/Apache/Cookie/Cookie_pm,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- Cookie_pm 19 Jun 2004 15:38:18 -0000 1.14
+++ Cookie_pm 26 Jun 2004 03:25:10 -0000 1.15
@@ -6,7 +6,15 @@
push our(@ISA), __PACKAGE__ -> env;
package Apache::Cookie::Table;
-push our(@ISA), 'APR::Table';
+push our(@ISA), "APR::Table";
+BEGIN {
+ my @BAD_METHODS = qw/add compress make merge overlap set STORE/;
+ for (@BAD_METHODS) {
+ no strict;
+ next unless my $meth = APR::Table->can($_);
+ *{$_} = sub {die __PACKAGE__ ."::", "$_: unsafe operation"};
+ }
+}
package Apache::Cookie;
1.11 +9 -1
httpd-apreq-2/glue/perl/xsbuilder/Apache/Request/Request_pm
Index: Request_pm
===================================================================
RCS file:
/home/cvs/httpd-apreq-2/glue/perl/xsbuilder/Apache/Request/Request_pm,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- Request_pm 14 Jun 2004 02:02:23 -0000 1.10
+++ Request_pm 26 Jun 2004 03:25:10 -0000 1.11
@@ -3,7 +3,15 @@
use APR::Brigade;
package Apache::Request::Table;
-push our(@ISA), 'APR::Table';
+push our(@ISA), "APR::Table";
+BEGIN {
+ my @BAD_METHODS = qw/add compress make merge overlap set STORE/;
+ for (@BAD_METHODS) {
+ no strict;
+ next unless my $meth = APR::Table->can($_);
+ *{$_} = sub {die __PACKAGE__ ."::", "$_: unsafe operation"};
+ }
+}
package Apache::Request;
push our(@ISA), __PACKAGE__ -> env;
1.3 +9 -1 httpd-apreq-2/glue/perl/xsbuilder/Apache/Upload/Upload_pm
Index: Upload_pm
===================================================================
RCS file:
/home/cvs/httpd-apreq-2/glue/perl/xsbuilder/Apache/Upload/Upload_pm,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- Upload_pm 19 Jun 2004 15:38:18 -0000 1.2
+++ Upload_pm 26 Jun 2004 03:25:10 -0000 1.3
@@ -5,4 +5,12 @@
use APR::PerlIO;
package Apache::Upload::Table;
-push our(@ISA), 'APR::Table';
+push our(@ISA), "APR::Table";
+BEGIN {
+ my @BAD_METHODS = qw/add compress make merge overlap set STORE/;
+ for (@BAD_METHODS) {
+ no strict;
+ next unless my $meth = APR::Table->can($_);
+ *{$_} = sub {die __PACKAGE__ ."::", "$_: unsafe operation"};
+ }
+}