dgaudet 98/01/13 14:21:09
Modified: . STATUS
src/modules/standard mod_rewrite.c
Log:
make mod_rewrite use ap_cpystrn
Reviewed by: Ralf Engelschall, Jim Jagielski
Revision Changes Path
1.83 +1 -6 apachen/STATUS
Index: STATUS
===================================================================
RCS file: /export/home/cvs/apachen/STATUS,v
retrieving revision 1.82
retrieving revision 1.83
diff -u -r1.82 -r1.83
--- STATUS 1998/01/13 22:08:27 1.82
+++ STATUS 1998/01/13 22:21:06 1.83
@@ -78,6 +78,7 @@
* Paul's WIN32: patch to allow for Doug's -c option
* Dean's [PATCH] unneeded pstrdup()s (in table_*() calls)
* Brian Havard's [Patch] OS/2 - fix up shut down
+ * Dean's [PATCH] make mod_rewrite use ap_cpystrn
Available Patches:
@@ -96,12 +97,6 @@
* Dean's [PATCH] OSF/1 serialized accept
<[EMAIL PROTECTED]>
Status: Dean +1, Jim +1 (on code)
-
- * Dean's [PATCH] make mod_rewrite use ap_cpystrn
- <[EMAIL PROTECTED]>
- Status: waiting to find out status of Ralf's mod_rewrite restructuring
- Ralf says go for it now.
- Status: Dean +1, Jim +1
* Dean's [PATCH] yet another slow function
<[EMAIL PROTECTED]>
1.60 +29 -51 apachen/src/modules/standard/mod_rewrite.c
Index: mod_rewrite.c
===================================================================
RCS file: /export/home/cvs/apachen/src/modules/standard/mod_rewrite.c,v
retrieving revision 1.59
retrieving revision 1.60
diff -u -r1.59 -r1.60
--- mod_rewrite.c 1998/01/11 20:55:21 1.59
+++ mod_rewrite.c 1998/01/13 22:21:07 1.60
@@ -1090,11 +1090,9 @@
n = prefix_stat(r->filename, &finfo);
if (n == 0) {
if ((cp = document_root(r)) != NULL) {
- strncpy(docroot, cp, sizeof(docroot)-1);
- EOS_PARANOIA(docroot);
+ l = ap_cpystrn(docroot, cp, sizeof(docroot)) - docroot;
/* always NOT have a trailing slash */
- l = strlen(docroot);
if (docroot[l-1] == '/') {
docroot[l-1] = '\0';
}
@@ -1714,8 +1712,7 @@
*/
if (strcmp(output, "-") == 0) {
for (i = 0; p->env[i] != NULL; i++) {
- strncpy(env, p->env[i], sizeof(env)-1);
- EOS_PARANOIA(env);
+ ap_cpystrn(env, p->env[i], sizeof(env));
expand_backref_inbuffer(r->pool, env, sizeof(env), briRR, '$');
expand_backref_inbuffer(r->pool, env, sizeof(env), briRC, '%');
add_env_variable(r, env);
@@ -1729,8 +1726,7 @@
* substitution URL string in `newuri'.
*/
/* 1. take the output string */
- strncpy(newuri, output, sizeof(newuri)-1);
- EOS_PARANOIA(newuri);
+ ap_cpystrn(newuri, output, sizeof(newuri));
/* 2. expand $N (i.e. backrefs to RewriteRule pattern) */
expand_backref_inbuffer(r->pool, newuri, sizeof(newuri), briRR, '$');
/* 3. expand %N (i.e. backrefs to latest RewriteCond pattern) */
@@ -1751,8 +1747,7 @@
*/
for (i = 0; p->env[i] != NULL; i++) {
/* 1. take the string */
- strncpy(env, p->env[i], sizeof(env)-1);
- EOS_PARANOIA(env);
+ ap_cpystrn(env, p->env[i], sizeof(env));
/* 2. expand $N (i.e. backrefs to RewriteRule pattern) */
expand_backref_inbuffer(r->pool, env, sizeof(env), briRR, '$');
/* 3. expand %N (i.e. backrefs to latest RewriteCond pattern) */
@@ -1913,8 +1908,7 @@
/* expand the regex backreferences from the RewriteRule ($0-$9),
then from the last RewriteCond (%0-%9) and then expand the
variables (%{....}) */
- strncpy(input, p->input, sizeof(input)-1);
- EOS_PARANOIA(input);
+ ap_cpystrn(input, p->input, sizeof(input));
expand_backref_inbuffer(r->pool, input, sizeof(input), briRR, '$');
expand_backref_inbuffer(r->pool, input, sizeof(input), briRC, '%');
expand_variables_inbuffer(r, input, sizeof(input));
@@ -2115,19 +2109,17 @@
/* cut the hostname and port out of the URI */
#ifdef APACHE_SSL
- strncpy(buf, r->filename+strlen(http_method(r))+3, sizeof(buf)-1);
+ ap_cpystrn(buf, r->filename+strlen(http_method(r))+3, sizeof(buf));
#else
- strncpy(buf, r->filename+7, sizeof(buf)-1);
+ ap_cpystrn(buf, r->filename+7, sizeof(buf));
#endif
- EOS_PARANOIA(buf);
hostp = buf;
for (cp = hostp; *cp != '\0' && *cp != '/' && *cp != ':'; cp++)
;
if (*cp == ':') {
/* set host */
*cp++ = '\0';
- strncpy(host, hostp, sizeof(host)-1);
- EOS_PARANOIA(host);
+ ap_cpystrn(host, hostp, sizeof(host));
/* set port */
portp = cp;
for (; *cp != '\0' && *cp != '/'; cp++)
@@ -2142,8 +2134,7 @@
else if (*cp == '/') {
/* set host */
*cp = '\0';
- strncpy(host, hostp, sizeof(host)-1);
- EOS_PARANOIA(host);
+ ap_cpystrn(host, hostp, sizeof(host));
*cp = '/';
/* set port */
port = DEFAULT_PORT;
@@ -2152,8 +2143,7 @@
}
else {
/* set host */
- strncpy(host, hostp, sizeof(host)-1);
- EOS_PARANOIA(host);
+ ap_cpystrn(host, hostp, sizeof(host));
/* set port */
port = DEFAULT_PORT;
/* set remaining url */
@@ -2246,9 +2236,8 @@
}
/* now apply the pregsub() function */
- strncpy(buf, pregsub(p, buf, bri->source,
- bri->nsub+1, bri->regmatch), nbuf-1);
- EOS_PARANOIA_SIZE(buf, nbuf);
+ ap_cpystrn(buf, pregsub(p, buf, bri->source,
+ bri->nsub+1, bri->regmatch), nbuf);
if (c != '$') {
/* restore the original $N backrefs */
@@ -2409,8 +2398,7 @@
}
}
*cpO = '\0';
- strncpy(uri, newuri, uri_len-1);
- uri[uri_len-1] = '\0';
+ ap_cpystrn(uri, newuri, uri_len);
return;
}
@@ -2551,19 +2539,17 @@
if ((fp = pfopen(r->pool, file, "r")) == NULL)
return NULL;
- strncpy(output, MAPFILE_OUTPUT, sizeof(output)-1);
- EOS_PARANOIA(output);
+ ap_cpystrn(output, MAPFILE_OUTPUT, sizeof(output));
while (fgets(line, sizeof(line), fp) != NULL) {
if (line[strlen(line)-1] == '\n')
line[strlen(line)-1] = '\0';
if (regexec(lookup_map_txtfile_regexp, line,
lookup_map_txtfile_regexp->re_nsub+1,
lookup_map_txtfile_regmatch, 0) == 0) {
- strncpy(result, pregsub(r->pool, output, line,
+ ap_cpystrn(result, pregsub(r->pool, output, line,
lookup_map_txtfile_regexp->re_nsub+1,
lookup_map_txtfile_regmatch),
- sizeof(result)-1); /* substitute in output */
- EOS_PARANOIA(result);
+ sizeof(result)); /* substitute in output */
cpT = strchr(result, ',');
*cpT = '\0';
curkey = result;
@@ -2910,8 +2896,7 @@
char *newbuf;
newbuf = expand_variables(r, buf);
if (strcmp(newbuf, buf) != 0) {
- strncpy(buf, newbuf, buf_len-1);
- buf[buf_len-1] = '\0';
+ ap_cpystrn(buf, newbuf, buf_len);
}
return;
}
@@ -2924,31 +2909,30 @@
char *cp2;
char *cp3;
int expanded;
+ char *outp;
+ char *endp;
- strncpy(input, str, sizeof(input)-1);
- EOS_PARANOIA(input);
+ ap_cpystrn(input, str, sizeof(input));
output[0] = '\0';
+ outp = output;
+ endp = output + sizeof(output);
expanded = 0;
for (cp = input; cp < input+MAX_STRING_LEN; ) {
if ((cp2 = strstr(cp, "%{")) != NULL) {
if ((cp3 = strstr(cp2, "}")) != NULL) {
*cp2 = '\0';
- strncpy(&output[strlen(output)], cp,
- sizeof(output)-strlen(output)-1);
+ outp = ap_cpystrn(outp, cp, endp - outp);
cp2 += 2;
*cp3 = '\0';
- strncpy(&output[strlen(output)], lookup_variable(r, cp2),
- sizeof(output)-strlen(output)-1);
+ outp = ap_cpystrn(outp, lookup_variable(r, cp2), endp -
outp);
cp = cp3+1;
expanded = 1;
continue;
}
}
- strncpy(&output[strlen(output)], cp,
- sizeof(output)-strlen(output)-1);
- EOS_PARANOIA(output);
+ outp = ap_cpystrn(outp, cp, endp - outp);
break;
}
return expanded ? pstrdup(r->pool, output) : str;
@@ -3355,9 +3339,7 @@
output = input;
/* first create a match string which always has a trailing slash */
- strncpy(matchbuf, match, sizeof(matchbuf)-1);
- EOS_PARANOIA(matchbuf);
- l = strlen(matchbuf);
+ l = ap_cpystrn(matchbuf, match, sizeof(matchbuf)) - matchbuf;
if (matchbuf[l-1] != '/') {
matchbuf[l] = '/';
matchbuf[l+1] = '\0';
@@ -3369,9 +3351,7 @@
output = pstrdup(r->pool, output+l);
/* and now add the base-URL as replacement prefix */
- strncpy(substbuf, subst, sizeof(substbuf)-1);
- EOS_PARANOIA(substbuf);
- l = strlen(substbuf);
+ l = ap_cpystrn(substbuf, subst, sizeof(substbuf)) - substbuf;
if (substbuf[l-1] != '/') {
substbuf[l] = '/';
substbuf[l+1] = '\0';
@@ -3480,8 +3460,7 @@
n = ((cp-s) > MAX_STRING_LEN-1 ? MAX_STRING_LEN-1 : (cp-s));
memcpy(var, s, n);
var[n] = '\0';
- strncpy(val, cp+1, sizeof(val)-1);
- EOS_PARANOIA(val);
+ ap_cpystrn(val, cp+1, sizeof(val));
table_set(r->subprocess_env, var, val);
rewritelog(r, 5, "setting env variable '%s' to '%s'", var, val);
}
@@ -3500,8 +3479,7 @@
char curpath[LONG_STRING_LEN];
char *cp;
- strncpy(curpath, path, sizeof(curpath)-1);
- EOS_PARANOIA(curpath);
+ ap_cpystrn(curpath, path, sizeof(curpath));
if (curpath[0] != '/')
return 0;
if ((cp = strchr(curpath+1, '/')) != NULL)