@@ -3420,6 +3420,9 @@ bool _php_imap_mail(zend_string *to, zend_string *subject, zend_string *message,
3420
3420
int ret ;
3421
3421
#endif
3422
3422
3423
+ ZEND_ASSERT (to && ZSTR_LEN (to ) != 0 );
3424
+ ZEND_ASSERT (subject && ZSTR_LEN (subject ) != 0 );
3425
+
3423
3426
#ifdef PHP_WIN32
3424
3427
char * tempMailTo ;
3425
3428
char * tsm_errmsg = NULL ;
@@ -3428,12 +3431,11 @@ bool _php_imap_mail(zend_string *to, zend_string *subject, zend_string *message,
3428
3431
size_t offset , bufferLen = 0 ;
3429
3432
size_t bt_len ;
3430
3433
3434
+ /* Add "To" field's necessary buffer length */
3435
+ bufferLen += ZSTR_LEN (to ) + 6 ;
3431
3436
if (headers ) {
3432
3437
bufferLen += ZSTR_LEN (headers );
3433
3438
}
3434
- if (to ) {
3435
- bufferLen += ZSTR_LEN (to ) + 6 ;
3436
- }
3437
3439
if (cc ) {
3438
3440
bufferLen += ZSTR_LEN (cc ) + 6 ;
3439
3441
}
@@ -3443,36 +3445,36 @@ bool _php_imap_mail(zend_string *to, zend_string *subject, zend_string *message,
3443
3445
3444
3446
bufferHeader = (char * )safe_emalloc (bufferLen , 1 , 1 );
3445
3447
memset (bufferHeader , 0 , bufferLen );
3446
- if (to && * to ) {
3447
- strlcat (bufferHeader , "To: " , bufferLen + 1 );
3448
- strlcat (bufferHeader , ZSTR_VAL (to ), bufferLen + 1 );
3449
- strlcat (bufferHeader , "\r\n" , bufferLen + 1 );
3450
- tempMailTo = estrdup (ZSTR_VAL (to ));
3451
- bt_len = ZSTR_LEN (to );
3452
- bufferTo = (char * )safe_emalloc (bt_len , 1 , 1 );
3453
- bt_len ++ ;
3454
- offset = 0 ;
3455
- addr = NULL ;
3456
- rfc822_parse_adrlist (& addr , tempMailTo , "NO HOST" );
3457
- while (addr ) {
3458
- if (addr -> host == NULL || strcmp (addr -> host , ERRHOST ) == 0 ) {
3459
- PHP_IMAP_BAD_DEST ;
3460
- } else {
3461
- bufferTo = safe_erealloc (bufferTo , bt_len , 1 , strlen (addr -> mailbox ));
3462
- bt_len += strlen (addr -> mailbox );
3463
- bufferTo = safe_erealloc (bufferTo , bt_len , 1 , strlen (addr -> host ));
3464
- bt_len += strlen (addr -> host );
3465
- offset += slprintf (bufferTo + offset , bt_len - offset , "%s@%s," , addr -> mailbox , addr -> host );
3466
- }
3467
- addr = addr -> next ;
3468
- }
3469
- efree (tempMailTo );
3470
- if (offset > 0 ) {
3471
- bufferTo [offset - 1 ] = 0 ;
3448
+
3449
+ /* Handle "To" Field */
3450
+ strlcat (bufferHeader , "To: " , bufferLen + 1 );
3451
+ strlcat (bufferHeader , ZSTR_VAL (to ), bufferLen + 1 );
3452
+ strlcat (bufferHeader , "\r\n" , bufferLen + 1 );
3453
+ tempMailTo = estrdup (ZSTR_VAL (to ));
3454
+ bt_len = ZSTR_LEN (to );
3455
+ bufferTo = (char * )safe_emalloc (bt_len , 1 , 1 );
3456
+ bt_len ++ ;
3457
+ offset = 0 ;
3458
+ addr = NULL ;
3459
+ rfc822_parse_adrlist (& addr , tempMailTo , "NO HOST" );
3460
+ while (addr ) {
3461
+ if (addr -> host == NULL || strcmp (addr -> host , ERRHOST ) == 0 ) {
3462
+ PHP_IMAP_BAD_DEST ;
3463
+ } else {
3464
+ bufferTo = safe_erealloc (bufferTo , bt_len , 1 , strlen (addr -> mailbox ));
3465
+ bt_len += strlen (addr -> mailbox );
3466
+ bufferTo = safe_erealloc (bufferTo , bt_len , 1 , strlen (addr -> host ));
3467
+ bt_len += strlen (addr -> host );
3468
+ offset += slprintf (bufferTo + offset , bt_len - offset , "%s@%s," , addr -> mailbox , addr -> host );
3472
3469
}
3470
+ addr = addr -> next ;
3471
+ }
3472
+ efree (tempMailTo );
3473
+ if (offset > 0 ) {
3474
+ bufferTo [offset - 1 ] = 0 ;
3473
3475
}
3474
3476
3475
- if (cc && * cc ) {
3477
+ if (cc && ZSTR_LEN ( cc ) != 0 ) {
3476
3478
strlcat (bufferHeader , "Cc: " , bufferLen + 1 );
3477
3479
strlcat (bufferHeader , ZSTR_VAL (cc ), bufferLen + 1 );
3478
3480
strlcat (bufferHeader , "\r\n" , bufferLen + 1 );
@@ -3501,7 +3503,7 @@ bool _php_imap_mail(zend_string *to, zend_string *subject, zend_string *message,
3501
3503
}
3502
3504
}
3503
3505
3504
- if (bcc && * bcc ) {
3506
+ if (bcc && ZSTR_LEN ( bcc ) ) {
3505
3507
tempMailTo = estrdup (ZSTR_VAL (bcc ));
3506
3508
bt_len = ZSTR_LEN (bcc );
3507
3509
bufferBcc = (char * )safe_emalloc (bt_len , 1 , 1 );
@@ -3527,7 +3529,7 @@ bool _php_imap_mail(zend_string *to, zend_string *subject, zend_string *message,
3527
3529
}
3528
3530
}
3529
3531
3530
- if (headers && * headers ) {
3532
+ if (headers && ZSTR_LEN ( headers ) ) {
3531
3533
strlcat (bufferHeader , ZSTR_VAL (headers ), bufferLen + 1 );
3532
3534
}
3533
3535
0 commit comments