8000 prevent out-of-bounds array access · CoericK/arangodb@80ec8c2 · GitHub
  • [go: up one dir, main page]

    Skip to content

    Commit 80ec8c2

    Browse files
    committed
    prevent out-of-bounds array access
    1 parent 02b6c6e commit 80ec8c2

    File tree

    1 file changed

    +43
    -33
    lines changed

    1 file changed

    +43
    -33
    lines changed

    arangod/RestHandler/RestAdminLogHandler.cpp

    Lines changed: 43 additions & 33 deletions
    Original file line numberDiff line numberDiff line change
    @@ -184,50 +184,56 @@ void RestAdminLogHandler::reportLogs() {
    184184
    result.add("lid", VPackValue(VPackValueType::Array));
    185185

    186186
    for (size_t i = 0; i < length; ++i) {
    187-
    auto& buf = clean.at(i + static_cast<size_t>(offset));
    188-
    result.add(VPackValue(buf._id));
    187+
    try {
    188+
    auto& buf = clean.at(i + static_cast<size_t>(offset));
    189+
    result.add(VPackValue(buf._id));
    190+
    } catch (...) {}
    189191
    }
    190192

    191193
    result.close();
    192194

    193195
    result.add("topic", VPackValue(VPackValueType::Array));
    194196

    195197
    for (size_t i = 0; i < length; ++i) {
    196-
    auto& buf = clean.at(i + static_cast<size_t>(offset));
    197-
    result.add(VPackValue(LogTopic::lookup(buf._topicId)));
    198+
    try {
    199+
    auto& buf = clean.at(i + static_cast<size_t>(offset));
    200+
    result.add(VPackValue(LogTopic::lookup(buf._topicId)));
    201+
    } catch (...) {}
    198202
    }
    199203
    result.close();
    200204

    201205
    // second level
    202206
    result.add("level", VPackValue(VPackValueType::Array));
    203207

    204208
    for (size_t i = 0; i < length; ++i) {
    205-
    auto& buf = clean.at(i + static_cast<size_t>(offset));
    206-
    uint32_t l = 0;
    207-
    208-
    switch (buf._level) {
    209-
    case LogLevel::FATAL:
    210-
    l = 0;
    211-
    break;
    212-
    case LogLevel::ERR:
    213-
    l = 1;
    214-
    break;
    215-
    case LogLevel::WARN:
    216-
    l = 2;
    217-
    break;
    218-
    case LogLevel::DEFAULT:
    219-
    case LogLevel::INFO:
    220-
    l = 3;
    221-
    break;
    222-
    case LogLevel::DEBUG:
    223-
    l = 4;
    224-
    break;
    225-
    case LogLevel::TRACE:
    226-
    l = 5;
    227-
    break;
    228-
    }
    209+
    try {
    210+
    auto& buf = clean.at(i + static_cast<size_t>(offset));
    211+
    uint32_t l = 0;
    212+
    213+
    switch (buf._level) {
    214+
    case LogLevel::FATAL:
    215+
    l = 0;
    216+
    break;
    217+
    case LogLevel::ERR:
    218+
    l = 1;
    219+
    break;
    220+
    case LogLevel::WARN:
    221+
    l = 2;
    222+
    break;
    223+
    case LogLevel::DEFAULT:
    224+
    case LogLevel::INFO:
    225+
    l = 3;
    226+
    break;
    227+
    case LogLevel::DEBUG:
    228+
    l = 4;
    229+
    break;
    230+
    case LogLevel::TRACE:
    231+
    l = 5;
    232+
    break;
    233+
    }
    229234

    230-
    result.add(VPackValue(l));
    235+
    result.add(VPackValue(l));
    236+
    } catch (...) {}
    231237
    }
    232238

    233239
    result.close();
    @@ -236,8 +242,10 @@ void RestAdminLogHandler::reportLogs() {
    236242
    result.add("timestamp", VPackValue(VPackValueType::Array));
    237243

    238244
    for (size_t i = 0; i < length; ++i) {
    239-
    auto& buf = clean.at(i + static_cast<size_t>(offset));
    240-
    result.add(VPackValue(static_cast<size_t>(buf._timestamp)));
    245+
    try {
    246+
    auto& buf = clean.at(i + static_cast<size_t>(offset));
    247+
    result.add(VPackValue(static_cast<size_t>(buf._timestamp)));
    248+
    } catch (...) {}
    241249
    }
    242250

    243251
    result.close();
    @@ -246,8 +254,10 @@ void RestAdminLogHandler::reportLogs() {
    246254
    result.add("text", VPackValue(VPackValueType::Array));
    247255

    248256
    for (size_t i = 0; i < length; ++i) {
    249-
    auto& buf = clean.at(i + static_cast<size_t>(offset));
    250-
    result.add(VPackValue(buf._message));
    257+
    try {
    258+
    auto& buf = clean.at(i + static_cast<size_t>(offset));
    259+
    result.add(VPackValue(buf._message));
    260+
    } catch (...) {}
    251261
    }
    252262

    253263
    result.close();

    0 commit comments

    Comments
     (0)
    0