(OK) 调试cBPM—CentOS7—gdb—gdbserver—问题的解决—1—手机死机

本文讨论了Xerces库在OpenBSD 5.1版本中遇到的编码问题,具体涉及到wcsrtombs和mbsrtowcs函数的行为不符合文档说明。通过修改配置脚本来检测并调整这些函数的使用方式,可以解决潜在的内存访问风险。包括了一个基于函数返回值的补丁代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//break main.cpp:63
//break main.cpp:155
//break WAPI.cpp:72
//break bOSXMLHelper.cpp:40

//break PlatformUtils.hpp:813
//break MemoryManagerImpl.cpp:37
//break WorkflowListener.cpp:67

//break XMLString.hpp:1451
//break Hashers.hpp:47

//break RangeToken.cpp:335

//break XMLRangeFactory.cpp:113

//break XMLInitializer.cpp:51
//break XMLInitializer.cpp:62            // 调试到此处,停止
//break XMLInitializer.cpp:61            // 所以,进入到initializeDatatypeValidatorFactory()单步跟踪,使用s,不要用n

break IconvTransService.cpp:432        //找到了故障点(在这一行的)。
break IconvTransService.cpp:460        //估计是内存分配问题,比如 溢出

===================================================================
http://c-dev.xerces.apache.narkive.com/DWSpAHdF/xerces-trunk-on-openbsd-5-1
===================================================================
Post by Alberto Massari
Hi Simon,
it looks that libc in OpenBSD 5.1 is not obeying to the documentation for
wcsrtombs/mbsrtowcs.
If *d**s**t* is not a null pointer, the pointer object pointed to
by *s**r**c* is assigned either a null pointer (if conversion
stopped due to reaching a terminating null wide-character)
or the address just past the last wide-character converted
(if any).
Instead of hacking the code to try to detect whether the conversion
actually wrote a NULL character in the converted string, I chose to modify
the 'configure' script to detect this behaviour and disable the usage of
the re-entrant functions if it doesn't match how the Xerces code uses them.
Thank you for reporting this issue,
Alberto
---------------------------------------
Hi,
I wanted to try using xerces on openbsd 5.1.
unknow reason.
After reading the code, it turns out that the end of conversion by
wcsrtombs and mbsrtowcs is based on a test on source pointer (source
pointer should point on null character).
The problem is that this behaviour is not implemented. Source pointer
points on the character following the last converted character leading
xerces binary to a risky memory access.

Below, there is a patch based on values returned by the functions (-1 in
case of error, >= 0 in case of complete/incomplete conversion) that fixes
the problem.
Regards,
Simon Elbaz
$ svn diff xercesc/util/Transcoders/Iconv/IconvTransService.cpp
Index: xercesc/util/Transcoders/Iconv/IconvTransService.cpp
===================================================================
--- xercesc/util/Transcoders/Iconv/IconvTransService.cpp (revision
1387785)
+++ xercesc/util/Transcoders/Iconv/IconvTransService.cpp (working
copy)
@@ -429,7 +429,7 @@
srcBuffer[gTempBuffArraySize - 1] = 0;
const wchar_t *src = 0;
- while (toTranscode[srcCursor] || src)
+ while (toTranscode[srcCursor])
{
if (src == 0) // copy a piece of the source string into a local
// buffer, converted to wchar_t and NULL-terminated.
@@ -454,7 +454,7 @@
break;
}
dstCursor += len;
- if (src != 0) // conversion not finished. This *always* means there
+ if (len == (resultSize - dstCursor)) // conversion not finished.
This *always* means there
// was not enough room in the destination buffer.
{
reallocString<char>(resultString, resultSize, manager,
resultString != localBuffer);
@@ -512,9 +512,9 @@
break;
}
dstCursor += len;
- if (src == 0) // conversion finished
+ if ((len >= 0) && (len < (resultSize - dstCursor))) // conversion
finished
break;
- if (dstCursor >= resultSize - 1)
+ if (len == (resultSize - dstCursor))
reallocString<wchar_t>(tmpString, resultSize, manager,
tmpString != localBuffer);
}
===================================================================



