/*
- * Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>, and others
+ * Copyright (C) 1996-2002,2004,2007 Michael R. Elkins <me@mutt.org>, and others
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
#endif /* M_CRYPTHOOK */
{
regerror (rc, rx, err->data, err->dsize);
- regfree (rx);
FREE (&rx);
goto error;
}
else
strfcpy (path, NONULL (Outbox), pathlen);
}
- mutt_pretty_mailbox (path);
+ mutt_pretty_mailbox (path, pathlen);
}
static char *_mutt_string_hook (const char *match, int hook)
#ifdef USE_SOCKET
void mutt_account_hook (const char* url)
{
+ /* parsing commands with URLs in an account hook can cause a recursive
+ * call. We just skip processing if this occurs. Typically such commands
+ * belong in a folder-hook -- perhaps we should warn the user. */
+ static int inhook = 0;
+
HOOK* hook;
BUFFER token;
BUFFER err;
char buf[STRING];
+ if (inhook)
+ return;
+
err.data = buf;
err.dsize = sizeof (buf);
memset (&token, 0, sizeof (token));
if ((regexec (hook->rx.rx, url, 0, NULL, 0) == 0) ^ hook->rx.not)
{
+ inhook = 1;
+
if (mutt_parse_rc_line (hook->command, &token, &err) == -1)
{
FREE (&token.data);
mutt_error ("%s", err.data);
mutt_sleep (1);
+ inhook = 0;
return;
}
+
+ inhook = 0;
}
}