From: Marko Kreen Date: Tue, 21 Sep 2010 13:16:48 +0000 (-0700) Subject: Better param comparision in case of missing params X-Git-Tag: pgbouncer_1_4_rc3~38 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=6d608b32ce7d6bac7741113f0044c291221044ee;p=pgbouncer Better param comparision in case of missing params --- diff --git a/lib b/lib index 4ccc2c4..8d04ff2 160000 --- a/lib +++ b/lib @@ -1 +1 @@ -Subproject commit 4ccc2c438e843b34dd6d11a597f86804595cdf4d +Subproject commit 8d04ff2e59f919d58549c8f8faaa56d3d876efc7 diff --git a/src/varcache.c b/src/varcache.c index 33dc634..f7db70f 100644 --- a/src/varcache.c +++ b/src/varcache.c @@ -80,21 +80,27 @@ set_value: } static int apply_var(PktBuf *pkt, const char *key, - const char *cval, const char *sval) + const struct PStr *cval, + const struct PStr *sval) { char buf[128]; char qbuf[128]; unsigned len; - if (strcasecmp(cval, sval) == 0) + /* if unset, skip */ + if (!cval || !sval || !*cval->str) return 0; - /* if unset, ignore */ - if (!*cval) + /* if equal, skip */ + if (cval == sval) + return 0; + + /* ignore case difference */ + if (strcasecmp(cval->str, sval->str) == 0) return 0; /* the string may have been taken from startup pkt */ - if (!pg_quote_literal(qbuf, cval, sizeof(qbuf))) + if (!pg_quote_literal(qbuf, cval->str, sizeof(qbuf))) return 0; /* add SET statement to packet */ @@ -124,8 +130,7 @@ bool varcache_apply(PgSocket *server, PgSocket *client, bool *changes_p) for (lk = lookup; lk->name; lk++) { sval = get_value(&server->vars, lk); cval = get_value(&client->vars, lk); - if (cval) - changes += apply_var(pkt, lk->name, cval->str, sval->str); + changes += apply_var(pkt, lk->name, cval, sval); } *changes_p = changes > 0; if (!changes)