if (c == '\\' && (syntax & RE_BACKSLASH_ESCAPE_IN_LISTS))
if (c == '\\' && (syntax & RE_BACKSLASH_ESCAPE_IN_LISTS) && re_string_cur_idx (input) + 1 < re_string_length (input))
peek_token_bracket (token, input, syntax)     re_token_t *token;     re_string_t *input;     reg_syntax_t syntax;{  unsigned char c;  if (re_string_eoi (input))    {      token->type = END_OF_RE;      return 0;    }  c = re_string_peek_byte (input, 0);  token->opr.c = c;#ifdef RE_ENABLE_I18N  if (input->mb_cur_max > 1 &&      !re_string_first_byte (input, re_string_cur_idx (input)))    {      token->type = CHARACTER;      return 1;    }#endif /* RE_ENABLE_I18N */  if (c == '\\' && (syntax & RE_BACKSLASH_ESCAPE_IN_LISTS))    {      /* In this case, '\' escape a character.  */      unsigned char c2;      re_string_skip_bytes (input, 1);      c2 = re_string_peek_byte (input, 0);      token->opr.c = c2;      token->type = CHARACTER;      return 1;    }  if (c == '[') /* '[' is a special char in a bracket exps.  */    {      unsigned char c2;      int token_len;      c2 = re_string_peek_byte (input, 1);      token->opr.c = c2;      token_len = 2;      switch (c2)	{	case '.':	  token->type = OP_OPEN_COLL_ELEM;	  break;	case '=':	  token->type = OP_OPEN_EQUIV_CLASS;	  break;	case ':':	  if (syntax & RE_CHAR_CLASSES)	    {	      token->type = OP_OPEN_CHAR_CLASS;	      break;	    }	  /* else fall through.  */	default:	  token->type = CHARACTER;	  token->opr.c = c;	  token_len = 1;	  break;	}      return token_len;    }  switch (c)    {    case '-':      token->type = OP_CHARSET_RANGE;      break;    case ']':      token->type = OP_CLOSE_BRACKET;      break;    case '^':      token->type = OP_NON_MATCH_LIST;      break;    default:      token->type = CHARACTER;    }  return 1;}