Changes with Apache 2.0.48
+ *) mod_cgid: fix a hash table corruption problem which could
+ result in the wrong script being cleaned up at the end of a
+ request. [Jeff Trawick]
+
*) Update httpd-*.conf to be clearer in describing the connection
between AddType and AddEncoding for defining the meaning of
compressed file extensions. [Roy Fielding]
APACHE 2.0 STATUS: -*-text-*-
-Last modified at [$Date: 2003/10/13 17:28:08 $]
+Last modified at [$Date: 2003/10/13 19:18:21 $]
Release:
modules/generators/mod_info.c r1.151
+1: trawick
- * mod_cgid: fix a hash table corruption problem which could
- result in the wrong script being cleaned up at the end of a
- request.
- modules/generators/mod_cgid.c r1.157
- +1: trawick, stoddard, gregames
-
* httpd-2.0's config parser is incompatible with httpd-1.3's one,
which allowed containers like <Perl>. httpd-2.0's config parser
doesn't like container directives with no arguments (Syntax
apr_filename_of_pathname(r->filename));
}
else {
- apr_hash_set(script_hash, &cgid_req.conn_id, sizeof(cgid_req.conn_id),
+ /* We don't want to leak storage for the key, so only allocate
+ * a key if the key doesn't exist yet in the hash; there are
+ * only a limited number of possible keys (one for each
+ * possible thread in the server), so we can allocate a copy
+ * of the key the first time a thread has a cgid request.
+ * Note that apr_hash_set() only uses the storage passed in
+ * for the key if it is adding the key to the hash for the
+ * first time; new key storage isn't needed for replacing the
+ * existing value of a key.
+ */
+ void *key;
+
+ if (apr_hash_get(script_hash, &cgid_req.conn_id, sizeof(cgid_req.conn_id))) {
+ key = &cgid_req.conn_id;
+ }
+ else {
+ key = apr_pcalloc(pcgi, sizeof(cgid_req.conn_id));
+ memcpy(key, &cgid_req.conn_id, sizeof(cgid_req.conn_id));
+ }
+ apr_hash_set(script_hash, key, sizeof(cgid_req.conn_id),
(void *)procnew->pid);
}
}