static void ff_amf_tag_contents(void *ctx, const uint8_t *data, const uint8_t *data_end)

{

    int size;

    char buf[1024];



    if (data >= data_end)

        return;

    switch (*data++) {

    case AMF_DATA_TYPE_NUMBER:

        av_log(ctx, AV_LOG_DEBUG, " number %g\n", av_int2double(AV_RB64(data)));

        return;

    case AMF_DATA_TYPE_BOOL:

        av_log(ctx, AV_LOG_DEBUG, " bool %d\n", *data);

        return;

    case AMF_DATA_TYPE_STRING:

    case AMF_DATA_TYPE_LONG_STRING:

        if (data[-1] == AMF_DATA_TYPE_STRING) {

            size = bytestream_get_be16(&data);

        } else {

            size = bytestream_get_be32(&data);

        }

        size = FFMIN(size, 1023);

        memcpy(buf, data, size);

        buf[size] = 0;

        av_log(ctx, AV_LOG_DEBUG, " string '%s'\n", buf);

        return;

    case AMF_DATA_TYPE_NULL:

        av_log(ctx, AV_LOG_DEBUG, " NULL\n");

        return;

    case AMF_DATA_TYPE_ARRAY:

        data += 4;

    case AMF_DATA_TYPE_OBJECT:

        av_log(ctx, AV_LOG_DEBUG, " {\n");

        for (;;) {

            int size = bytestream_get_be16(&data);

            int t;

            memcpy(buf, data, size);

            buf[size] = 0;

            if (!size) {

                av_log(ctx, AV_LOG_DEBUG, " }\n");

                data++;

                break;

            }

            if (size < 0 || size >= data_end - data)

                return;

            data += size;

            av_log(ctx, AV_LOG_DEBUG, "  %s: ", buf);

            ff_amf_tag_contents(ctx, data, data_end);

            t = ff_amf_tag_size(data, data_end);

            if (t < 0 || t >= data_end - data)

                return;

            data += t;

        }

        return;

    case AMF_DATA_TYPE_OBJECT_END:

        av_log(ctx, AV_LOG_DEBUG, " }\n");

        return;

    default:

        return;

    }

}

static void ff_amf_tag_contents(void *ctx, const uint8_t *data, const uint8_t *data_end)

{

    int size;

    char buf[1024];



    if (data >= data_end)

        return;

    switch (*data++) {

    case AMF_DATA_TYPE_NUMBER:

        av_log(ctx, AV_LOG_DEBUG, " number %g\n", av_int2double(AV_RB64(data)));

        return;

    case AMF_DATA_TYPE_BOOL:

        av_log(ctx, AV_LOG_DEBUG, " bool %d\n", *data);

        return;

    case AMF_DATA_TYPE_STRING:

    case AMF_DATA_TYPE_LONG_STRING:

        if (data[-1] == AMF_DATA_TYPE_STRING) {

            size = bytestream_get_be16(&data);

        } else {

            size = bytestream_get_be32(&data);

        }

        size = FFMIN(size, 1023);

        memcpy(buf, data, size);

        buf[size] = 0;

        av_log(ctx, AV_LOG_DEBUG, " string '%s'\n", buf);

        return;

    case AMF_DATA_TYPE_NULL:

        av_log(ctx, AV_LOG_DEBUG, " NULL\n");

        return;

    case AMF_DATA_TYPE_ARRAY:

        data += 4;

    case AMF_DATA_TYPE_OBJECT:

        av_log(ctx, AV_LOG_DEBUG, " {\n");

        for (;;) {

            int size = bytestream_get_be16(&data);

            int t;

            memcpy(buf, data, size);

            buf[size] = 0;

            if (!size) {

                av_log(ctx, AV_LOG_DEBUG, " }\n");

                data++;

                break;

            }

            if (size < 0 || size >= data_end - data)

                return;

            data += size;

            av_log(ctx, AV_LOG_DEBUG, "  %s: ", buf);

            ff_amf_tag_contents(ctx, data, data_end);

            t = ff_amf_tag_size(data, data_end);

            if (t < 0 || t >= data_end - data)

                return;

            data += t;

        }

        return;

    case AMF_DATA_TYPE_OBJECT_END:

        av_log(ctx, AV_LOG_DEBUG, " }\n");

        return;

    default:

        return;

    }

}

    int size;         size = FFMIN(size, 1023);             int size = bytestream_get_be16(&data);             memcpy(buf, data, size);             buf[size] = 0;             if (size < 0 || size >= data_end - data)
static void FUNC_0(void *VAR_0, const uint8_t *VAR_1, const uint8_t *VAR_2)

