@@ -3032,6 +3032,25 @@ PHP_FUNCTION(imap_bodystruct)
30323032
30333033/* }}} */
30343034
3035+ static void php_imap_update_property_with_full_address_str (
3036+ zval * z_object , const char * property , size_t property_len , ADDRESS * address )
3037+ {
3038+ ADDRESS * current = address ;
3039+ current -> next = NULL ;
3040+
3041+ zend_string * full_address = _php_rfc822_write_address (current );
3042+ if (full_address ) {
3043+ zend_update_property_str (
3044+ Z_OBJCE_P (z_object ), Z_OBJ_P (z_object ),
3045+ property , property_len ,
3046+ full_address
3047+ );
3048+ zend_string_release_ex (full_address , false);
3049+ }
3050+ }
3051+
3052+ #define UPDATE_PROPERTY_FULL_STR_ADDRESS (z_object , name , envelope ) if ((envelope)->name) { php_imap_update_property_with_full_address_str((z_object), #name, strlen(#name), (envelope)->name); }
3053+
30353054/* {{{ Read an overview of the information in the headers of the given message sequence */
30363055PHP_FUNCTION (imap_fetch_overview )
30373056{
@@ -3084,34 +3103,8 @@ PHP_FUNCTION(imap_fetch_overview)
30843103 env -> subject
30853104 );
30863105 }
3087- if (env -> from ) {
3088- zend_string * from_address ;
3089-
3090- env -> from -> next = NULL ;
3091- from_address = _php_rfc822_write_address (env -> from );
3092- if (from_address ) {
3093- zend_update_property_str (
3094- Z_OBJCE_P (& myoverview ), Z_OBJ_P (& myoverview ),
3095- "from" , strlen ("from" ),
3096- from_address
3097- );
3098- zend_string_release (from_address );
3099- }
3100- }
3101- if (env -> to ) {
3102- zend_string * to_address ;
3103-
3104- env -> to -> next = NULL ;
3105- to_address = _php_rfc822_write_address (env -> to );
3106- if (to_address ) {
3107- zend_update_property_str (
3108- Z_OBJCE_P (& myoverview ), Z_OBJ_P (& myoverview ),
3109- "to" , strlen ("to" ),
3110- to_address
3111- );
3112- zend_string_release (to_address );
3113- }
3114- }
3106+ UPDATE_PROPERTY_FULL_STR_ADDRESS (& myoverview , from , env );
3107+ UPDATE_PROPERTY_FULL_STR_ADDRESS (& myoverview , to , env );
31153108 if (env -> date ) {
31163109 zend_update_property_string (
31173110 Z_OBJCE_P (& myoverview ), Z_OBJ_P (& myoverview ),
@@ -4242,6 +4235,40 @@ static zend_string* _php_imap_parse_address (ADDRESS *address_list, zval *paddre
42424235}
42434236/* }}} */
42444237
4238+ static void php_imap_update_property_with_parsed_full_address (
4239+ zval * z_object , ADDRESS * address ,
4240+ const char * str_address_property , size_t str_address_property_len ,
4241+ const char * parts_address_property , size_t parts_address_property_len
4242+ )
4243+ {
4244+ zval address_parts ;
4245+ zend_string * full_address = NULL ;
4246+
4247+ array_init (& address_parts );
4248+ full_address = _php_imap_parse_address (address , & address_parts );
4249+ if (full_address ) {
4250+ zend_update_property_str (
4251+ Z_OBJCE_P (z_object ), Z_OBJ_P (z_object ),
4252+ str_address_property , str_address_property_len ,
4253+ full_address
4254+ );
4255+ zend_string_release_ex (full_address , false);
4256+ }
4257+ zend_update_property (
4258+ Z_OBJCE_P (z_object ), Z_OBJ_P (z_object ),
4259+ parts_address_property , parts_address_property_len ,
4260+ & address_parts
4261+ );
4262+ zval_ptr_dtor (& address_parts );
4263+ }
4264+
4265+ #define UPDATE_PROPERTY_PARSED_ADDRESS (z_object , name , envelope ) if ((envelope)->name) { \
4266+ php_imap_update_property_with_parsed_full_address( \
4267+ (z_object), (envelope)->name, \
4268+ #name "address", strlen(#name "address"), \
4269+ #name, strlen(#name) \
4270+ ); }
4271+
42454272/* {{{ _php_make_header_object */
42464273static void _php_make_header_object (zval * myzvalue , ENVELOPE * en )
42474274{
@@ -4314,161 +4341,13 @@ static void _php_make_header_object(zval *myzvalue, ENVELOPE *en)
43144341 );
43154342 }
43164343
4317- if (en -> to ) {
4318- zval to_address_parts ;
4319- zend_string * to_full_address = NULL ;
4320-
4321- array_init (& to_address_parts );
4322- to_full_address = _php_imap_parse_address (en -> to , & to_address_parts );
4323- if (to_full_address ) {
4324- zend_update_property_str (
4325- Z_OBJCE_P (myzvalue ), Z_OBJ_P (myzvalue ),
4326- "toaddress" , strlen ("toaddress" ),
4327- to_full_address
4328- );
4329- zend_string_release (to_full_address );
4330- }
4331- zend_update_property (
4332- Z_OBJCE_P (myzvalue ), Z_OBJ_P (myzvalue ),
4333- "to" , strlen ("to" ),
4334- & to_address_parts
4335- );
4336- zval_ptr_dtor (& to_address_parts );
4337- }
4338-
4339- if (en -> from ) {
4340- zval from_address_parts ;
4341- zend_string * from_full_address = NULL ;
4342-
4343- array_init (& from_address_parts );
4344- from_full_address = _php_imap_parse_address (en -> from , & from_address_parts );
4345- if (from_full_address ) {
4346- zend_update_property_str (
4347- Z_OBJCE_P (myzvalue ), Z_OBJ_P (myzvalue ),
4348- "fromaddress" , strlen ("fromaddress" ),
4349- from_full_address
4350- );
4351- zend_string_release (from_full_address );
4352- }
4353- zend_update_property (
4354- Z_OBJCE_P (myzvalue ), Z_OBJ_P (myzvalue ),
4355- "from" , strlen ("from" ),
4356- & from_address_parts
4357- );
4358- zval_ptr_dtor (& from_address_parts );
4359- }
4360-
4361- if (en -> cc ) {
4362- zval cc_address_parts ;
4363- zend_string * cc_full_address = NULL ;
4364-
4365- array_init (& cc_address_parts );
4366- cc_full_address = _php_imap_parse_address (en -> cc , & cc_address_parts );
4367- if (cc_full_address ) {
4368- zend_update_property_str (
4369- Z_OBJCE_P (myzvalue ), Z_OBJ_P (myzvalue ),
4370- "ccaddress" , strlen ("ccaddress" ),
4371- cc_full_address
4372- );
4373- zend_string_release (cc_full_address );
4374- }
4375- zend_update_property (
4376- Z_OBJCE_P (myzvalue ), Z_OBJ_P (myzvalue ),
4377- "cc" , strlen ("cc" ),
4378- & cc_address_parts
4379- );
4380- zval_ptr_dtor (& cc_address_parts );
4381- }
4382-
4383- if (en -> bcc ) {
4384- zval bcc_address_parts ;
4385- zend_string * bcc_full_address = NULL ;
4386-
4387- array_init (& bcc_address_parts );
4388- bcc_full_address = _php_imap_parse_address (en -> bcc , & bcc_address_parts );
4389- if (bcc_full_address ) {
4390- zend_update_property_str (
4391- Z_OBJCE_P (myzvalue ), Z_OBJ_P (myzvalue ),
4392- "bccaddress" , strlen ("bccaddress" ),
4393- bcc_full_address
4394- );
4395- zend_string_release (bcc_full_address );
4396- }
4397- zend_update_property (
4398- Z_OBJCE_P (myzvalue ), Z_OBJ_P (myzvalue ),
4399- "bcc" , strlen ("bcc" ),
4400- & bcc_address_parts
4401- );
4402- zval_ptr_dtor (& bcc_address_parts );
4403- }
4404-
4405- if (en -> reply_to ) {
4406- zval reply_to_address_parts ;
4407- zend_string * reply_to_full_address = NULL ;
4408-
4409- array_init (& reply_to_address_parts );
4410- reply_to_full_address = _php_imap_parse_address (en -> reply_to , & reply_to_address_parts );
4411- if (reply_to_full_address ) {
4412- zend_update_property_str (
4413- Z_OBJCE_P (myzvalue ), Z_OBJ_P (myzvalue ),
4414- "reply_toaddress" , strlen ("reply_toaddress" ),
4415- reply_to_full_address
4416- );
4417- zend_string_release (reply_to_full_address );
4418- }
4419- zend_update_property (
4420- Z_OBJCE_P (myzvalue ), Z_OBJ_P (myzvalue ),
4421- "reply_to" , strlen ("reply_to" ),
4422- & reply_to_address_parts
4423- );
4424- zval_ptr_dtor (& reply_to_address_parts );
4425- }
4426-
4427- if (en -> sender ) {
4428- zval sender_address_parts ;
4429- zend_string * sender_full_address = NULL ;
4430-
4431- array_init (& sender_address_parts );
4432- sender_full_address = _php_imap_parse_address (en -> sender , & sender_address_parts );
4433- if (sender_full_address ) {
4434- zend_update_property_str (
4435- Z_OBJCE_P (myzvalue ), Z_OBJ_P (myzvalue ),
4436- "senderaddress" , strlen ("senderaddress" ),
4437- sender_full_address
4438- );
4439- zend_string_release (sender_full_address );
4440- }
4441- zend_update_property (
4442- Z_OBJCE_P (myzvalue ), Z_OBJ_P (myzvalue ),
4443- "sender" , strlen ("sender" ),
4444- & sender_address_parts
4445- );
4446- zval_ptr_dtor (& sender_address_parts );
4447- }
4448-
4449- if (en -> return_path ) {
4450- zval return_path_address_parts ;
4451- zend_string * return_path_full_address = NULL ;
4452-
4453- array_init (& return_path_address_parts );
4454- return_path_full_address = _php_imap_parse_address (en -> return_path , & return_path_address_parts );
4455- if (return_path_full_address ) {
4456- zend_update_property_str (
4457- Z_OBJCE_P (myzvalue ), Z_OBJ_P (myzvalue ),
4458- "return_pathaddress" , strlen ("return_pathaddress" ),
4459- return_path_full_address
4460- );
4461- zend_string_release (return_path_full_address );
4462- }
4463- zend_update_property (
4464- Z_OBJCE_P (myzvalue ), Z_OBJ_P (myzvalue ),
4465- "return_path" , strlen ("return_path" ),
4466- & return_path_address_parts
4467- );
4468- zval_ptr_dtor (& return_path_address_parts );
4469- // From rebase might need?
4470- //add_assoc_object(myzvalue, "return_path", &paddress);
4471- }
4344+ UPDATE_PROPERTY_PARSED_ADDRESS (myzvalue , to , en );
4345+ UPDATE_PROPERTY_PARSED_ADDRESS (myzvalue , from , en );
4346+ UPDATE_PROPERTY_PARSED_ADDRESS (myzvalue , cc , en );
4347+ UPDATE_PROPERTY_PARSED_ADDRESS (myzvalue , bcc , en );
4348+ UPDATE_PROPERTY_PARSED_ADDRESS (myzvalue , reply_to , en );
4349+ UPDATE_PROPERTY_PARSED_ADDRESS (myzvalue , sender , en );
4350+ UPDATE_PROPERTY_PARSED_ADDRESS (myzvalue , return_path , en );
44724351}
44734352/* }}} */
44744353
0 commit comments