See 19434821 for more details.

These are in the IMAP code, which was accidentally skipped in the
previous testing.

imap_get_literal_count() is always passed a modifiable buf parameter,
(which the callers are also modifying):.  Since the function is, in
fact, sneakily modifying buf, change the signature to reflect reality.

Split off a different constc variable for the case inside
imap_parse_path() that was calling strchr on a const char * "path"
argument.
---
 imap/imap_private.h | 2 +-
 imap/util.c         | 9 +++++----
 2 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/imap/imap_private.h b/imap/imap_private.h
index 32cd7259..7cceb011 100644
--- a/imap/imap_private.h
+++ b/imap/imap_private.h
@@ -315,7 +315,7 @@ void imap_free_idata (IMAP_DATA** idata);
 char* imap_fix_path (IMAP_DATA* idata, const char* mailbox, char* path,
                      size_t plen);
 void imap_cachepath(IMAP_DATA *idata, const char *mailbox, BUFFER *dest);
-int imap_get_literal_count (const char* buf, unsigned int* bytes);
+int imap_get_literal_count (char* buf, unsigned int* bytes);
 char* imap_get_qualifier (char* buf);
 int imap_mxcmp (const char* mx1, const char* mx2);
 char* imap_next_word (char* s);
diff --git a/imap/util.c b/imap/util.c
index 87ecf4db..681713a5 100644
--- a/imap/util.c
+++ b/imap/util.c
@@ -315,6 +315,7 @@ int imap_parse_path (const char* path, IMAP_MBOX* mx)
   char tmp[128];
   ciss_url_t url;
   char *c;
+  const char *constc;
   int n;
 
   if (!ImapPort)
@@ -365,12 +366,12 @@ int imap_parse_path (const char* path, IMAP_MBOX* mx)
     if (sscanf (path, "{%127[^}]}", tmp) != 1)
       return -1;
 
-    c = strchr (path, '}');
-    if (!c)
+    constc = strchr (path, '}');
+    if (!constc)
       return -1;
     else
       /* walk past closing '}' */
-      mx->mbox = safe_strdup (c+1);
+      mx->mbox = safe_strdup (constc+1);
 
     if ((c = strrchr (tmp, '@')))
     {
@@ -607,7 +608,7 @@ void imap_cachepath (IMAP_DATA *idata, const char *mailbox, 
BUFFER *dest)
 
 /* imap_get_literal_count: write number of bytes in an IMAP literal into
  *   bytes, return 0 on success, -1 on failure. */
-int imap_get_literal_count(const char *buf, unsigned int *bytes)
+int imap_get_literal_count(char *buf, unsigned int *bytes)
 {
   char *pc;
   char *pn;
-- 
2.53.0

Reply via email to