svnno****@sourc*****
svnno****@sourc*****
2011年 12月 6日 (火) 17:17:56 JST
Revision: 4768 http://sourceforge.jp/projects/ttssh2/svn/view?view=rev&revision=4768 Author: doda Date: 2011-12-06 17:17:56 +0900 (Tue, 06 Dec 2011) Log Message: ----------- スペース等が含まれている場合にスキップするようにした。 Modified Paths: -------------- trunk/teraterm/common/ttlib.c -------------- next part -------------- Modified: trunk/teraterm/common/ttlib.c =================================================================== --- trunk/teraterm/common/ttlib.c 2011-12-04 12:50:16 UTC (rev 4767) +++ trunk/teraterm/common/ttlib.c 2011-12-06 08:17:56 UTC (rev 4768) @@ -10,6 +10,7 @@ #include <stdio.h> #include "tttypes.h" #include <shlobj.h> +#include <ctype.h> // for _ismbblead #include <mbctype.h> @@ -41,50 +42,50 @@ int b64decode(PCHAR dst, int dsize, PCHAR src) { - unsigned int b; + unsigned int b = 0; char c; - int len = 0; + int len = 0, state = 0; - if (src == NULL || dst == NULL || dsize == 0) { + if (src == NULL || dst == NULL || dsize == 0) return 0; - } while (1) { - if ((c = b64dec_table[*src++]) == -1) { - break; + if (isspace(*src)) { + src++; + continue; } - b = c << 18; - if ((c = b64dec_table[*src++]) == -1) { + if ((c = b64dec_table[*src++]) == -1) break; - } - b |= c << 12; - dst[len++] = (b >> 16) & 0xff; - if (len >= dsize) { - break; - } + b = (b << 6) | c; + state++; - if ((c = b64dec_table[*src++]) == -1) { - break; + if (state == 4) { + if (dsize > len) + dst[len++] = (b >> 16) & 0xff; + if (dsize > len) + dst[len++] = (b >> 8) & 0xff; + if (dsize > len) + dst[len++] = b & 0xff; + state = 0; + if (dsize <= len) + break; } - b |= c << 6; + } - dst[len++] = (b >> 8) & 0xff; - if (len >= dsize) { - break; - } - - if ((c = b64dec_table[*src++]) == -1) { - break; - } - b |= c; - - dst[len++] = b & 0xff; - if (len >= dsize) { - break; - } + if (state == 2) { + b <<= 4; + if (dsize > len) + dst[len++] = (b >> 8) & 0xff; } + else if (state == 3) { + b <<= 6; + if (dsize > len) + dst[len++] = (b >> 16) & 0xff; + if (dsize > len) + dst[len++] = (b >> 8) & 0xff; + } return len; }