@@ -3032,6 +3032,25 @@ PHP_FUNCTION(imap_bodystruct)
3032
3032
3033
3033
/* }}} */
3034
3034
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
+
3035
3054
/* {{{ Read an overview of the information in the headers of the given message sequence */
3036
3055
PHP_FUNCTION (imap_fetch_overview )
3037
3056
{
@@ -3084,34 +3103,8 @@ PHP_FUNCTION(imap_fetch_overview)
3084
3103
env -> subject
3085
3104
);
3086
3105
}
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 );
3115
3108
if (env -> date ) {
3116
3109
zend_update_property_string (
3117
3110
Z_OBJCE_P (& myoverview ), Z_OBJ_P (& myoverview ),
@@ -4242,6 +4235,40 @@ static zend_string* _php_imap_parse_address (ADDRESS *address_list, zval *paddre
4242
4235
}
4243
4236
/* }}} */
4244
4237
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
+
4245
4272
/* {{{ _php_make_header_object */
4246
4273
static void _php_make_header_object (zval * myzvalue , ENVELOPE * en )
4247
4274
{
@@ -4314,161 +4341,13 @@ static void _php_make_header_object(zval *myzvalue, ENVELOPE *en)
4314
4341
);
4315
4342
}
4316
4343
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 );
4472
4351
}
4473
4352
/* }}} */
4474
4353
0 commit comments