<script>window._bd_share_config={"common":{"bdsnskey":{},"bdtext":"","bdmini":"2","bdminilist":false,"bdpic":"","bdstyle":"0","bdsize":"16"},"share":{}};with(document)0[(getelementsbytagname('head')[0]||body).appendchild(createelement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new date()/36e5)];</script>
阅读(34) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
CREATE TABLE `scc_sup_auth_org_cat_form` ( `ORG_CAT_FORM_ID` bigint(20) NOT NULL COMMENT 'ID', `ORG_CAT_FORM_NUMBER` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '控制单号', `SUPPLIER_CONTROL_TYPE` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '控制类型\r\n 参考字典码:SUPPLIER_CONTROL_TYPE', `VENDOR_ID` bigint(20) DEFAULT NULL COMMENT '供应商ID', `VENDOR_NAME` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '供应商名称', `VENDOR_CODE` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '供应商编码', `CONTROL_EXPLAIN` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '控制说明', `BUSINESS_MATTER_TYPE` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '商务事项,参考字典码BUSINESS_MATTER_TYPE, 存入编码用,隔开', `OTHER_EXPLAIN` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '其他原因说明', `APPROVE_STATUS` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '审批状态(DRAFT拟定、SUBMITTED已提交、REJECTED已驳回、APPROVED已审批,参考字典码APPROVE_STATUS_TYPE', `START_DATE` date DEFAULT NULL COMMENT '生效日期(YYYY-MM-DD)', `END_DATE` date DEFAULT NULL COMMENT '失效日期(YYYY-MM-DD)', `CREATED_ID` bigint(20) NOT NULL COMMENT '创建人ID', `CREATED_BY` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '创建人', `CREATION_DATE` datetime NOT NULL COMMENT '创建时间', `CREATED_BY_IP` varchar(30) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '创建人IP', `LAST_UPDATED_ID` bigint(20) DEFAULT NULL COMMENT '最后更新人ID', `LAST_UPDATED_BY` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '最后更新人', `LAST_UPDATE_DATE` datetime NOT NULL DEFAULT current_timestamp() COMMENT '最后更新时间', `LAST_UPDATED_BY_IP` varchar(30) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '最后更新人IP', `TENANT_ID` varchar(30) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '租户ID', `VERSION` bigint(20) DEFAULT 0 COMMENT '版本号', `CBPM_INSTANCE_ID` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '外部CBPM实例ID', `TRANSIT_DAY` decimal(20,0) DEFAULT NULL COMMENT '业务过渡期', `CREATED_FULL_NAME` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '创建人新姓名', `LAST_UPDATED_FULL_NAME` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '最后更新人姓名', `PJ_IS_NEED_AUDIT_BY_LEGAL` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '是否需法务审批', `PAYMENT_CONTROL_TYPE` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '付款控制类型', `OTHER_REASON` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '其他原因说明', `UNFREEZE_AMOUNT` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '解冻比例/金额', `FORZEN_AMOUNT` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '冻结比例/金额', `IS_FORZEN_PAYMENT` varchar(10) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '是否冻结付款', `IS_FORZEN_DELIVERY` varchar(10) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '是否冻结送货', `IS_FORZEN_ORDER` varchar(10) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '是否冻结订单', `IS_FORZEN_ENQUIRY` varchar(10) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '是否冻结询价', `FLOW_ID` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '流程ID', `EXT_CONTROL_REASON` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '控制原因', `CURRENCY` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '币种', `THAW_ORG_CAT_FORM_NUMBER` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '关联付款冻结单号', `THAW_ORG_CAT_FORM_ID` bigint(20) DEFAULT NULL COMMENT '关联付款冻结单ID', `BU_ORG_CODE` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '所属事业群编码-二开', `EXT_PRODUCT_LINE` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '适用产品线', PRIMARY KEY (`ORG_CAT_FORM_ID`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='组织品类控制单据' 帮我整理一下字段和对应的中文名,就像ORG_ID 采购组织ID
08-02
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值