imap.preformattedHTML and imap.sslverify
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Feb 6, 2010, 19:26 UTC
- Message-ID
- <7v7hqqxj10.fsf@alter.siamese.dyndns.org>
I hate to bring up a topic that is almost a year old, but has either of these configuration variables ever worked?
The code does this while reading its configuration file:
static int git_imap_config(const char *key, const char *val, void *cb)
{
char imap_key[] = "imap."; if (strncmp(key, imap_key, sizeof imap_key - 1))
return 0; if (!val)
return config_error_nonbool(key);
...
else if (!strcmp("sslverify", key))
server.ssl_verify = git_config_bool(key, val);
else if (!strcmp("preformattedHTML", key))
server.use_html = git_config_bool(key, val);Two issues:
- The body of the function is protected by "nonbool" written back in the days when there was no boolean variables in imap.* namespace. Hence, a user cannot write
[imap]
sslverifyand turn it on. The user needs to write
[imap]
sslverify = Truewhich is against the parsing rules for boolean variables.
- The config parser downcases the key before calling the parse callback
function, so !strcmp("preformattedHTML", key) will never trigger.The fix is obvious (see below), but I am far more disturbed by the apparent lack of testing. Especially, preformattedHTML one would have never worked as setting the configuration is the only way to trigger this.
Could peole _test_ this patch and report, as I don't use this program at all.
Thanks.
imap-send.c | 15 ++++++++------- 1 files changed, 8 insertions(+), 7 deletions(-)
diff --git a/imap-send.c b/imap-send.c index de8114b..ea769a9 100644 --- a/imap-send.c +++ b/imap-send.c @@ -1335,11 +1335,16 @@ static int git_imap_config(const char *key, const char *val, void *cb) if (strncmp(key, imap_key, sizeof imap_key - 1)) return 0; - if (!val) - return config_error_nonbool(key); - key += sizeof imap_key - 1; + /* check booleans first, and barf on others */ + if (!strcmp("sslverify", key)) + server.ssl_verify = git_config_bool(key, val); + else if (!strcmp("preformattedhtml", key)) + server.use_html = git_config_bool(key, val); + else if (!val) + return config_error_nonbool(key); + if (!strcmp("folder", key)) { imap_folder = xstrdup(val); } else if (!strcmp("host", key)) { @@ -1360,10 +1365,6 @@ static int git_imap_config(const char *key, const char *val, void *cb) server.port = git_config_int(key, val); else if (!strcmp("tunnel", key)) server.tunnel = xstrdup(val); - else if (!strcmp("sslverify", key)) - server.ssl_verify = git_config_bool(key, val); - else if (!strcmp("preformattedHTML", key)) - server.use_html = git_config_bool(key, val); return 0; }