�����Ч�ĺ����ַ�
| 26 | |
| 27 | // �����Ч�ĺ����ַ� |
| 28 | static int get_valid_string(char *src, unsigned dlen, char *buffer, unsigned bsize) |
| 29 | { |
| 30 | int n = 0; |
| 31 | unsigned char *src_ptr = NULL; |
| 32 | unsigned char *obj_ptr = NULL; |
| 33 | unsigned char *ch = NULL; |
| 34 | int firstChineseChar = 0; |
| 35 | char lastChar = 0; |
| 36 | |
| 37 | if (src == NULL || dlen == 0 || buffer == NULL || bsize == 0) |
| 38 | return -1; |
| 39 | |
| 40 | obj_ptr = (unsigned char *)buffer; |
| 41 | |
| 42 | src_ptr = (unsigned char *)src; |
| 43 | |
| 44 | /* Ϊ���һ�� '\0' ����һ���ֽڿռ� */ |
| 45 | n = bsize - 1; |
| 46 | |
| 47 | for (ch = src_ptr; *ch; ch++) { |
| 48 | if (ch - src_ptr >= n) |
| 49 | break; |
| 50 | |
| 51 | /* ���ж�ǰһ���ֽ����λ�Ƿ�Ϊ 1 */ |
| 52 | if (firstChineseChar) { |
| 53 | if (!isvalidChinese(lastChar,*ch)) |
| 54 | break; |
| 55 | |
| 56 | //if (ch - src_ptr >= n + 1) |
| 57 | // break; |
| 58 | |
| 59 | firstChineseChar = 0; |
| 60 | /* �ȿ���ǰһ���ֽ� */ |
| 61 | *obj_ptr++ = lastChar; |
| 62 | *obj_ptr++ = *ch; |
| 63 | } |
| 64 | else if ((*ch) & 0x80) { |
| 65 | /* ˵����ǰ�ֽڵ����λΪ 1, ���п����Ǻ��ֵĵ�һ���ֽ� */ |
| 66 | firstChineseChar = 1; |
| 67 | lastChar = *ch; |
| 68 | } |
| 69 | else |
| 70 | *obj_ptr++ = *ch; |
| 71 | } |
| 72 | *obj_ptr = 0; |
| 73 | return 0; |
| 74 | } |
| 75 | |
| 76 | static void rfc2047_test(acl::rfc2047& rfc2047, const char* s) |
| 77 | { |
no test coverage detected
searching dependent graphs…