Skip to content

Commit

Permalink
2.1.0
Browse files Browse the repository at this point in the history
UTF-8, UTF-16の不正なコードをエラーとするようにしました。
  • Loading branch information
nathancorvussolis committed Jun 18, 2015
1 parent a4bbeca commit a5c4d3b
Show file tree
Hide file tree
Showing 6 changed files with 84 additions and 125 deletions.
7 changes: 4 additions & 3 deletions README.TXT
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@

-------------------------------------------------------------------------------

crvskkserv 2.0.2
crvskkserv 2.1.0

-------------------------------------------------------------------------------

Expand Down Expand Up @@ -36,7 +36,8 @@ UTF-8からEUC-JIS-2004に変換できない文字を含む候補は除外され

"1<見出し語> "
辞書検索
応答 : 検索結果 "1/<候補 1>/<候補 2>/ … /<候補 n>\n" または 検索結果なし "4\n"
応答 : 検索結果 "1/<候補 1>/<候補 2>/ … /<候補 n>\n"
または 検索結果なし "4\n"

"2"
バージョン番号取得
Expand Down Expand Up @@ -66,7 +67,7 @@ crvskkserv

The MIT License

Copyright (c) 2012-2014 SASAKI Nobuyuki
Copyright (C) 2012-2015 SASAKI Nobuyuki

Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the "Software"),
Expand Down
8 changes: 4 additions & 4 deletions crvskkserv/crvskkserv.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@
#pragma once

#define RC_PRODUCT "crvskkserv"
#define RC_VERSION "2.0.2"
#define RC_VERSION_D 2,0,2,0
#define RC_TITLE "crvskkserv (ver. 2.0.2)"
#define RC_VERSION "2.1.0"
#define RC_VERSION_D 2,1,0,0
#define RC_TITLE "crvskkserv (ver. 2.1.0)"
#define RC_AUTHOR "nathancorvussolis"

#define APP_TITLE L"crvskkserv"
#define APP_VERSION L"2.0.2"
#define APP_VERSION L"2.1.0"
#define RES_VER RC_PRODUCT "/" RC_VERSION " "

#define REQ_END '0'
Expand Down
144 changes: 52 additions & 92 deletions crvskkserv/eucjis2004.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,21 @@ size_t EucJis2004ToUcp(LPCSTR src, size_t srcsize, PUCSCHAR ucp1, PUCSCHAR ucp2)
return srcused;
}

// 終端NULLを付加

void AddNullWideChar(size_t *srcsize, size_t si, LPWSTR dst, size_t *dstsize, size_t di)
{
if(srcsize != NULL)
{
*srcsize = si;
}
*dstsize = di + 1;
if(dst != NULL)
{
*(dst + di) = L'\0';
}
}

// EUC-JIS-2004をUTF-16へ変換

BOOL EucJis2004ToWideChar(LPCSTR src, size_t *srcsize, LPWSTR dst, size_t *dstsize)
Expand All @@ -179,6 +194,11 @@ BOOL EucJis2004ToWideChar(LPCSTR src, size_t *srcsize, LPWSTR dst, size_t *dstsi
return FALSE;
}

if(dst == NULL)
{
*dstsize = (size_t)-1;
}

