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

Commit cbbea8e6 authored by Marco Nelissen's avatar Marco Nelissen
Browse files

Don't create weird ByteBuffers

Ensure that we don't create ByteBuffers with a NULL memory pointer
but nonzero size.
b/7892060

Change-Id: I2fc52e19fd05e698c38d94275e738e23a2999e1f
parent 412fbe7f
Loading
Loading
Loading
Loading
+17 −2
Original line number Diff line number Diff line
@@ -237,15 +237,27 @@ status_t JMediaCodec::getBuffers(

    *bufArray = (jobjectArray)env->NewObjectArray(
            buffers.size(), byteBufferClass, NULL);
    if (*bufArray == NULL) {
        env->DeleteLocalRef(nativeByteOrderObj);
        return NO_MEMORY;
    }

    for (size_t i = 0; i < buffers.size(); ++i) {
        const sp<ABuffer> &buffer = buffers.itemAt(i);

        // if this is an ABuffer that doesn't actually hold any accessible memory,
        // use a null ByteBuffer
        if (buffer->base() == NULL) {
            continue;
        }
        jobject byteBuffer =
            env->NewDirectByteBuffer(
                buffer->base(),
                buffer->capacity());

        if (byteBuffer == NULL) {
            env->DeleteLocalRef(nativeByteOrderObj);
            return NO_MEMORY;
        }
        jobject me = env->CallObjectMethod(
                byteBuffer, orderID, nativeByteOrderObj);
        env->DeleteLocalRef(me);
@@ -715,7 +727,10 @@ static jobjectArray android_media_MediaCodec_getBuffers(
        return buffers;
    }

    // if we're out of memory, an exception was already thrown
    if (err != NO_MEMORY) {
        throwExceptionAsNecessary(env, err);
    }

    return NULL;
}