Browse Source

cleaning up some small off-by-one errors and argcount follies. Can someone

take a look at the errors imap_mime_header_decode() generates when
compiling? I took a quick look, but don't have time to puzzle through that
code.
PHP-4.0.5
Chuck Hagenbuch 27 years ago
parent
commit
0fc483fed6
  1. 107
      ext/imap/php_imap.c

107
ext/imap/php_imap.c

@ -1058,23 +1058,23 @@ PHP_FUNCTION(imap_headers)
tmp[3] = cache->answered ? 'A' : ' '; tmp[3] = cache->answered ? 'A' : ' ';
tmp[4] = cache->deleted ? 'D' : ' '; tmp[4] = cache->deleted ? 'D' : ' ';
tmp[5] = cache->draft ? 'X' : ' '; tmp[5] = cache->draft ? 'X' : ' ';
sprintf(tmp+5, "%4ld) ", cache->msgno);
mail_date(tmp+11,cache);
tmp[17] = ' ';
tmp[18] = '\0';
mail_fetchfrom(tmp+18,imap_le_struct->imap_stream,msgno, (long) 20);
strcat(tmp," ");
sprintf(tmp + 6, "%4ld) ", cache->msgno);
mail_date(tmp+11, cache);
tmp[18] = ' ';
tmp[19] = '\0';
mail_fetchfrom(tmp+19, imap_le_struct->imap_stream, msgno, (long)20);
strcat(tmp, " ");
if ((i = cache->user_flags)) { if ((i = cache->user_flags)) {
strcat(tmp, "{"); strcat(tmp, "{");
while (i) { while (i) {
strcat(tmp,imap_le_struct->imap_stream->user_flags[find_rightmost_bit (&i)]); strcat(tmp,imap_le_struct->imap_stream->user_flags[find_rightmost_bit (&i)]);
if (i) strcat(tmp," "); if (i) strcat(tmp," ");
} }
strcat(tmp,"} ");
strcat(tmp, "} ");
} }
mail_fetchsubject(t=tmp+strlen(tmp),imap_le_struct->imap_stream,msgno,(long)25);
sprintf(t+=strlen(t)," (%ld chars)",cache->rfc822_size);
add_next_index_string(return_value,tmp,1);
mail_fetchsubject(t = tmp + strlen(tmp), imap_le_struct->imap_stream, msgno, (long)25);
sprintf(t += strlen(t), " (%ld chars)", cache->rfc822_size);
add_next_index_string(return_value, tmp, 1);
} }
} }
/* }}} */ /* }}} */
@ -1167,7 +1167,7 @@ PHP_FUNCTION(imap_mail_copy)
Move specified message to a mailbox */ Move specified message to a mailbox */
PHP_FUNCTION(imap_mail_move) PHP_FUNCTION(imap_mail_move)
{ {
pval *streamind,*seq, *folder, *options;
pval *streamind, *seq, *folder, *options;
int ind, ind_type; int ind, ind_type;
pils *imap_le_struct; pils *imap_le_struct;
int myargcount = ARG_COUNT(ht); int myargcount = ARG_COUNT(ht);
@ -1179,15 +1179,18 @@ PHP_FUNCTION(imap_mail_move)
convert_to_long(streamind); convert_to_long(streamind);
convert_to_string(seq); convert_to_string(seq);
convert_to_string(folder); convert_to_string(folder);
if (myargcount == 4) {
convert_to_long(options);
}
ind = streamind->value.lval; ind = streamind->value.lval;
imap_le_struct = (pils *)zend_list_find(ind, &ind_type); imap_le_struct = (pils *)zend_list_find(ind, &ind_type);
if(!imap_le_struct || !IS_STREAM(ind_type)) {
if (!imap_le_struct || !IS_STREAM(ind_type)) {
php_error(E_WARNING, "Unable to find stream pointer"); php_error(E_WARNING, "Unable to find stream pointer");
RETURN_FALSE; RETURN_FALSE;
} }
if ( mail_copy_full(imap_le_struct->imap_stream,seq->value.str.val,folder->value.str.val,myargcount == 4 ? ( options->value.lval | CP_MOVE ) : CP_MOVE )==T ) {
if (mail_copy_full(imap_le_struct->imap_stream, seq->value.str.val, folder->value.str.val, myargcount == 4 ? (options->value.lval | CP_MOVE) : CP_MOVE) == T) {
RETURN_TRUE; RETURN_TRUE;
} else { } else {
RETURN_FALSE; RETURN_FALSE;
@ -1278,7 +1281,7 @@ PHP_FUNCTION(imap_deletemailbox)
php_error(E_WARNING, "Unable to find stream pointer"); php_error(E_WARNING, "Unable to find stream pointer");
RETURN_FALSE; RETURN_FALSE;
} }
if ( mail_delete(imap_le_struct->imap_stream,folder->value.str.val)==T ) {
if (mail_delete(imap_le_struct->imap_stream,folder->value.str.val)==T ) {
RETURN_TRUE; RETURN_TRUE;
} else { } else {
RETURN_FALSE; RETURN_FALSE;
@ -1482,19 +1485,21 @@ PHP_FUNCTION(imap_delete)
int ind, ind_type; int ind, ind_type;
pils *imap_le_struct; pils *imap_le_struct;
int myargc=ARG_COUNT(ht); int myargc=ARG_COUNT(ht);
if (myargc < 2 || myargc > 3 || zend_get_parameters(ht,myargc,&streamind,&sequence,&flags) == FAILURE) { if (myargc < 2 || myargc > 3 || zend_get_parameters(ht,myargc,&streamind,&sequence,&flags) == FAILURE) {
WRONG_PARAM_COUNT;
WRONG_PARAM_COUNT;
} }
convert_to_long(streamind); convert_to_long(streamind);
convert_to_string(sequence); convert_to_string(sequence);
if(myargc==3) convert_to_long(flags);
if (myargc == 3) {
convert_to_long(flags);
}
ind = streamind->value.lval; ind = streamind->value.lval;
imap_le_struct = (pils *)zend_list_find(ind, &ind_type); imap_le_struct = (pils *)zend_list_find(ind, &ind_type);
if(!imap_le_struct || !IS_STREAM(ind_type)) {
if (!imap_le_struct || !IS_STREAM(ind_type)) {
php_error(E_WARNING, "Unable to find stream pointer"); php_error(E_WARNING, "Unable to find stream pointer");
RETURN_FALSE; RETURN_FALSE;
} }
@ -1513,11 +1518,15 @@ PHP_FUNCTION(imap_undelete)
pils *imap_le_struct; pils *imap_le_struct;
int myargc=ARG_COUNT(ht); int myargc=ARG_COUNT(ht);
if ( myargc < 2 || myargc > 3 || zend_get_parameters(ht,myargc,&streamind,&sequence,&flags) == FAILURE) {
if (myargc < 2 || myargc > 3 || zend_get_parameters(ht,myargc,&streamind,&sequence,&flags) == FAILURE) {
WRONG_PARAM_COUNT; WRONG_PARAM_COUNT;
} }
convert_to_long(streamind); convert_to_long(streamind);
convert_to_string(sequence); convert_to_string(sequence);
if (myargc == 3) {
convert_to_long(flags);
}
ind = streamind->value.lval; ind = streamind->value.lval;
@ -1632,9 +1641,11 @@ PHP_FUNCTION(imap_rfc822_parse_headers)
} }
convert_to_string_ex(headers); convert_to_string_ex(headers);
if (myargc == 2) convert_to_string_ex(defaulthost);
if (myargc == 2) {
convert_to_string_ex(defaulthost);
}
if (myargc == 5) {
if (myargc == 2) {
rfc822_parse_msg(&en, NULL, (*headers)->value.str.val, (*headers)->value.str.len, NULL, (*defaulthost)->value.str.val, NIL); rfc822_parse_msg(&en, NULL, (*headers)->value.str.val, (*headers)->value.str.len, NULL, (*defaulthost)->value.str.val, NIL);
} else { } else {
rfc822_parse_msg(&en, NULL, (*headers)->value.str.val, (*headers)->value.str.len, NULL, "UNKNOWN", NIL); rfc822_parse_msg(&en, NULL, (*headers)->value.str.val, (*headers)->value.str.len, NULL, "UNKNOWN", NIL);
@ -2802,18 +2813,18 @@ PHP_FUNCTION(imap_fetch_overview)
pils *imap_le_struct; pils *imap_le_struct;
pval *myoverview; pval *myoverview;
char address[MAILTMPLEN]; char address[MAILTMPLEN];
int myargc=ARG_COUNT(ht);
long status,flags=0L;
long status, flags=0L;
switch (ZEND_NUM_ARGS()) { switch (ZEND_NUM_ARGS()) {
case 2: case 2:
if (zend_get_parameters(ht, 2, &streamind, &sequence)==FAILURE) {
if (zend_get_parameters(ht, 2, &streamind, &sequence) == FAILURE) {
ZEND_WRONG_PARAM_COUNT(); ZEND_WRONG_PARAM_COUNT();
} }
break; break;
case 3: case 3:
if (zend_get_parameters(ht, 3, &streamind, &sequence, &pflags)==FAILURE) {
if (zend_get_parameters(ht, 3, &streamind, &sequence, &pflags) == FAILURE) {
ZEND_WRONG_PARAM_COUNT(); ZEND_WRONG_PARAM_COUNT();
} else {
convert_to_long(pflags); convert_to_long(pflags);
flags = pflags->value.lval; flags = pflags->value.lval;
} }
@ -2825,7 +2836,7 @@ PHP_FUNCTION(imap_fetch_overview)
convert_to_long(streamind); convert_to_long(streamind);
convert_to_string(sequence); convert_to_string(sequence);
ind = streamind->value.lval; ind = streamind->value.lval;
imap_le_struct = (pils *)zend_list_find(ind, &ind_type); imap_le_struct = (pils *)zend_list_find(ind, &ind_type);
@ -2834,36 +2845,36 @@ PHP_FUNCTION(imap_fetch_overview)
RETURN_FALSE; RETURN_FALSE;
} }
array_init(return_value); array_init(return_value);
status = (flags & FT_UID)
? mail_uid_sequence (imap_le_struct->imap_stream,sequence->value.str.val)
: mail_sequence (imap_le_struct->imap_stream,sequence->value.str.val)
;
if (status) {
status = (flags & FT_UID)
? mail_uid_sequence (imap_le_struct->imap_stream,sequence->value.str.val)
: mail_sequence (imap_le_struct->imap_stream,sequence->value.str.val)
;
if (status) {
MESSAGECACHE *elt; MESSAGECACHE *elt;
ENVELOPE *env; ENVELOPE *env;
unsigned long i; unsigned long i;
for (i = 1; i <= imap_le_struct->imap_stream->nmsgs; i++) { for (i = 1; i <= imap_le_struct->imap_stream->nmsgs; i++) {
if (((elt = mail_elt (imap_le_struct->imap_stream,i))->sequence) && if (((elt = mail_elt (imap_le_struct->imap_stream,i))->sequence) &&
(env = mail_fetch_structure (imap_le_struct->imap_stream,i,NIL,NIL))) { (env = mail_fetch_structure (imap_le_struct->imap_stream,i,NIL,NIL))) {
MAKE_STD_ZVAL(myoverview); MAKE_STD_ZVAL(myoverview);
object_init(myoverview); object_init(myoverview);
if(env->subject) if(env->subject)
add_property_string(myoverview,"subject",env->subject,1);
add_property_string(myoverview,"subject",env->subject,1);
if(env->from) { if(env->from) {
env->from->next=NULL;
rfc822_write_address(address,env->from);
add_property_string(myoverview,"from",address,1);
env->from->next=NULL;
rfc822_write_address(address,env->from);
add_property_string(myoverview,"from",address,1);
} }
if(env->date) if(env->date)
add_property_string(myoverview,"date",env->date,1);
add_property_string(myoverview,"date",env->date,1);
if(env->message_id) if(env->message_id)
add_property_string(myoverview,"message_id",env->message_id,1);
add_property_string(myoverview,"message_id",env->message_id,1);
if(env->references) if(env->references)
add_property_string(myoverview,"references",env->references,1);
add_property_string(myoverview,"references",env->references,1);
add_property_long(myoverview,"size",elt->rfc822_size); add_property_long(myoverview,"size",elt->rfc822_size);
add_property_long(myoverview,"uid",mail_uid(imap_le_struct->imap_stream,i)); add_property_long(myoverview,"uid",mail_uid(imap_le_struct->imap_stream,i));
add_property_long(myoverview,"msgno",i); add_property_long(myoverview,"msgno",i);
@ -3396,7 +3407,7 @@ PHP_FUNCTION(imap_mime_header_decode)
text=&charset[end+1]; text=&charset[end+1];
while(offset<end) { // Reached end of the string? while(offset<end) { // Reached end of the string?
if((charset_token=php_memnstr(&string[offset],"=?",2,string+end))) { // Is there anything encoded in the string? if((charset_token=php_memnstr(&string[offset],"=?",2,string+end))) { // Is there anything encoded in the string?
charset_token-=(unsigned long)string;
charset_token -= (unsigned long)string;
if(offset!=charset_token) { // Is there anything before the encoded data? if(offset!=charset_token) { // Is there anything before the encoded data?
// Retrieve unencoded data that is found at the beginning // Retrieve unencoded data that is found at the beginning
memcpy(text,&string[offset],charset_token-offset); memcpy(text,&string[offset],charset_token-offset);

Loading…
Cancel
Save