php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Request #49960 Add INTERNALDATE to imap_append
Submitted: 2009-10-22 16:34 UTC Modified: 2010-01-05 00:55 UTC
Votes:1
Avg. Score:5.0 ± 0.0
Reproduced:1 of 1 (100.0%)
Same Version:0 (0.0%)
Same OS:0 (0.0%)
From: nick at mailtrust dot com Assigned: pajoye (profile)
Status: Closed Package: Feature/Change Request
PHP Version: 5.3SVN-2009-10-22 (SVN) OS: CentOS 5
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: nick at mailtrust dot com
New email:
PHP Version: OS:

 

 [2009-10-22 16:34 UTC] nick at mailtrust dot com
Description:
------------
Jake Levitt and I created this patch which adds the option to set a message's INTERNALDATE when appending it to a mail server using imap.  Any chance we can get this included into the php 5.3 and 6 development branches?  The diff below was done against the php-src/branches/PHP_5_3 branch.  If you guys need me to apply the changes to a different branch or snapshot, please let me know.

Here's the svn diff (done in my repo)... if you need something else please let me know:


Index: ext/imap/php_imap.c
===================================================================
--- ext/imap/php_imap.c	(revision 3399)
+++ ext/imap/php_imap.c	(working copy)
@@ -41,6 +41,7 @@
 #include "ext/standard/info.h"
 #include "ext/standard/file.h"
 #include "ext/standard/php_smart_str.h"
+#include "ext/pcre/php_pcre.h"
 
 #ifdef ERROR
 #undef ERROR
@@ -118,6 +119,7 @@
 	ZEND_ARG_INFO(0, folder)
 	ZEND_ARG_INFO(0, message)
 	ZEND_ARG_INFO(0, options)
+	ZEND_ARG_INFO(0, date)
 ZEND_END_ARG_INFO()
 
 ZEND_BEGIN_ARG_INFO_EX(arginfo_imap_num_msg, 0, 0, 1)
@@ -1265,25 +1267,48 @@
 }
 /* }}} */
 
-/* {{{ proto bool imap_append(resource stream_id, string folder, string message [, string options])
+/* {{{ proto bool imap_append(resource stream_id, string folder, string message [, string options [, string internal_date]])
    Append a new message to a specified mailbox */
 PHP_FUNCTION(imap_append)
 {
 	zval *streamind;
-	char *folder, *message, *flags = NULL;
-	int folder_len, message_len, flags_len = 0;
+	char *folder, *message, *internal_date = NULL, *flags = NULL;
+	int folder_len, message_len, internal_date_len = 0, flags_len = 0;
 	pils *imap_le_struct;
 	STRING st;
 
-	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rss|s", &streamind, &folder, &folder_len, &message, &message_len, &flags, &flags_len) == FAILURE) {
+	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rss|ss", &streamind, &folder, &folder_len, &message, &message_len, &flags, &flags_len, &internal_date, &internal_date_len) == FAILURE) {
 		return;
 	}
 
+	char* regex = "/[ 0-3][0-9]-((Jan)|(Feb)|(Mar)|(Apr)|(May)|(Jun)|(Jul)|(Aug)|(Sep)|(Oct)|(Nov)|(Dec))-[0-9]{4} [0-2][0-9]:[0-5][0-9]:[0-5][0-9] [+-][0-9]{4}/";
+	int regex_len = strlen(regex);
+	pcre_cache_entry *pce;				/* Compiled regex */
+	zval *subpats = NULL;				/* Parts (not used) */
+	long regex_flags = 0;				/* Flags (not used) */
+	long start_offset = 0;				/* Start offset (not used) */
+	int global = 0;
+
+	if (internal_date) {
+		/* Make sure the given internal_date string matches the RFC specified format */
+		if ((pce = pcre_get_compiled_regex_cache(regex, regex_len TSRMLS_CC)) == NULL) {
+			RETURN_FALSE;
+		}
+
+		php_pcre_match_impl(pce, internal_date, internal_date_len, return_value, subpats, global,
+			0, regex_flags, start_offset TSRMLS_CC);
+
+		if (!Z_LVAL_P(return_value)) {
+			php_error_docref(NULL TSRMLS_CC, E_WARNING, "internal date not correctly formatted");
+			internal_date = NULL;
+		}
+	}
+
 	ZEND_FETCH_RESOURCE(imap_le_struct, pils *, &streamind, -1, "imap", le_imap);
 
 	INIT (&st, mail_string, (void *) message, message_len);
 
-	if (mail_append_full(imap_le_struct->imap_stream, folder, (flags ? flags : NIL), NIL, &st)) {
+	if (mail_append_full(imap_le_struct->imap_stream, folder, (flags ? flags : NIL), (internal_date ? internal_date : NIL), &st)) {
 		RETURN_TRUE;
 	} else {
 		RETURN_FALSE;



Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2009-12-07 18:56 UTC] nick at mailtrust dot com
Is there any update on when/if this patch will make it in an upcoming release?

Thanks,
Nick
 [2010-01-05 00:55 UTC] pajoye@php.net
This bug has been fixed in SVN.

Snapshots of the sources are packaged every three hours; this change
will be in the next snapshot. You can grab the snapshot at
http://snaps.php.net/.
 
Thank you for the report, and for helping us make PHP better.


 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Sat Dec 21 16:01:28 2024 UTC