From 726f855bc43f8a19de9c2b01475aeae58978cf17 Mon Sep 17 00:00:00 2001 From: Vadim Yegorov Date: Tue, 20 Jan 2015 01:19:52 +0000 Subject: [PATCH] =?UTF-8?q?1.=200002912:=20=D0=92=20=D0=B4=D0=B8=D0=B0?= =?UTF-8?q?=D0=BB=D0=BE=D0=B3=D0=B0=D1=85=20DM=5FSETTEXT,=20DM=5FGETTEXT?= =?UTF-8?q?=20=D0=BD=D0=B5=20=D0=BF=D0=BE=D0=B7=D0=B2=D0=BE=D0=BB=D1=8F?= =?UTF-8?q?=D1=8E=D1=82=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=D1=82=D1=8C?= =?UTF-8?q?=20=D1=81=D0=BE=20=D1=81=D1=82=D1=80=D0=BE=D0=BA=D0=B0=D0=BC?= =?UTF-8?q?=D0=B8=20=D1=81=D0=BE=D0=B4=D0=B5=D1=80=D0=B6=D0=B0=D1=89=D0=B8?= =?UTF-8?q?=D0=BC=D0=B8=20'\0'.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- far/changelog | 6 +++++- far/dialog.cpp | 20 ++++++++++++-------- far/dlgedit.cpp | 2 +- far/vbuild.m4 | 2 +- plugins/luamacro/_globalinfo.lua | 2 +- plugins/luamacro/changelog | 6 +++++- plugins/luamacro/luafar/service.c | 8 +++++--- plugins/luamacro/luamacro.rc | 2 +- 8 files changed, 31 insertions(+), 17 deletions(-) diff --git a/far/changelog b/far/changelog index 4ce88e0df0..5024f893b2 100644 --- a/far/changelog +++ b/far/changelog @@ -1,4 +1,8 @@ -svs 19.01.2015 23:46:37 +0300 - build 4247 +zg 20.01.2015 03:18:09 +0200 - build 4248 + +1. 0002912: В диалогах DM_SETTEXT, DM_GETTEXT не позволяют работать со строками содержащими '\0'. + +svs 19.01.2015 23:46:37 +0300 - build 4247 1. SQLite 3.8.8 diff --git a/far/dialog.cpp b/far/dialog.cpp index ae4d434bc3..5db68a9757 100644 --- a/far/dialog.cpp +++ b/far/dialog.cpp @@ -5655,7 +5655,7 @@ intptr_t Dialog::SendMessage(intptr_t Msg,intptr_t Param1,void* Param2) auto InitItemData=[did,&Ptr,&Len] { if (!did->PtrLength) - did->PtrLength=Len; + did->PtrLength=Len; //BUGBUG: PtrLength , ? else if (Len > did->PtrLength) Len=did->PtrLength; @@ -5677,11 +5677,16 @@ intptr_t Dialog::SendMessage(intptr_t Msg,intptr_t Param1,void* Param2) case DI_EDIT: case DI_PSWEDIT: case DI_FIXEDIT: - - if (!CurItem->ObjPtr) - break; - - Ptr = static_cast(CurItem->ObjPtr)->GetStringAddr(); + { + auto edit=static_cast(CurItem->ObjPtr); + if (edit) + { + Ptr = edit->GetStringAddr(); + Len = edit->GetLength(); + InitItemData(); + } + break; + } case DI_TEXT: case DI_VTEXT: case DI_SINGLEBOX: @@ -5722,7 +5727,6 @@ intptr_t Dialog::SendMessage(intptr_t Msg,intptr_t Param1,void* Param2) break; } default: // , - did->PtrLength=0; break; } @@ -5812,7 +5816,7 @@ intptr_t Dialog::SendMessage(intptr_t Msg,intptr_t Param1,void* Param2) case DI_PSWEDIT: case DI_FIXEDIT: case DI_LISTBOX: // - CurItem->strData = did->PtrData; + CurItem->strData = string(did->PtrData, did->PtrLength); Len = CurItem->strData.size(); break; default: diff --git a/far/dlgedit.cpp b/far/dlgedit.cpp index 0b231eb44e..56aa85144e 100644 --- a/far/dlgedit.cpp +++ b/far/dlgedit.cpp @@ -332,7 +332,7 @@ void DlgEdit::SetString(const string& Str, bool disable_autocomplete, int pos) if (disable_autocomplete && (acompl = lineEdit->GetAutocomplete())) lineEdit->SetAutocomplete(false); - lineEdit->SetString(Str.data()); + lineEdit->SetString(Str.data(),Str.size()); if (pos >= 0) lineEdit->SetCurPos(pos); diff --git a/far/vbuild.m4 b/far/vbuild.m4 index df65875b91..b269475615 100644 --- a/far/vbuild.m4 +++ b/far/vbuild.m4 @@ -1 +1 @@ -m4_define(BUILD,4247)m4_dnl +m4_define(BUILD,4248)m4_dnl diff --git a/plugins/luamacro/_globalinfo.lua b/plugins/luamacro/_globalinfo.lua index 1d1fe27e0f..f9e4222541 100644 --- a/plugins/luamacro/_globalinfo.lua +++ b/plugins/luamacro/_globalinfo.lua @@ -1,6 +1,6 @@ function export.GetGlobalInfo() return { - Version = { 1, 0, 0, 474 }, + Version = { 1, 0, 0, 475 }, MinFarVersion = { 3, 0, 0, 4244 }, Guid = win.Uuid("4EBBEFC8-2084-4B7F-94C0-692CE136894D"), Title = "LuaMacro", diff --git a/plugins/luamacro/changelog b/plugins/luamacro/changelog index 955bbf81d1..c4888efe70 100644 --- a/plugins/luamacro/changelog +++ b/plugins/luamacro/changelog @@ -1,4 +1,8 @@ -shmuel 17.01.2015 23:05:52 +0200 - build 474 +zg 20.01.2015 03:10:50 +0200 - build 475 + +1. 0002912: В диалогах DM_SETTEXT, DM_GETTEXT не позволяют работать со строками содержащими '\0'. + +shmuel 17.01.2015 23:05:52 +0200 - build 474 1. Рефакторинг. diff --git a/plugins/luamacro/luafar/service.c b/plugins/luamacro/luafar/service.c index c266673746..da06253741 100644 --- a/plugins/luamacro/luafar/service.c +++ b/plugins/luamacro/luafar/service.c @@ -3076,10 +3076,12 @@ static int far_SendDlgMessage(lua_State *L) case DM_GETDIALOGTITLE: { struct FarDialogItemData fdid; + size_t size; fdid.StructSize = sizeof(fdid); fdid.PtrLength = (size_t) Info->SendDlgMessage(hDlg, Msg, Param1, NULL); fdid.PtrData = (wchar_t*) malloc((fdid.PtrLength+1) * sizeof(wchar_t)); - push_utf8_string(L, Info->SendDlgMessage(hDlg, Msg, Param1, &fdid)?fdid.PtrData:L"", -1); + size = Info->SendDlgMessage(hDlg, Msg, Param1, &fdid); + push_utf8_string(L, size?fdid.PtrData:L"", size); free(fdid.PtrData); return 1; } @@ -3093,8 +3095,8 @@ static int far_SendDlgMessage(lua_State *L) { struct FarDialogItemData fdid; fdid.StructSize = sizeof(fdid); - fdid.PtrData = (wchar_t*)check_utf8_string(L, 4, NULL); - fdid.PtrLength = 0; // wcslen(fdid.PtrData); + fdid.PtrLength = 0; + fdid.PtrData = (wchar_t*)check_utf8_string(L, 4, &fdid.PtrLength); lua_pushinteger(L, Info->SendDlgMessage(hDlg, Msg, Param1, &fdid)); return 1; } diff --git a/plugins/luamacro/luamacro.rc b/plugins/luamacro/luamacro.rc index c7a7c1114a..613186bf50 100644 --- a/plugins/luamacro/luamacro.rc +++ b/plugins/luamacro/luamacro.rc @@ -1,6 +1,6 @@ #include -#define PLUGIN_BUILD 474 +#define PLUGIN_BUILD 475 #define PLUGIN_DESC "Lua Macros for Far Manager" #define PLUGIN_NAME "LuaMacro" #define PLUGIN_FILENAME "luamacro.dll"