{

    int VAR_5;

    char VAR_4[1024];



    if (VAR_1 >= VAR_2)

        return;

    switch (*VAR_1++) {

    case AMF_DATA_TYPE_NUMBER:

        av_log(VAR_0, AV_LOG_DEBUG, " number %g\n", av_int2double(AV_RB64(VAR_1)));

        return;

    case AMF_DATA_TYPE_BOOL:

        av_log(VAR_0, AV_LOG_DEBUG, " bool %d\n", *VAR_1);

        return;

    case AMF_DATA_TYPE_STRING:

    case AMF_DATA_TYPE_LONG_STRING:

        if (VAR_1[-1] == AMF_DATA_TYPE_STRING) {

            VAR_5 = bytestream_get_be16(&VAR_1);

        } else {

            VAR_5 = bytestream_get_be32(&VAR_1);

        }

        VAR_5 = FFMIN(VAR_5, 1023);

        memcpy(VAR_4, VAR_1, VAR_5);

        VAR_4[VAR_5] = 0;

        av_log(VAR_0, AV_LOG_DEBUG, " string '%s'\n", VAR_4);

        return;

    case AMF_DATA_TYPE_NULL:

        av_log(VAR_0, AV_LOG_DEBUG, " NULL\n");

        return;

    case AMF_DATA_TYPE_ARRAY:

        VAR_1 += 4;

    case AMF_DATA_TYPE_OBJECT:

        av_log(VAR_0, AV_LOG_DEBUG, " {\n");

        for (;;) {

            int VAR_5 = bytestream_get_be16(&VAR_1);

            int VAR_5;

            memcpy(VAR_4, VAR_1, VAR_5);

            VAR_4[VAR_5] = 0;

            if (!VAR_5) {

                av_log(VAR_0, AV_LOG_DEBUG, " }\n");

                VAR_1++;

                break;

            }

            if (VAR_5 < 0 || VAR_5 >= VAR_2 - VAR_1)

                return;

            VAR_1 += VAR_5;

            av_log(VAR_0, AV_LOG_DEBUG, "  %s: ", VAR_4);

            FUNC_0(VAR_0, VAR_1, VAR_2);

            VAR_5 = ff_amf_tag_size(VAR_1, VAR_2);

            if (VAR_5 < 0 || VAR_5 >= VAR_2 - VAR_1)

                return;

            VAR_1 += VAR_5;

        }

        return;

    case AMF_DATA_TYPE_OBJECT_END:

        av_log(VAR_0, AV_LOG_DEBUG, " }\n");

        return;

    default:

        return;

    }

}

static void FUNC_0(void *VAR_0, const uint8_t *VAR_1, const uint8_t *VAR_2)
{ int VAR_5; char VAR_4[1024]; if (VAR_1 >= VAR_2)
return; switch (*VAR_1++) { case AMF_DATA_TYPE_NUMBER:
av_log(VAR_0, AV_LOG_DEBUG, " number %g\n", av_int2double(AV_RB64(VAR_1))); return; case AMF_DATA_TYPE_BOOL:
av_log(VAR_0, AV_LOG_DEBUG, " bool %d\n", *VAR_1); return; case AMF_DATA_TYPE_STRING:
case AMF_DATA_TYPE_LONG_STRING:
if (VAR_1[-1] == AMF_DATA_TYPE_STRING) { VAR_5 = bytestream_get_be16(&VAR_1); } else { VAR_5 = bytestream_get_be32(&VAR_1); } VAR_5 = FFMIN(VAR_5, 1023); memcpy(VAR_4, VAR_1, VAR_5); VAR_4[VAR_5] = 0; av_log(VAR_0, AV_LOG_DEBUG, " string '%s'\n", VAR_4); return; case AMF_DATA_TYPE_NULL:
av_log(VAR_0, AV_LOG_DEBUG, " NULL\n"); return; case AMF_DATA_TYPE_ARRAY:
VAR_1 += 4; case AMF_DATA_TYPE_OBJECT:
av_log(VAR_0, AV_LOG_DEBUG, " {\n"); for (;;) { int VAR_5 = bytestream_get_be16(&VAR_1); int VAR_5; memcpy(VAR_4, VAR_1, VAR_5); VAR_4[VAR_5] = 0; if (!VAR_5) { av_log(VAR_0, AV_LOG_DEBUG, " }\n"); VAR_1++; break; } if (VAR_5 < 0 || VAR_5 >= VAR_2 - VAR_1)
return; VAR_1 += VAR_5; av_log(VAR_0, AV_LOG_DEBUG, "  %s: ", VAR_4); FUNC_0(VAR_0, VAR_1, VAR_2); VAR_5 = ff_amf_tag_size(VAR_1, VAR_2); if (VAR_5 < 0 || VAR_5 >= VAR_2 - VAR_1)
return; VAR_1 += VAR_5; } return; case AMF_DATA_TYPE_OBJECT_END:
av_log(VAR_0, AV_LOG_DEBUG, " }\n"); return; default:
return; } }