目标列号不存在时,使用行号相同列号的最小的元素作为解析结果,存在访问越界问题修改

issue:[Bug]:https://gitee.com/openharmony/ability_ability_runtime/issues/ICXUGY

Signed-off-by: rentangyu <rentangyu@huawei.com>
This commit is contained in:
rentangyu
2025-09-16 11:06:13 +08:00
parent beef63cf49
commit c089e9f201
2 changed files with 47 additions and 3 deletions
@@ -278,7 +278,7 @@ MappingInfo SourceMap::Find(int32_t row, int32_t col, const SourceMapData& targe
size_t realSourceIndex = std::min(REAL_SOURCE_INDEX, targetMap.sources_.size());
std::string sources = targetMap.sources_.substr(realSourceIndex,
targetMap.sources_.size() - realSourceIndex - 1);
if (key.rfind(".js") != std::string::npos) {
if (key.rfind(".js") == key.size() - INDEX_THREE) {
return MappingInfo {
.row = row,
.col = col,
@@ -305,7 +305,9 @@ MappingInfo SourceMap::Find(int32_t row, int32_t col, const SourceMapData& targe
}
}
if (targetMap.afterPos_[res].afterRow != row && targetMap.afterPos_[res + 1].afterRow == row) {
if (res + 1 < static_cast<int32_t>(targetMap.afterPos_.size()) &&
targetMap.afterPos_[res].afterRow != row &&
targetMap.afterPos_[res + 1].afterRow == row) {
res++;
}
@@ -284,7 +284,7 @@ HWTEST_F(SourceMapTest, JsEnv_SourceMap_1200, Function | MediumTest | Level1)
"IADnB;;uGAEoC,SAAS;uGACR,UAAU,CAAC,KAAK;;KALpD;;wGAImC,SAAS;wGACR,UAAU,CAAC,KAAK;;IADnD,CAAC,KAAK;IAxCR,"
"QAAA,CAwCS,aAAa,EAAE,SAAS,CAAY;IAC3C,CAAC,KAAK;IAzCR,QAAA,CAyCS,aAAa,EAAE,UAAU,CAAmB;IAEnD;;YACE,MAAM;;;"
"YACJ,IAAI,QAAC,iBAAiB,GAAG,IAAI,CAAC,aAAa;;QAA3C,IAAI;;YACJ,IAAI,QAAC,iBAAiB,GAAG,IAAI,CAAC,aAAa;;QAA3C,"
"IAAI;QAFN,MAAM;KAIP\"\n"
"IAAI;QAFN,MAAM;KAIP\",\n"
" \"entry-package-info\": \"entry|1.0.0\n"
" }\n"
"}";
@@ -317,6 +317,48 @@ HWTEST_F(SourceMapTest, JsEnv_SourceMap_1300, Function | MediumTest | Level1)
GTEST_LOG_(INFO) << "JsEnv_SourceMap_1300 end";
}
/**
* @tc.number: JsEnv_SourceMap_1400
* @tc.name: Find
* @tc.desc: Verifying Find succeeded.
*/
HWTEST_F(SourceMapTest, JsEnv_SourceMap_1400, Function | MediumTest | Level1)
{
GTEST_LOG_(INFO) << "JsEnv_SourceMap_1400 start";
std::string sourceMaps = "{\n"
" \"entry|entry|1.0.0|src/main/ets/pages/Index.ts\": {\n"
" \"version\": 3,\n"
" \"file\": \"Index.ets\",\n"
" \"sources\": [\n"
" \"entry/src/main/ets/pages/Index.ets\"\n"
" ],\n"
" \"names\": [],\n"
" \"mappings\": \";;;;IAuBW,aAAa,GAAE,SAAS;IACP,aAAa,GAAE,UAAU;;AAxBrD,MAAM,MAAM,UAAU;"
"IACpB,KAAK,IAAI;CACV;MAIM,uBAAuB;IAF9B;;6BAIoC,SAAS;uGACF,UAAU,CAAC,KAAK;;KAP1D;;6BAMmC,"
"SAAS;wGACF,UAAU,CAAC,KAAK;;IADzD,CAAC,KAAK;IAAC,aAAa,EAAE,SAAS,CAAY;IAC3C,CAAC,IAAI;IAAC,"
"CAAC,KAAK;IAAC,aAAa,EAAE,UAAU,CAAmB;IAEzD;;YACE,MAAM;;;;;4CAEJ,oBAAoB,OAAC;wBACnB,aAAa,EAAE,"
"IAAI,CAAC,aAAa;qBAClC;;;;4BADC,aAAa,EAAE,IAAI,CAAC,aAAa;;;;;;;;;;QAHrC,MAAM;KAMP;;;;;;;;;;;;;;;;"
"AAGH,MAAM,OAAQ,oBAAoB;IADlC;;;;;4DAGsC,SAAS;;sDACpC,eAAe;;;KALzB;;;;;;;;;;;;;;;;;;IAIC,kDAAwB,SAAS,"
"EAAY;QAApC,aAAa;;;QAAb,aAAa,WAAE,SAAS;;;IACjC,oDAAyC,UAAU,EAAA;QAAzB,aAAa;;;QAAb,aAAa,WAAE,UAAU;;;"
"IAEnD;;YACE,MAAM,QAAC,EAAC,KAAK,EAAE,CAAC,EAAC;;;YACf,IAAI,QAAC,iBAAiB,GAAG,IAAI,CAAC,aAAa;;QAA3C,IAAI;"
";YACJ,IAAI,QAAC,iBAAiB,GAAG,IAAI,CAAC,aAAa;;QAA3C,IAAI;;;;4CACJ,YAAY,OAAC;wBACX,aAAa,EAAE,IAAI,CAAC,aAAa"
";wBACjC,aAAa,EAAE,IAAI,CAAC,aAAa;qBAClC;;;;4BAFC,aAAa,EAAE,IAAI,CAAC,aAAa;4BACjC,aAAa,EAAE,IAAI,CAAC,aAAa"
";;;;;;;wBADjC,aAAa,EAAE,IAAI,CAAC,aAAa;wBACjC,aAAa,EAAE,IAAI,CAAC,aAAa;;;;;QALrC,MAAM;KAQP;;;;;MAII,YAAY;"
"IADnB;;uGAEoC,SAAS;uGACR,UAAU,CAAC,KAAK;;KALpD;;wGAImC,SAAS;wGACR,UAAU,CAAC,KAAK;;IADnD,CAAC,KAAK;IAxCR,"
"QAAA,CAwCS,aAAa,EAAE,SAAS,CAAY;IAC3C,CAAC,KAAK;IAzCR,QAAA,CAyCS,aAAa,EAAE,UAAU,CAAmB;IAEnD;;YACE,MAAM;;;"
"YACJ,IAAI,QAAC,iBAAiB,GAAG,IAAI,CAAC,aAAa;;QAA3C,IAAI;;YACJ,IAAI,QAAC,iBAAiB,GAAG,IAAI,CAAC,aAAa;;QAA3C,"
"IAAI;QAFN,MAAM;KAIP\",\n"
" \"entry-package-info\": \"entry|1.0.0\n"
" }\n"
"}";
auto modSourceMap = std::make_shared<SourceMap>();
modSourceMap->SplitSourceMap(sourceMaps);
std::string stackStr = "at ChildComponenttest48 (entry|entry|1.0.0|src/main/ets/pages/Index.ts:179:5)";
std::string stack = modSourceMap->TranslateBySourceMap(stackStr);
EXPECT_STREQ(stack.c_str(), "at ChildComponenttest48 entry (entry/src/main/ets/pages/Index.ets:45:5)\n");
GTEST_LOG_(INFO) << "JsEnv_SourceMap_1400 end";
}
/**
* @tc.number: JsEnv_SourceMap_1500
* @tc.name: GetPosInfo