@@ -2702,6 +2702,11 @@ ngx_stream_upsync_consul_parse_init(void *data)
27022702
27032703 parsed = http_parser_execute (parser , & settings , buf , ngx_strlen (buf ));
27042704 if (parsed != ngx_strlen (buf )) {
2705+
2706+ if (parser != NULL ) {
2707+ ngx_free (parser );
2708+ parser = NULL ;
2709+ }
27052710 ngx_log_error (NGX_LOG_ERR , ngx_cycle -> log , 0 ,
27062711 "upsync_consul_parse_init: parsed body size is wrong" );
27072712 return NGX_ERROR ;
@@ -2752,6 +2757,11 @@ ngx_stream_upsync_etcd_parse_init(void *data)
27522757
27532758 parsed = http_parser_execute (parser , & settings , buf , ngx_strlen (buf ));
27542759 if (parsed != ngx_strlen (buf )) {
2760+
2761+ if (parser != NULL ) {
2762+ ngx_free (parser );
2763+ parser = NULL ;
2764+ }
27552765 ngx_log_error (NGX_LOG_ERR , ngx_cycle -> log , 0 ,
27562766 "upsync_etcd_parse_init: parsed body size is wrong" );
27572767 return NGX_ERROR ;
@@ -3387,7 +3397,6 @@ ngx_stream_upsync_get_upstream(ngx_cycle_t *cycle,
33873397 char * response = NULL ;
33883398
33893399 ngx_stream_client_send (client , upsync_server );
3390-
33913400 if (ngx_stream_client_recv (client , & response , 0 ) <= 0 ) {
33923401 ngx_log_error (NGX_LOG_ERR , cycle -> log , 0 ,
33933402 "upsync_get_upstream: http client recv fail" );
@@ -3400,9 +3409,20 @@ ngx_stream_upsync_get_upstream(ngx_cycle_t *cycle,
34003409
34013410 return NGX_ERROR ;
34023411 }
3403-
34043412 ngx_stream_client_destroy (client );
34053413
3414+ if (ngx_stream_http_parser_init () == NGX_ERROR ) {
3415+ return NGX_ERROR ;
3416+ }
3417+ http_parser_execute (parser , & settings , response , ngx_strlen (response ));
3418+ if (parser != NULL ) {
3419+ ngx_free (parser );
3420+ parser = NULL ;
3421+ }
3422+ if (ngx_strncmp (state .status , "OK" , 2 ) != 0 ) {
3423+ return NGX_ERROR ;
3424+ }
3425+
34063426 * conf_value = response ;
34073427
34083428 return NGX_OK ;
0 commit comments