简体   繁体   English

协调大组名称时崩溃

[英]Crashing on reconciliation of large group name

I don't have very much knowledge of C++ and Lotus notes.我不太了解 C++ 和 Lotus Notes。 I have piece of code which prints the group name in log.我有一段代码可以在日志中打印组名。

Util::AgentDebug("In Command::InitGroupMap(): Group Name = %s",lnGrpName.GetBuf());

lnGrpName is LNstring. lnGrpName 是 LNstring。 it is working fine but whenever group name length is more than 2200, then it crashes.它工作正常,但只要组名长度超过 2200,就会崩溃。

here is the example - suppose group name is这是示例 - 假设组名是

asd.Storage.Implementation; asd.Storage.Implementation; task-mnncpohcpg01;任务-mnncpohcpg01; task-paersc2hcpg01;任务-paersc2hcpg01; azscotns02a; azscotns02a; azscotns02b; azscotns02b; ctshelns02a; ctshelns02a; ctshelns02b; ctshelns02b; flschons03a; flschons03a; flschons03b; flschons03b; iadubqns02a; iadubqns02a; iadubqns02b; iadubqns02b; mnncpoba0015; mnncpoba0015; mnncpobrcd01; mnncpobrcd01; mnncpoisobrcd01; mnncpoisobrcd01; mnncpoisobrcd02; mnncpoisobrcd02; mnncpoisov7k01; mnncpoisov7k01; mnncpolto01; mnncpolto01; mnncpolto01_1; mnncpolto01_1; mnncpolto01_imc; mnncpolto01_imc; mnncpons03a; mnncpons03a; mnncpons03b; mnncpons03b; mnncpons900a_asd; mnncpons900a_asd; mnncpons900b_asd; mnncpons900b_asd; mnncpons900c; mnncpons900c; mnncpons900c_asd; mnncpons900c_asd; mnncpons900d; mnncpons900d; mnncpons900d_asd; mnncpons900d_asd; mnncpons900_asd; mnncpons900_asd; mnncpons900_sw1; mnncpons900_sw1; mnncpons900_sw2; mnncpons900_sw2; mnncposanc100; mnncposanc100; mnncposanc200; mnncposanc200; mnncposanr150; mnncposanr150; mnncposanr250; mnncposanr250; mnncposvc01; mnncposvc01; MNNCPOFL9KR01; MNNCPOFL9KR01; MNNCPOFL9KR02; MNNCPOFL9KR02; MNNCPONS900_sw1; MNNCPONS900_sw1; MNNCPONS900_sw2; MNNCPONS900_sw2; njmadins01a; njmadins01a; njmadins01b; njmadins01b; njros1ns05ta; njros1ns05ta; njros1ns05tb; njros1ns05tb; njwoodns05a; njwoodns05a; njwoodns05b; njwoodns05b; NJCTMVSP01; NJCTMVSP01; p2erscba0145; p2erscba0145; paersc1ns900a_asd; paersc1ns900a_asd; paersc1ns900b_asd; paersc1ns900b_asd; paersc1ns900c; paersc1ns900c; paersc1ns900d; paersc1ns900d; paersc1ns900_sw1; paersc1ns900_sw1; paersc1ns900_sw2; paersc1ns900_sw2; paersc2ns900a_asd; paersc2ns900a_asd; paersc2ns900b_asd; paersc2ns900b_asd; paersc2ns900c; paersc2ns900c; paersc2ns900d; paersc2ns900d; paersc2ns900_sw1; paersc2ns900_sw1; paersc2ns900_sw2; paersc2ns900_sw2; paersc2ocum01; paersc2ocum01; paersc2opm01; paersc2opm01; paerscns05; paerscns05; paerscnsv501a; paerscnsv501a; paerscnsv501b; paerscnsv501b; PACTMVSP01; PACTMVSP01; PAERSC1FL9KR01; PAERSC1FL9KR01; PAERSC1FL9KR02; PAERSC1FL9KR02; PAERSC1LABBRCD01; PAERSC1LABBRCD01; PAERSC1LABBRCD02; PAERSC1LABBRCD02; PAERSC1LABSVC01; PAERSC1LABSVC01; PAERSC2FL9KR01; PAERSC2FL9KR01; PAERSC2FL9KR02; PAERSC2FL9KR02; PAERSC2FL9KR03; PAERSC2FL9KR03; PAERSC2LABBRCD01; PAERSC2LABBRCD01; PAERSC2LABBRCD02; PAERSC2LABBRCD02; PAERSC2LABSVC01; PAERSC2LABSVC01; txdallns02a; txdallns02a; txdallns02b; txdallns02b; MNNCPOBA0014; MNNCPOBA0014; paerscsvc03; paerscsvc03; njros1svc01; njros1svc01; njros1svc02; njros1svc02; p1ehowld202; p1ehowld202; p1ehowld203; p1ehowld203; p2ehowld202; p2ehowld202; p2ehowld203; p2ehowld203; mnncpold202; mnncpold202; mnncpold203; mnncpold203; MNNCPONS805_asd; MNNCPONS805_asd; MNNCPONS805a_asd; MNNCPONS805a_asd; MNNCPONS805b_asd; MNNCPONS805b_asd; MNNCPONS805b_asd; MNNCPONS805b_asd; paersc2ns805_asd; paersc2ns805_asd; paersc2ns805a_asd; paersc2ns805a_asd; paersc2ns805b_asd; paersc2ns805b_asd; mnncpob15k01; mnncpob15k01; paersc1g15k01; paersc1g15k01; paersc2g15k01; paersc2g15k01; paersc2sane103; paersc2sane103; paersc2sane203; paersc2sane203; P2ERSCBA0305; P2ERSCBA0305; MNNCPOBA0277; MNNCPOBA0277; P2ERSCAPL0005; P2ERSCAPL0005; MNNCPOAPL0016; MNNCPOAPL0016; p2erscba0147; p2erscba0147; mnncpoba0016; mnncpoba0016; MNNCPOECSCN01; MNNCPOECSCN01; PAERSC2ECSCN01; PAERSC2ECSCN01; PAERSC2FLAR900_1; PAERSC2FLAR900_1; P2ERSCAPL0006; P2ERSCAPL0006; njros1labcisc100; njros1labcisc100; njros1labcisc200; njros1labcisc200; p1erscba0402; p1erscba0402; paersc2ns700_sw1; paersc2ns700_sw1; paersc2ns700_sw2; paersc2ns700_sw2; paersc2ns700a_asd; paersc2ns700a_asd; paersc2ns700b_asd; paersc2ns700b_asd; paersc2ns700_asd; paersc2ns700_asd; paersc1ns700_sw1; paersc1ns700_sw1; paersc1ns700_sw2; paersc1ns700_sw2; paersc1ns700a_asd; paersc1ns700a_asd; paersc1ns700b_asd; paersc1ns700b_asd; paersc1ns700_asd; paersc1ns700_asd; mnncpons700_sw1; mnncpons700_sw1; mnncpons700_sw1; mnncpons700_sw1; mnncpons700_sw2; mnncpons700_sw2; mnncpons700a_asd; mnncpons700a_asd; mnncpons700b_asd; mnncpons700b_asd; mnncpons700c_asd; mnncpons700c_asd; mnncpons700d_asd; mnncpons700d_asd; mnncpons700_asd; mnncpons700_asd; p2erscba0346; p2erscba0346; p2erscba0146; p2erscba0146; paersc1ns500; paersc1ns500; paersc1ns500a_asd; paersc1ns500a_asd; paersc1ns500b_asd; paersc1ns500b_asd; paersc2ns500; paersc2ns500; paersc2ns500a_asd; paersc2ns500a_asd; paersc2ns500b_asd paersc2ns500b_asd

