Skip to content

Commit

Permalink
Merge r1429582 from trunk:
Browse files Browse the repository at this point in the history
According to my testing, one special case of 'log_xlate_error', i.e. EES_INCOMPLETE_CHAR,
 is 13x (!!!) faster with the use 'ap_bin2hex' instead of apr_snprintf(..., "%02X" + srlen for each character.

Output is *not* exactly the same. It was uppercase, now it is lowercase.
It is just for logging, so I don't think it is an issue.
Should it be, a call to ap_strtoupper can be added.

So sad it is just for logging in case of error... no real speedup to be expected in real life .

Submitted by: jailletc36
Reviewed/backported by: jim


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.4.x@1455221 13f79535-47bb-0310-9956-ffa450edef68
  • Loading branch information
Jim Jagielski committed Mar 11, 2013
1 parent f3b64b8 commit 8231607
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 13 deletions.
6 changes: 0 additions & 6 deletions STATUS
Original file line number Diff line number Diff line change
Expand Up @@ -117,12 +117,6 @@ PATCHES ACCEPTED TO BACKPORT FROM TRUNK:
2.4.x cumulative patch: http://people.apache.org/~jailletc36/backport5.patch (minus CHANGES for 1448171)
+1: jailletc36, igalic, jim

* mod_charset_lite: clean up and speed up special case of logging function by x13 using ap_bin2hex intoduced in 2.4.4
It will be in lowercase instead of uppercase, but it is only for logging. I don't think this is a real issue.
trunk patch: http://svn.apache.org/viewvc?view=revision&revision=1429582
2.4.x patch: trunk patch applies.
+1: jailletc36, humbedooh, jim

* mod_log_forensic: Speed up logging of characters that need to be escaped. PR 50919
trunk patch: http://svn.apache.org/viewvc?view=revision&revision=1429564
2.4.x patch: trunk patch applies.
Expand Down
16 changes: 9 additions & 7 deletions modules/filters/mod_charset_lite.c
Original file line number Diff line number Diff line change
Expand Up @@ -474,7 +474,7 @@ static void log_xlate_error(ap_filter_t *f, apr_status_t rv)
charset_filter_ctx_t *ctx = f->ctx;
const char *msg;
char msgbuf[100];
int cur;
int len;

switch(ctx->ees) {
case EES_LIMIT:
Expand All @@ -492,12 +492,14 @@ static void log_xlate_error(ap_filter_t *f, apr_status_t rv)
case EES_INCOMPLETE_CHAR:
rv = 0;
strcpy(msgbuf, APLOGNO(02196) "xlate filter - incomplete char at end of input - ");
cur = 0;
while ((apr_size_t)cur < ctx->saved) {
apr_snprintf(msgbuf + strlen(msgbuf), sizeof(msgbuf) - strlen(msgbuf),
"%02X", (unsigned)ctx->buf[cur]);
++cur;
}
len = ctx->saved;

/* We must ensure not to process more than what would fit in the
* remaining of the destination buffer, including terminating NULL */
if (len > (sizeof(msgbuf) - strlen(msgbuf) - 1) / 2)
len = (sizeof(msgbuf) - strlen(msgbuf) - 1) / 2;

ap_bin2hex(ctx->buf, len, msgbuf + strlen(msgbuf));
msg = msgbuf;
break;
case EES_DOWNSTREAM:
Expand Down

0 comments on commit 8231607

Please sign in to comment.