@@ -1525,108 +1525,44 @@ int fw_prot_process(struct flb_input_instance *ins, struct fw_conn *conn)
15251525 }
15261526
15271527 if (ret == FLB_TRUE ) {
1528- size_t prev_pos = 0 ;
1529- size_t gzip_payloads_count = 0 ;
1530- size_t loop = 0 ;
1531- size_t * gzip_borders = NULL ;
1532- const size_t original_len = len ;
1533-
1534- gzip_payloads_count = flb_gzip_count (data , len , NULL , 0 );
1535- flb_plg_debug (ctx -> ins , "concatenated gzip payload count is %zd" ,
1536- gzip_payloads_count );
1537- if (gzip_payloads_count > 0 ) {
1538- gzip_borders = (size_t * )flb_calloc (1 , sizeof (size_t ) * (gzip_payloads_count + 1 ));
1539- if (gzip_borders == NULL ) {
1540- flb_errno ();
1541- return -1 ;
1542- }
1543- if (flb_gzip_count (data , len , & gzip_borders , gzip_payloads_count ) < 0 ) {
1544- flb_plg_error (ctx -> ins ,
1545- "failed to traverse boundaries of concatenated gzip payloads" );
1546- return -1 ;
1547- }
1548- }
1528+ size_t remaining = len ;
15491529
1550- retry_uncompress :
1551- if ( gzip_payloads_count > 0 ) {
1552- if ( loop == 0 ) {
1553- len = gzip_borders [ loop ];
1554- }
1555- else if ( gzip_borders [ loop ] == original_len ) {
1556- len = original_len - gzip_borders [ loop - 1 ] ;
1557- }
1558- else if ( loop >= 1 ) {
1559- len = gzip_borders [ loop ] - gzip_borders [ loop - 1 ] ;
1530+ while ( remaining > 0 ) {
1531+ ret = flb_gzip_uncompress_multi (( void * ) ( data + ( len - remaining )), remaining ,
1532+ & gz_data , & gz_size , & remaining );
1533+
1534+ if ( ret == -1 ) {
1535+ flb_plg_error ( ctx -> ins , "gzip uncompress failure" );
1536+ msgpack_unpacked_destroy ( & result ) ;
1537+ msgpack_unpacker_free ( unp );
1538+ flb_sds_destroy ( out_tag );
1539+ return -1 ;
15601540 }
1561- }
1562- flb_plg_trace (ctx -> ins ,
1563- "[gzip decompression] loop = %zd, len = %zd, original_len = %zd" ,
1564- loop , len , original_len );
15651541
1566- ret = flb_gzip_uncompress ((void * ) (data + prev_pos ), len ,
1567- & gz_data , & gz_size );
1568- if (ret == -1 ) {
1569- flb_plg_error (ctx -> ins , "gzip uncompress failure" );
1570- msgpack_unpacked_destroy (& result );
1571- msgpack_unpacker_free (unp );
1572- flb_sds_destroy (out_tag );
1573- if (gzip_borders != NULL ) {
1574- flb_free (gzip_borders );
1542+ event_type = FLB_EVENT_TYPE_LOGS ;
1543+ if (contain_options ) {
1544+ ret = get_chunk_event_type (ins , root .via .array .ptr [2 ]);
1545+ if (ret == -1 ) {
1546+ msgpack_unpacked_destroy (& result );
1547+ msgpack_unpacker_free (unp );
1548+ flb_sds_destroy (out_tag );
1549+ flb_free (gz_data );
1550+ return -1 ;
1551+ }
1552+ event_type = ret ;
15751553 }
1576- return -1 ;
1577- }
15781554
1579- event_type = FLB_EVENT_TYPE_LOGS ;
1580- if ( contain_options ) {
1581- ret = get_chunk_event_type ( ins , root . via . array . ptr [ 2 ] );
1555+ ret = append_log ( ins , conn ,
1556+ event_type ,
1557+ out_tag , gz_data , gz_size );
15821558 if (ret == -1 ) {
15831559 msgpack_unpacked_destroy (& result );
15841560 msgpack_unpacker_free (unp );
15851561 flb_sds_destroy (out_tag );
15861562 flb_free (gz_data );
1587- if (gzip_borders != NULL ) {
1588- flb_free (gzip_borders );
1589- }
15901563 return -1 ;
15911564 }
1592- event_type = ret ;
1593- }
1594-
1595- ret = append_log (ins , conn ,
1596- event_type ,
1597- out_tag , gz_data , gz_size );
1598- if (ret == -1 ) {
1599- msgpack_unpacked_destroy (& result );
1600- msgpack_unpacker_free (unp );
1601- flb_sds_destroy (out_tag );
16021565 flb_free (gz_data );
1603- if (gzip_borders != NULL ) {
1604- flb_free (gzip_borders );
1605- }
1606-
1607- return -1 ;
1608- }
1609- flb_free (gz_data );
1610-
1611- /* a valid payload of gzip is larger than 18 bytes. */
1612- if (gzip_payloads_count > 0 ) {
1613- if ((gzip_payloads_count - loop ) > 0 &&
1614- (original_len - gzip_borders [loop ]) >= 18 ) {
1615- len = original_len - gzip_borders [loop ];
1616- flb_plg_debug (ctx -> ins , "left unconsumed %zd byte(s)" , len );
1617- prev_pos = gzip_borders [loop ];
1618- loop ++ ;
1619- goto retry_uncompress ;
1620- }
1621- else {
1622- flb_plg_debug (ctx -> ins , "left unconsumed %zd byte(s)" ,
1623- original_len - gzip_borders [loop ]);
1624- }
1625- if (loop == gzip_payloads_count ) {
1626- if (gzip_borders != NULL ) {
1627- flb_free (gzip_borders );
1628- }
1629- }
16301566 }
16311567 }
16321568 else {
0 commit comments