MCPcopy Create free account
hub / github.com/CodingGay/BlackDex / CheckIntraDebugInfoItem

Method CheckIntraDebugInfoItem

Bcore/src/main/cpp/dex/dex_file_verifier.cc:1418–1522  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1416}
1417
1418bool DexFileVerifier::CheckIntraDebugInfoItem() {
1419 DECODE_UNSIGNED_CHECKED_FROM(ptr_, dummy);
1420 DECODE_UNSIGNED_CHECKED_FROM(ptr_, parameters_size);
1421 if (UNLIKELY(parameters_size > 65536)) {
1422 ErrorStringPrintf("Invalid parameters_size: %x", parameters_size);
1423 return false;
1424 }
1425
1426 for (uint32_t j = 0; j < parameters_size; j++) {
1427 DECODE_UNSIGNED_CHECKED_FROM(ptr_, parameter_name);
1428 if (parameter_name != 0) {
1429 parameter_name--;
1430 if (!CheckIndex(parameter_name, header_->string_ids_size_, "debug_info_item parameter_name")) {
1431 return false;
1432 }
1433 }
1434 }
1435
1436 while (true) {
1437 uint8_t opcode = *(ptr_++);
1438 switch (opcode) {
1439 case DexFile::DBG_END_SEQUENCE: {
1440 return true;
1441 }
1442 case DexFile::DBG_ADVANCE_PC: {
1443 DECODE_UNSIGNED_CHECKED_FROM(ptr_, advance_pc_dummy);
1444 break;
1445 }
1446 case DexFile::DBG_ADVANCE_LINE: {
1447 DECODE_SIGNED_CHECKED_FROM(ptr_, advance_line_dummy);
1448 break;
1449 }
1450 case DexFile::DBG_START_LOCAL: {
1451 DECODE_UNSIGNED_CHECKED_FROM(ptr_, reg_num);
1452 if (UNLIKELY(reg_num >= 65536)) {
1453 ErrorStringPrintf("Bad reg_num for opcode %x", opcode);
1454 return false;
1455 }
1456 DECODE_UNSIGNED_CHECKED_FROM(ptr_, name_idx);
1457 if (name_idx != 0) {
1458 name_idx--;
1459 if (!CheckIndex(name_idx, header_->string_ids_size_, "DBG_START_LOCAL name_idx")) {
1460 return false;
1461 }
1462 }
1463 DECODE_UNSIGNED_CHECKED_FROM(ptr_, type_idx);
1464 if (type_idx != 0) {
1465 type_idx--;
1466 if (!CheckIndex(type_idx, header_->type_ids_size_, "DBG_START_LOCAL type_idx")) {
1467 return false;
1468 }
1469 }
1470 break;
1471 }
1472 case DexFile::DBG_END_LOCAL:
1473 case DexFile::DBG_RESTART_LOCAL: {
1474 DECODE_UNSIGNED_CHECKED_FROM(ptr_, reg_num);
1475 if (UNLIKELY(reg_num >= 65536)) {

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected