Patch mailparse-fix_parse.patch for mailparse Bug #63542
Patch version 2012-11-16 18:09 UTC
Return to Bug #63542 |
Download this patch
Patch Revisions:
Developer: vgabor@vgabor.com
--- mailparse.c.orig 1970-01-01 10:14:21.000000000 +0100
+++ mailparse.c 2012-11-16 16:58:01.000000000 +0000
@@ -1081,6 +1081,8 @@
int got = php_stream_read(stream, filebuf, MAILPARSE_BUFSIZ);
if (got > 0) {
if (FAILURE == php_mimepart_parse(part, filebuf, got TSRMLS_CC)) {
+ /* We have to destroy the already allocated part, if we not return it */
+ php_mimepart_free(part TSRMLS_CC);
RETVAL_FALSE;
break;
}
--- php_mailparse_mime.c.orig 1970-01-01 10:13:08.000000000 +0100
+++ php_mailparse_mime.c 2012-11-16 17:03:38.000000000 +0000
@@ -722,7 +722,19 @@
if (len < bufsize && buf[len] == '\n') {
++len;
smart_str_appendl(&part->parsedata.workbuf, buf, len);
- php_mimepart_process_line(part TSRMLS_CC);
+ if (php_mimepart_process_line(part TSRMLS_CC) == FAILURE) {
+ /* php_mimepart_process_line() only returns FAILURE in case the count of children
+ * have exceeded MAXPARTS and doing so at the very begining, without doing any work.
+ * It'd do this for all of the following lines, since the exceeded state won't change.
+ * As no additional work have been done since the last php_mimepart_process_line() call,
+ * it is safe to break the loop now not caring about the rest of the code.
+ *
+ * Known issues:
+ * - some callers aren't obeying the returned value, but that's in the mailmessage
+ * object which is not documented and seemingly otdated/unfinished anyway
+ */
+ return FAILURE;
+ };
part->parsedata.workbuf.len = 0;
} else {
smart_str_appendl(&part->parsedata.workbuf, buf, len);
|