is this issue because of LNString or GetBuf()?这个问题是因为 LNString 还是 GetBuf()?

AgentDebug method is below - AgentDebug 方法如下 -

void Util::AgentDebug( wchar_t * format , ... )
 {

wchar_t     tmp[2048];
va_list     args;
char        strBuff[4096];
int         j = 0;

va_start(args, format);
vswprintf_s(tmp, format, args);
va_end(args);

int cnt = wcstombs(strBuff, tmp, 4095);
if(cnt < 0)
{
    char *strInput = (char*)tmp;
    for( int i = 0; i < (wcslen(tmp) * 2); i++ )
    {
        if(strInput[i] != 0)
            strBuff[j++] = strInput[i];
    }
    strBuff[j] = '\0';
}
// AdkDebug (strBuff);
// Fix for IY98698 Certain Chinese character throws exception during recon (PMR10927999672)
// String to be logged is passed as second argument
AdkDebug("%s",strBuff);


 }// end of func AgentDebug()
  // end S15302

what is the alternative of this because i want to print group name in log.这是什么替代方案,因为我想在日志中打印组名。

That looks a lot more like a group membership list than a group name, but okay...这看起来更像是一个组成员列表而不是组名,但是好吧......

I'm pretty rusty on my C++ and va_args stuff, but it looks to me like your tmp array can only hold 2048 wchar_t, and I assume that you need one wchar_t for the null terminator and you've got about 40 characters in your format string.我对我的 C++ 和 va_args 的东西很生疏,但在我看来你的 tmp 数组只能容纳 2048 个 wchar_t,我假设你需要一个 wchar_t 作为空终止符并且你的格式有大约 40 个字符细绳。 So you're overflowing tmp when you pass in a string with length 2200. You'll overflow it with anything with a length that's longer than 2007 -- if I counted right.因此,当您传入一个长度为 2200 的字符串时,您将溢出 tmp。如果我没记错的话,任何长度超过 2007 的字符串都会溢出它。

I was thinking the same thing?我在想同样的事? A Group name as long as 2200 bytes or chars?一个组名只要 2200 字节或字符? Ok.行。 I don't know how to "fix" your issue, but assuming you can't really "fix" it, to "fix" it I would either truncate the string or add the string as two values.我不知道如何“修复”你的问题,但假设你不能真正“修复”它,要“修复”它我会截断字符串或将字符串添加为两个值。 If the string is longer than 2150, break it up into two strings and write both of them to the log.如果字符串长于 2150,则将其分成两个字符串并将它们都写入日志。 Just a thought.只是一个想法。 Can't do more without more info.没有更多信息就无法做更多事情。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM