diff --git a/src/smblib/smbtxt.c b/src/smblib/smbtxt.c
index 90db4941383cf1c927db15a7eeec606611110ee0..bb2221d7623aa1014abd48c934a7332fa79c248c 100644
--- a/src/smblib/smbtxt.c
+++ b/src/smblib/smbtxt.c
@@ -251,9 +251,9 @@ char* qp_decode(char* buf)
 	return buf;
 }
 
-static enum content_transfer_encoding mime_getxferencoding(char* beg, char* end)
+static enum content_transfer_encoding mime_getxferencoding(const char* beg, const char* end)
 {
-	char* p = beg;
+	const char* p = beg;
 
 	while(p < end) {
 		SKIP_WHITESPACE(p);
@@ -276,10 +276,10 @@ static enum content_transfer_encoding mime_getxferencoding(char* beg, char* end)
 }
 
 /* ToDo: parse and return the "modification-date" value */
-static BOOL mime_getattachment(char* beg, char* end, char* attachment, size_t attachment_len)
+static BOOL mime_getattachment(const char* beg, const char* end, char* attachment, size_t attachment_len)
 {
 	char fname[MAX_PATH+1];
-	char* p = beg;
+	const char* p = beg;
 
 	while(p < end) {
 		SKIP_WHITESPACE(p);
@@ -336,6 +336,8 @@ void SMBCALL smb_parse_content_type(const char* content_type, char** subtype, ch
 	char buf[512];
 	SAFECOPY(buf, content_type);
 	char* p;
+	if((p = strstr(buf, "\r\n\r\n")) != NULL)	/* Don't parse past the end of header */
+		*p = 0;
 	if((p = strstr(buf, "text/")) == buf) {
 		p += 5;
 		if(subtype != NULL) {
@@ -363,10 +365,10 @@ void SMBCALL smb_parse_content_type(const char* content_type, char** subtype, ch
 }
 
 /* Find the specified content-type in a MIME-encoded message body, recursively */
-static char* mime_getcontent(char* buf, const char* content_type, const char* content_match
+static const char* mime_getcontent(const char* buf, const char* content_type, const char* content_match
 	,int depth, enum content_transfer_encoding* encoding, char** charset, char* attachment, size_t attachment_len, int index)
 {
-	char*	txt;
+	const char*	txt;
 	char*	p;
 	char	boundary[256];
 	char	match1[128];
@@ -407,8 +409,6 @@ static char* mime_getcontent(char* buf, const char* content_type, const char* co
 		p = strstr(txt, "\r\n\r\n");	/* End of header */
 		if(p==NULL)
 			continue;
-		*p = 0;	// terminate the header
-		char* content_type;
 		for(content_type = txt; content_type < p; content_type++) {
 			SKIP_WHITESPACE(content_type);
 			if(strnicmp(content_type, "Content-Type:", 13) == 0) {
@@ -420,15 +420,16 @@ static char* mime_getcontent(char* buf, const char* content_type, const char* co
 		}
 		if(content_type >= p)
 			continue;
+		const char* cp;
 		if((match_len && strnicmp(content_type, match1, match_len) && strnicmp(content_type, match2, match_len))
 			|| (attachment != NULL && !mime_getattachment(txt, p, attachment, attachment_len))) {
-			if((p = mime_getcontent(p, content_type, content_match, depth + 1, encoding, charset, attachment, attachment_len, index)) != NULL)
-				return p;
+			if((cp = mime_getcontent(p, content_type, content_match, depth + 1, encoding, charset, attachment, attachment_len, index)) != NULL)
+				return cp;
 			continue;
 		}
 		if(found++ != index) {
-			if((p = mime_getcontent(p, content_type, content_match, depth + 1, encoding, charset, attachment, attachment_len, index)) != NULL)
-				return p;
+			if((cp = mime_getcontent(p, content_type, content_match, depth + 1, encoding, charset, attachment, attachment_len, index)) != NULL)
+				return cp;
 			continue;
 		}
 		if(encoding != NULL)
@@ -449,7 +450,7 @@ static char* mime_getcontent(char* buf, const char* content_type, const char* co
 /* Returns NULL if there is no MIME-encoded plain-text/html portion of the message */
 char* SMBCALL smb_getplaintext(smbmsg_t* msg, char* buf)
 {
-	char*	txt;
+	const char*	txt;
 	enum content_transfer_encoding xfer_encoding = CONTENT_TRANFER_ENCODING_NONE;
 
 	FREE_AND_NULL(msg->text_subtype);
@@ -487,7 +488,7 @@ char* SMBCALL smb_getplaintext(smbmsg_t* msg, char* buf)
 /* This function is destructive (over-writes 'buf' with decoded attachment)! */
 uint8_t* SMBCALL smb_getattachment(smbmsg_t* msg, char* buf, char* filename, size_t filename_len, uint32_t* filelen, int index)
 {
-	char*	txt;
+	const char*	txt;
 	enum content_transfer_encoding xfer_encoding = CONTENT_TRANFER_ENCODING_NONE;
 
 	if(msg->mime_version == NULL || msg->content_type == NULL)	/* not MIME */