int ff_lzf_uncompress(GetByteContext *gb, uint8_t **buf, int64_t *size)

{

    int ret     = 0;

    uint8_t *p  = *buf;

    int64_t len = 0;



    while (bytestream2_get_bytes_left(gb) > 2) {

        uint8_t s = bytestream2_get_byte(gb);



        if (s < LZF_LITERAL_MAX) {

            s++;

            if (s > *size - len) {

                *size += *size /2;

                ret = av_reallocp(buf, *size);

                if (ret < 0)

                    return ret;


            }



            bytestream2_get_buffer(gb, p, s);

            p   += s;

            len += s;

        } else {

            int l   = 2 + (s >> 5);

            int off = ((s & 0x1f) << 8) + 1;



            if (l == LZF_LONG_BACKREF)

                l += bytestream2_get_byte(gb);



            off += bytestream2_get_byte(gb);



            if (off > len)

                return AVERROR_INVALIDDATA;



            if (l > *size - len) {

                *size += *size / 2;

                ret = av_reallocp(buf, *size);

                if (ret < 0)

                    return ret;


            }



            av_memcpy_backptr(p, off, l);



            p   += l;

            len += l;

        }

    }



    *size = len;



    return 0;

}
int ff_lzf_uncompress(GetByteContext *gb, uint8_t **buf, int64_t *size)

{

    int ret     = 0;

    uint8_t *p  = *buf;

    int64_t len = 0;



    while (bytestream2_get_bytes_left(gb) > 2) {

        uint8_t s = bytestream2_get_byte(gb);



        if (s < LZF_LITERAL_MAX) {

            s++;

            if (s > *size - len) {

                *size += *size /2;

                ret = av_reallocp(buf, *size);

                if (ret < 0)

                    return ret;


            }



            bytestream2_get_buffer(gb, p, s);

            p   += s;

            len += s;

        } else {

            int l   = 2 + (s >> 5);

            int off = ((s & 0x1f) << 8) + 1;



            if (l == LZF_LONG_BACKREF)

                l += bytestream2_get_byte(gb);



            off += bytestream2_get_byte(gb);



            if (off > len)

                return AVERROR_INVALIDDATA;



            if (l > *size - len) {

                *size += *size / 2;

                ret = av_reallocp(buf, *size);

                if (ret < 0)

                    return ret;


            }



            av_memcpy_backptr(p, off, l);



            p   += l;

            len += l;

        }

    }



    *size = len;



    return 0;

}
int FUNC_0(GetByteContext *VAR_0, uint8_t **VAR_1, int64_t *VAR_2)

{

    int VAR_3     = 0;

    uint8_t *p  = *VAR_1;

    int64_t len = 0;



    while (bytestream2_get_bytes_left(VAR_0) > 2) {

        uint8_t s = bytestream2_get_byte(VAR_0);



        if (s < LZF_LITERAL_MAX) {

            s++;

            if (s > *VAR_2 - len) {

                *VAR_2 += *VAR_2 /2;

                VAR_3 = av_reallocp(VAR_1, *VAR_2);

                if (VAR_3 < 0)

                    return VAR_3;


            }



            bytestream2_get_buffer(VAR_0, p, s);

            p   += s;

            len += s;

        } else {

            int VAR_4   = 2 + (s >> 5);

            int VAR_5 = ((s & 0x1f) << 8) + 1;



            if (VAR_4 == LZF_LONG_BACKREF)

                VAR_4 += bytestream2_get_byte(VAR_0);



            VAR_5 += bytestream2_get_byte(VAR_0);



            if (VAR_5 > len)

                return AVERROR_INVALIDDATA;



            if (VAR_4 > *VAR_2 - len) {

                *VAR_2 += *VAR_2 / 2;

                VAR_3 = av_reallocp(VAR_1, *VAR_2);

                if (VAR_3 < 0)

                    return VAR_3;


            }



            av_memcpy_backptr(p, VAR_5, VAR_4);



            p   += VAR_4;

            len += VAR_4;

        }

    }



    *VAR_2 = len;



    return 0;

}
int FUNC_0(GetByteContext *VAR_0, uint8_t **VAR_1, int64_t *VAR_2)
{ int VAR_3     = 0; uint8_t *p  = *VAR_1; int64_t len = 0; while (bytestream2_get_bytes_left(VAR_0) > 2) { uint8_t s = bytestream2_get_byte(VAR_0); if (s < LZF_LITERAL_MAX) { s++; if (s > *VAR_2 - len) { *VAR_2 += *VAR_2 /2; VAR_3 = av_reallocp(VAR_1, *VAR_2); if (VAR_3 < 0)
return VAR_3; } bytestream2_get_buffer(VAR_0, p, s); p   += s; len += s; } else { int VAR_4   = 2 + (s >> 5); int VAR_5 = ((s & 0x1f) << 8) + 1; if (VAR_4 == LZF_LONG_BACKREF)
VAR_4 += bytestream2_get_byte(VAR_0); VAR_5 += bytestream2_get_byte(VAR_0); if (VAR_5 > len)
return AVERROR_INVALIDDATA; if (VAR_4 > *VAR_2 - len) { *VAR_2 += *VAR_2 / 2; VAR_3 = av_reallocp(VAR_1, *VAR_2); if (VAR_3 < 0)
return VAR_3; } av_memcpy_backptr(p, VAR_5, VAR_4); p   += VAR_4; len += VAR_4; } } *VAR_2 = len; return 0; }