if(src == NULL)
{
*dstsize = 0;
Expand All @@ -192,7 +212,7 @@ BOOL EucJis2004ToWideChar(LPCSTR src, size_t *srcsize, LPWSTR dst, size_t *dstsi

for(si = 0; ; si++)
{
if((ss <= si) || (*(src + si) == 0x00))
if((ss <= si) || (*(src + si) == '\0'))
{
break;
}
Expand All @@ -201,15 +221,7 @@ BOOL EucJis2004ToWideChar(LPCSTR src, size_t *srcsize, LPWSTR dst, size_t *dstsi
i = EucJis2004ToUcp(src + si, ss - si, &ucp[0], &ucp[1]);
if((ucp[0] == 0) || (i == 0))
{
if(srcsize != NULL)
{
*srcsize = si;
}
*dstsize = di + 1;
if(dst != NULL)
{
*(dst + di) = L'\0';
}
AddNullWideChar(srcsize, si, dst, dstsize, di);
return FALSE;
}
si += i - 1;
Expand All @@ -226,15 +238,7 @@ BOOL EucJis2004ToWideChar(LPCSTR src, size_t *srcsize, LPWSTR dst, size_t *dstsi

if(*dstsize <= di + utf16num[0] + utf16num[1]) //limit
{
if(srcsize != NULL)
{
*srcsize = si;
}
*dstsize = di + 1;
if(dst != NULL)
{
*(dst + di) = L'\0';
}
AddNullWideChar(srcsize, si, dst, dstsize, di);
return FALSE;
}

Expand All @@ -251,16 +255,23 @@ BOOL EucJis2004ToWideChar(LPCSTR src, size_t *srcsize, LPWSTR dst, size_t *dstsi
}
}

AddNullWideChar(srcsize, si, dst, dstsize, di);
return TRUE;
}

// 終端NULLを付加

void AddNullEucJis2004(size_t *srcsize, size_t si, LPSTR dst, size_t *dstsize, size_t di)
{
if(srcsize != NULL)
{
*srcsize = si;
}
*dstsize = di + 1;
if(dst != NULL)
{
*(dst + di) = L'\0';
*(dst + di) = '\0';
}
return TRUE;
}

// UTF-16をEUC-JIS-2004へ変換
Expand All @@ -282,6 +293,11 @@ BOOL WideCharToEucJis2004(LPCWSTR src, size_t *srcsize, LPSTR dst, size_t *dstsi
return FALSE;
}

if(dst == NULL)
{
*dstsize = (size_t)-1;
}

if(src == NULL)
{
*dstsize = 0;
Expand All @@ -295,24 +311,16 @@ BOOL WideCharToEucJis2004(LPCWSTR src, size_t *srcsize, LPSTR dst, size_t *dstsi

for(si = 0; ; si++)
{
if((ss <= si) || (*(src + si) == 0x0000))
if((ss <= si) || (*(src + si) == L'\0'))
{
break;
}

if(*(src + si) <= 0x007F) //ASCII
if(*(src + si) <= L'\x7F') //ASCII
{
if(*dstsize <= di + 1) //limit
{
if(srcsize != NULL)
{
*srcsize = si;
}
*dstsize = di + 1;
if(dst != NULL)
{
*(dst + di) = 0;
}
AddNullEucJis2004(srcsize, si, dst, dstsize, di);
return FALSE;
}
if(dst != NULL)
Expand Down Expand Up @@ -354,15 +362,7 @@ BOOL WideCharToEucJis2004(LPCWSTR src, size_t *srcsize, LPSTR dst, size_t *dstsi
{
if(*dstsize <= di + 2) //limit
{
if(srcsize != NULL)
{
*srcsize = si;
}
*dstsize = di + 1;
if(dst != NULL)
{
*(dst + di) = 0;
}
AddNullEucJis2004(srcsize, si, dst, dstsize, di);
return FALSE;
}
if(dst != NULL)
Expand All @@ -387,15 +387,7 @@ BOOL WideCharToEucJis2004(LPCWSTR src, size_t *srcsize, LPSTR dst, size_t *dstsi
{
if(*dstsize <= di + 2) //limit
{
if(srcsize != NULL)
{
*srcsize = si;
}
*dstsize = di + 1;
if(dst != NULL)
{
*(dst + di) = 0;
}
AddNullEucJis2004(srcsize, si, dst, dstsize, di);
return FALSE;
}
if(dst != NULL)
Expand All @@ -415,15 +407,7 @@ BOOL WideCharToEucJis2004(LPCWSTR src, size_t *srcsize, LPSTR dst, size_t *dstsi
{
if(*dstsize <= di + 3) //limit
{
if(srcsize != NULL)
{
*srcsize = si;
}
*dstsize = di + 1;
if(dst != NULL)
{
*(dst + di) = 0;
}
AddNullEucJis2004(srcsize, si, dst, dstsize, di);
return FALSE;
}
if(dst != NULL)
Expand Down Expand Up @@ -457,15 +441,7 @@ BOOL WideCharToEucJis2004(LPCWSTR src, size_t *srcsize, LPSTR dst, size_t *dstsi
{
if(*dstsize <= di + 2) //limit
{
if(srcsize != NULL)
{
*srcsize = si;
}
*dstsize = di + 1;
if(dst != NULL)
{
*(dst + di) = 0;
}
AddNullEucJis2004(srcsize, si, dst, dstsize, di);
return FALSE;
}
if(dst != NULL)
Expand All @@ -482,39 +458,23 @@ BOOL WideCharToEucJis2004(LPCWSTR src, size_t *srcsize, LPSTR dst, size_t *dstsi

if(!exist)
{
if(srcsize != NULL)
{
*srcsize = si;
}
*dstsize = di + 1;
if(dst != NULL)
{
*(dst + di) = 0;
}
AddNullEucJis2004(srcsize, si, dst, dstsize, di);
return FALSE;
}
}
}

if(srcsize != NULL)
{
*srcsize = si;
}
*dstsize = di + 1;
if(dst != NULL)
{
*(dst + di) = 0;
}
AddNullEucJis2004(srcsize, si, dst, dstsize, di);
return TRUE;
}

std::string wstring_to_eucjis2004_string(const std::wstring &s)
{
std::string ret;
size_t len = -1;
size_t len;

WideCharToEucJis2004(s.c_str(), NULL, NULL, &len);
if(len > 0)
BOOL b = WideCharToEucJis2004(s.c_str(), NULL, NULL, &len);
if(b && len > 0)
{
try
{
Expand All @@ -534,10 +494,10 @@ std::string wstring_to_eucjis2004_string(const std::wstring &s)
std::wstring eucjis2004_string_to_wstring(const std::string &s)
{
std::wstring ret;
size_t len = -1;
size_t len;

EucJis2004ToWideChar(s.c_str(), NULL, NULL, &len);
if(len > 0)
BOOL b = EucJis2004ToWideChar(s.c_str(), NULL, NULL, &len);
if(b && len > 0)
{
try
{
Expand Down
12 changes: 6 additions & 6 deletions crvskkserv/eucjis2004.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,13 +31,13 @@ size_t EucJis2004ToUcp(LPCSTR src, size_t srcsize, PUCSCHAR ucp1, PUCSCHAR ucp2)
// 引数
// src : 変換元のEUC-JIS-2004文字列
// NULLのとき戻り値はFALSEになる
// srcsize : NULLのときsrcの末尾のNULLまで変換する
// NULL以外のとき指定されたサイズまたはsrcの末尾のNULLの短いほうまで変換する
// srcsize : NULLのときsrcの終端NULLまで変換する
// NULL以外のとき指定されたサイズまたはsrcの終端NULLの短いほうまで変換する
// 変換に使用されたサイズ(char単位)が戻る
// dst : 変換先のUTF-16LE文字列バッファ
// NULLは許容される
// dstsize : dstのサイズ
// 変換結果のサイズ(wchar_t単位)が戻る
// 変換結果の終端NULLを含むサイズ(wchar_t単位)が戻る
// NULLのとき戻り値はFALSEになる
BOOL EucJis2004ToWideChar(LPCSTR src, size_t *srcsize, LPWSTR dst, size_t *dstsize);

Expand All @@ -48,13 +48,13 @@ BOOL EucJis2004ToWideChar(LPCSTR src, size_t *srcsize, LPWSTR dst, size_t *dstsi
// 引数
// src : 変換元のUTF-16LE文字列
// NULLのとき戻り値はFALSEになる
// srcsize : NULLのときsrcの末尾のNULLまで変換する
// NULL以外のとき指定されたサイズまたはsrcの末尾のNULLの短いほうまで変換する
// srcsize : NULLのときsrcの終端NULLまで変換する
// NULL以外のとき指定されたサイズまたはsrcの終端NULLの短いほうまで変換する
// 変換に使用されたサイズ(wchar_t単位)が戻る
// dst : 変換先のEUC-JIS-2004文字列バッファ
// NULLは許容される
// dstsize : dstのサイズ
// 変換結果のサイズ(char単位)が戻る
// 変換結果の終端NULLを含むサイズ(char単位)が戻る
// NULLのとき戻り値はFALSEになる
BOOL WideCharToEucJis2004(LPCWSTR src, size_t *srcsize, LPSTR dst, size_t *dstsize);

Expand Down
Loading

0 comments on commit a5c4d3b

Please sign in to comment.