Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1b3b20e3 authored by Ray Essick's avatar Ray Essick Committed by Android Build Coastguard Worker
Browse files

Better buffer-overrun prevention

fixes end-of-buffer detection. Adds buffer-was-empty detection.

Bug: 204445255
Test: ran poc from bug
Change-Id: I42117ce1455d1cac2bd43f16d67d77ec436b0fe2
(cherry picked from commit b51ed962)
(cherry picked from commit 190e9095)
Merged-In:I42117ce1455d1cac2bd43f16d67d77ec436b0fe2
parent db447c6b
Loading
Loading
Loading
Loading
+4 −5
Original line number Diff line number Diff line
@@ -469,16 +469,15 @@ protected:
    template <> // static
    status_t extract(std::string *val, const char **bufferpptr, const char *bufferptrmax) {
        const char *ptr = *bufferpptr;
        while (*ptr != 0) {
        do {
            if (ptr >= bufferptrmax) {
                ALOGE("%s: buffer exceeded", __func__);
                return BAD_VALUE;
            }
            ++ptr;
        }
        const size_t size = (ptr - *bufferpptr) + 1;
        } while (*ptr++ != 0);
        // ptr is terminator+1, == bufferptrmax if we finished entire buffer
        *val = *bufferpptr;
        *bufferpptr += size;
        *bufferpptr = ptr;
        return NO_ERROR;
    }
    template <> // static