@@ -3093,7 +3093,7 @@ PHP_FUNCTION(imap_fetch_overview)
3093
3093
/* {{{ Create a MIME message based on given envelope and body sections */
3094
3094
PHP_FUNCTION (imap_mail_compose )
3095
3095
{
3096
- zval * envelope , * body ;
3096
+ HashTable * envelope , * body ;
3097
3097
zend_string * key ;
3098
3098
zval * data , * pvalue , * disp_data , * env_data ;
3099
3099
char * cookie = NIL ;
@@ -3105,62 +3105,66 @@ PHP_FUNCTION(imap_mail_compose)
3105
3105
int toppart = 0 ;
3106
3106
int first ;
3107
3107
3108
- if (zend_parse_parameters (ZEND_NUM_ARGS (), "a/a /" , & envelope , & body ) == FAILURE ) {
3108
+ if (zend_parse_parameters (ZEND_NUM_ARGS (), "h/h /" , & envelope , & body ) == FAILURE ) {
3109
3109
RETURN_THROWS ();
3110
3110
}
3111
3111
3112
+ if (zend_hash_num_elements (body ) == 0 ) {
3113
+ zend_argument_value_error (2 , "cannot be empty" );
3114
+ }
3115
+
3112
3116
#define PHP_RFC822_PARSE_ADRLIST (target , value ) \
3113
3117
str_copy = estrndup(Z_STRVAL_P(value), Z_STRLEN_P(value)); \
3114
3118
rfc822_parse_adrlist(target, str_copy, "NO HOST"); \
3115
3119
efree(str_copy);
3116
3120
3117
3121
env = mail_newenvelope ();
3118
- if ((pvalue = zend_hash_str_find (Z_ARRVAL_P ( envelope ) , "remail" , sizeof ("remail" ) - 1 )) != NULL ) {
3122
+ if ((pvalue = zend_hash_str_find (envelope , "remail" , sizeof ("remail" ) - 1 )) != NULL ) {
3119
3123
convert_to_string_ex (pvalue );
3120
3124
env -> remail = cpystr (Z_STRVAL_P (pvalue ));
3121
3125
}
3122
- if ((pvalue = zend_hash_str_find (Z_ARRVAL_P ( envelope ) , "return_path" , sizeof ("return_path" ) - 1 )) != NULL ) {
3126
+ if ((pvalue = zend_hash_str_find (envelope , "return_path" , sizeof ("return_path" ) - 1 )) != NULL ) {
3123
3127
convert_to_string_ex (pvalue );
3124
3128
PHP_RFC822_PARSE_ADRLIST (& env -> return_path , pvalue );
3125
3129
}
3126
- if ((pvalue = zend_hash_str_find (Z_ARRVAL_P ( envelope ) , "date" , sizeof ("date" ) - 1 )) != NULL ) {
3130
+ if ((pvalue = zend_hash_str_find (envelope , "date" , sizeof ("date" ) - 1 )) != NULL ) {
3127
3131
convert_to_string_ex (pvalue );
3128
3132
env -> date = (unsigned char * )cpystr (Z_STRVAL_P (pvalue ));
3129
3133
}
3130
- if ((pvalue = zend_hash_str_find (Z_ARRVAL_P ( envelope ) , "from" , sizeof ("from" ) - 1 )) != NULL ) {
3134
+ if ((pvalue = zend_hash_str_find (envelope , "from" , sizeof ("from" ) - 1 )) != NULL ) {
3131
3135
convert_to_string_ex (pvalue );
3132
3136
PHP_RFC822_PARSE_ADRLIST (& env -> from , pvalue );
3133
3137
}
3134
- if ((pvalue = zend_hash_str_find (Z_ARRVAL_P ( envelope ) , "reply_to" , sizeof ("reply_to" ) - 1 )) != NULL ) {
3138
+ if ((pvalue = zend_hash_str_find (envelope , "reply_to" , sizeof ("reply_to" ) - 1 )) != NULL ) {
3135
3139
convert_to_string_ex (pvalue );
3136
3140
PHP_RFC822_PARSE_ADRLIST (& env -> reply_to , pvalue );
3137
3141
}
3138
- if ((pvalue = zend_hash_str_find (Z_ARRVAL_P ( envelope ) , "in_reply_to" , sizeof ("in_reply_to" ) - 1 )) != NULL ) {
3142
+ if ((pvalue = zend_hash_str_find (envelope , "in_reply_to" , sizeof ("in_reply_to" ) - 1 )) != NULL ) {
3139
3143
convert_to_string_ex (pvalue );
3140
3144
env -> in_reply_to = cpystr (Z_STRVAL_P (pvalue ));
3141
3145
}
3142
- if ((pvalue = zend_hash_str_find (Z_ARRVAL_P ( envelope ) , "subject" , sizeof ("subject" ) - 1 )) != NULL ) {
3146
+ if ((pvalue = zend_hash_str_find (envelope , "subject" , sizeof ("subject" ) - 1 )) != NULL ) {
3143
3147
convert_to_string_ex (pvalue );
3144
3148
env -> subject = cpystr (Z_STRVAL_P (pvalue ));
3145
3149
}
3146
- if ((pvalue = zend_hash_str_find (Z_ARRVAL_P ( envelope ) , "to" , sizeof ("to" ) - 1 )) != NULL ) {
3150
+ if ((pvalue = zend_hash_str_find (envelope , "to" , sizeof ("to" ) - 1 )) != NULL ) {
3147
3151
convert_to_string_ex (pvalue );
3148
3152
PHP_RFC822_PARSE_ADRLIST (& env -> to , pvalue );
3149
3153
}
3150
- if ((pvalue = zend_hash_str_find (Z_ARRVAL_P ( envelope ) , "cc" , sizeof ("cc" ) - 1 )) != NULL ) {
3154
+ if ((pvalue = zend_hash_str_find (envelope , "cc" , sizeof ("cc" ) - 1 )) != NULL ) {
3151
3155
convert_to_string_ex (pvalue );
3152
3156
PHP_RFC822_PARSE_ADRLIST (& env -> cc , pvalue );
3153
3157
}
3154
- if ((pvalue = zend_hash_str_find (Z_ARRVAL_P ( envelope ) , "bcc" , sizeof ("bcc" ) - 1 )) != NULL ) {
3158
+ if ((pvalue = zend_hash_str_find (envelope , "bcc" , sizeof ("bcc" ) - 1 )) != NULL ) {
3155
3159
convert_to_string_ex (pvalue );
3156
3160
PHP_RFC822_PARSE_ADRLIST (& env -> bcc , pvalue );
3157
3161
}
3158
- if ((pvalue = zend_hash_str_find (Z_ARRVAL_P ( envelope ) , "message_id" , sizeof ("message_id" ) - 1 )) != NULL ) {
3162
+ if ((pvalue = zend_hash_str_find (envelope , "message_id" , sizeof ("message_id" ) - 1 )) != NULL ) {
3159
3163
convert_to_string_ex (pvalue );
3160
3164
env -> message_id = cpystr (Z_STRVAL_P (pvalue ));
3161
3165
}
3162
3166
3163
- if ((pvalue = zend_hash_str_find (Z_ARRVAL_P ( envelope ) , "custom_headers" , sizeof ("custom_headers" ) - 1 )) != NULL ) {
3167
+ if ((pvalue = zend_hash_str_find (envelope , "custom_headers" , sizeof ("custom_headers" ) - 1 )) != NULL ) {
3164
3168
if (Z_TYPE_P (pvalue ) == IS_ARRAY ) {
3165
3169
custom_headers_param = tmp_param = NULL ;
3166
3170
SEPARATE_ARRAY (pvalue );
@@ -3177,14 +3181,17 @@ PHP_FUNCTION(imap_mail_compose)
3177
3181
}
3178
3182
3179
3183
first = 1 ;
3180
- ZEND_HASH_FOREACH_VAL (Z_ARRVAL_P ( body ) , data ) {
3184
+ ZEND_HASH_FOREACH_VAL (body , data ) {
3181
3185
if (first ) {
3182
3186
first = 0 ;
3183
3187
3184
3188
if (Z_TYPE_P (data ) != IS_ARRAY ) {
3185
- // TODO ValueError
3186
- php_error_docref (NULL , E_WARNING , "body parameter must be a non-empty array" );
3187
- RETVAL_FALSE ;
3189
+ zend_argument_type_error (2 , "individual body must be of type array, %s given" ,
3190
+ zend_zval_type_name (data ));
3191
+ goto done ;
3192
+ }
3193
+ if (zend_hash_num_elements (Z_ARRVAL_P (data )) == 0 ) {
3194
+ zend_argument_value_error (2 , "individual body cannot be empty" );
3188
3195
goto done ;
3189
3196
}
3190
3197
SEPARATE_ARRAY (data );
@@ -3402,13 +3409,6 @@ PHP_FUNCTION(imap_mail_compose)
3402
3409
}
3403
3410
} ZEND_HASH_FOREACH_END ();
3404
3411
3405
- if (first ) {
3406
- // TODO ValueError
3407
- php_error_docref (NULL , E_WARNING , "body parameter must be a non-empty array" );
3408
- RETVAL_FALSE ;
3409
- goto done ;
3410
- }
3411
-
3412
3412
if (bod && bod -> type == TYPEMULTIPART && (!bod -> nested .part || !bod -> nested .part -> next )) {
3413
3413
php_error_docref (NULL , E_WARNING , "Cannot generate multipart e-mail without components." );
3414
3414
RETVAL_FALSE ;
0 commit comments