Changeset 5375:132474d6dd3b for alias.c
Legend:
- Unmodified
- Added
- Removed
-
alias.c
r5373 r5375 215 215 { 216 216 ALIAS *new, *t; 217 char buf[LONG_STRING], prompt[SHORT_STRING], *pc;217 char buf[LONG_STRING], tmp[LONG_STRING], prompt[SHORT_STRING], *pc; 218 218 char *err = NULL; 219 219 char fixed[LONG_STRING]; … … 232 232 if (adr && adr->mailbox) 233 233 { 234 strfcpy ( buf, adr->mailbox, sizeof (buf));235 if ((pc = strchr ( buf, '@')))234 strfcpy (tmp, adr->mailbox, sizeof (tmp)); 235 if ((pc = strchr (tmp, '@'))) 236 236 *pc = 0; 237 237 } 238 238 else 239 buf[0] = '\0';239 tmp[0] = '\0'; 240 240 241 241 /* Don't suggest a bad alias name in the event of a strange local part. */ 242 mutt_check_alias_name ( buf, buf);242 mutt_check_alias_name (tmp, buf, sizeof (buf)); 243 243 244 244 retry_name: … … 254 254 } 255 255 256 if (mutt_check_alias_name (buf, fixed ))256 if (mutt_check_alias_name (buf, fixed, sizeof (fixed))) 257 257 { 258 258 switch (mutt_yesorno (_("Warning: This alias name may not work. Fix it?"), M_YES)) … … 352 352 } 353 353 354 if (mutt_check_alias_name (new->name, NULL ))354 if (mutt_check_alias_name (new->name, NULL, 0)) 355 355 mutt_quote_filename (buf, sizeof (buf), new->name); 356 356 else … … 380 380 */ 381 381 382 static int check_alias_name_char (char c) 383 { 384 return (c == '-' || c == '_' || c == '+' || c == '=' || c == '.' || 385 isalnum ((unsigned char) c)); 386 } 387 388 int mutt_check_alias_name (const char *s, char *d) 389 { 390 int rv = 0; 391 for (; *s; s++) 392 { 393 if (!check_alias_name_char (*s)) 394 { 395 if (!d) 382 int mutt_check_alias_name (const char *s, char *dest, size_t destlen) 383 { 384 wchar_t wc; 385 mbstate_t mb; 386 size_t l; 387 int rv = 0, bad = 0, dry = !dest || !destlen; 388 389 memset (&mb, 0, sizeof (mbstate_t)); 390 391 if (!dry) 392 destlen--; 393 for (; s && *s && (dry || destlen) && 394 (l = mbrtowc (&wc, s, MB_CUR_MAX, &mb)) != 0; 395 s += l, destlen -= l) 396 { 397 bad = l == (size_t)(-1) || l == (size_t)(-2); /* conversion error */ 398 bad = bad || (!dry && l > destlen); /* too few room for mb char */ 399 if (l == 1) 400 bad = bad || (strchr ("-_+=.", *s) == NULL && !iswalnum (wc)); 401 else 402 bad = bad || !iswalnum (wc); 403 if (bad) 404 { 405 if (dry) 396 406 return -1; 397 else398 {399 *d++ = '_'; 400 rv = -1; 401 }402 }403 else if (d)404 *d++ = *s;405 } 406 if ( d)407 *d ++ = *s;407 *dest++ = '_'; 408 rv = -1; 409 } 410 else if (!dry) 411 { 412 memcpy (dest, s, l); 413 dest += l; 414 } 415 } 416 if (!dry) 417 *dest = 0; 408 418 return rv; 409 419 }
