@@ -2702,6 +2702,11 @@ ngx_stream_upsync_consul_parse_init(void *data)
2702
2702
2703
2703
parsed = http_parser_execute (parser , & settings , buf , ngx_strlen (buf ));
2704
2704
if (parsed != ngx_strlen (buf )) {
2705
+
2706
+ if (parser != NULL ) {
2707
+ ngx_free (parser );
2708
+ parser = NULL ;
2709
+ }
2705
2710
ngx_log_error (NGX_LOG_ERR , ngx_cycle -> log , 0 ,
2706
2711
"upsync_consul_parse_init: parsed body size is wrong" );
2707
2712
return NGX_ERROR ;
@@ -2752,6 +2757,11 @@ ngx_stream_upsync_etcd_parse_init(void *data)
2752
2757
2753
2758
parsed = http_parser_execute (parser , & settings , buf , ngx_strlen (buf ));
2754
2759
if (parsed != ngx_strlen (buf )) {
2760
+
2761
+ if (parser != NULL ) {
2762
+ ngx_free (parser );
2763
+ parser = NULL ;
2764
+ }
2755
2765
ngx_log_error (NGX_LOG_ERR , ngx_cycle -> log , 0 ,
2756
2766
"upsync_etcd_parse_init: parsed body size is wrong" );
2757
2767
return NGX_ERROR ;
@@ -3387,7 +3397,6 @@ ngx_stream_upsync_get_upstream(ngx_cycle_t *cycle,
3387
3397
char * response = NULL ;
3388
3398
3389
3399
ngx_stream_client_send (client , upsync_server );
3390
-
3391
3400
if (ngx_stream_client_recv (client , & response , 0 ) <= 0 ) {
3392
3401
ngx_log_error (NGX_LOG_ERR , cycle -> log , 0 ,
3393
3402
"upsync_get_upstream: http client recv fail" );
@@ -3400,9 +3409,20 @@ ngx_stream_upsync_get_upstream(ngx_cycle_t *cycle,
3400
3409
3401
3410
return NGX_ERROR ;
3402
3411
}
3403
-
3404
3412
ngx_stream_client_destroy (client );
3405
3413
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
+
3406
3426
* conf_value = response ;
3407
3427
3408
3428
return NGX_OK ;
0 commit comments