@@ -1156,11 +1156,11 @@ int net_http_fd(struct http_t *state)
11561156 return state -> conn -> fd ;
11571157}
11581158
1159- static ssize_t net_http_receive_header (struct http_t * state , ssize_t newlen )
1159+ static ssize_t net_http_receive_header (struct http_t * state , ssize_t len )
11601160{
11611161 struct response * response = (struct response * )& state -> response ;
11621162
1163- response -> pos += newlen ;
1163+ response -> pos += len ;
11641164
11651165 while (response -> part < P_BODY )
11661166 {
@@ -1228,7 +1228,7 @@ static ssize_t net_http_receive_header(struct http_t *state, ssize_t newlen)
12281228
12291229 if (response -> part >= P_BODY )
12301230 {
1231- newlen = response -> pos ;
1231+ len = response -> pos ;
12321232 response -> pos = 0 ;
12331233 if (response -> bodytype == T_LEN )
12341234 {
@@ -1244,7 +1244,7 @@ static ssize_t net_http_receive_header(struct http_t *state, ssize_t newlen)
12441244 response -> data = (char * )realloc (response -> data , response -> buflen );
12451245 }
12461246 }
1247- return newlen ;
1247+ return len ;
12481248}
12491249
12501250static bool net_http_receive_body (struct http_t * state , ssize_t newlen )
@@ -1412,12 +1412,9 @@ static bool net_http_redirect(struct http_t *state, const char *location)
14121412bool net_http_update (struct http_t * state , size_t * progress , size_t * total )
14131413{
14141414 struct response * response ;
1415- ssize_t newlen = 0 ;
1415+ ssize_t _len = 0 ;
14161416
1417- if (!state )
1418- return true;
1419-
1420- if (state -> err )
1417+ if (!state || state -> err )
14211418 return true;
14221419
14231420 if (!state -> conn )
@@ -1445,26 +1442,38 @@ bool net_http_update(struct http_t *state, size_t* progress, size_t* total)
14451442
14461443#ifdef HAVE_SSL
14471444 if (state -> ssl && state -> conn -> ssl_ctx )
1448- newlen = ssl_socket_receive_all_nonblocking (state -> conn -> ssl_ctx , & state -> err ,
1445+ _len = ssl_socket_receive_all_nonblocking (state -> conn -> ssl_ctx , & state -> err ,
14491446 (uint8_t * )response -> data + response -> pos ,
14501447 response -> buflen - response -> pos );
14511448 else
14521449#endif
1453- newlen = socket_receive_all_nonblocking (state -> conn -> fd , & state -> err ,
1450+ _len = socket_receive_all_nonblocking (state -> conn -> fd , & state -> err ,
14541451 (uint8_t * )response -> data + response -> pos ,
14551452 response -> buflen - response -> pos );
14561453
14571454 if (response -> part < P_BODY )
14581455 {
1459- if (newlen < 0 || state -> err )
1460- goto error ;
1461- newlen = net_http_receive_header (state , newlen );
1456+ if (_len < 0 || state -> err )
1457+ {
1458+ net_http_conn_pool_remove (state -> conn );
1459+ state -> err = true;
1460+ response -> part = P_DONE ;
1461+ response -> status = -1 ;
1462+ return true;
1463+ }
1464+ _len = net_http_receive_header (state , _len );
14621465 }
14631466
14641467 if (response -> part >= P_BODY && response -> part < P_DONE )
14651468 {
1466- if (!net_http_receive_body (state , newlen ))
1467- goto error ;
1469+ if (!net_http_receive_body (state , _len ))
1470+ {
1471+ net_http_conn_pool_remove (state -> conn );
1472+ state -> err = true;
1473+ response -> part = P_DONE ;
1474+ response -> status = -1 ;
1475+ return true;
1476+ }
14681477 }
14691478
14701479 if (progress )
@@ -1481,9 +1490,9 @@ bool net_http_update(struct http_t *state, size_t* progress, size_t* total)
14811490 if (response -> part != P_DONE )
14821491 return false;
14831492
1484- for (newlen = 0 ; (size_t )newlen < response -> headers -> size ; newlen ++ )
1493+ for (_len = 0 ; (size_t )_len < response -> headers -> size ; _len ++ )
14851494 {
1486- if (string_is_equal_case_insensitive (response -> headers -> elems [newlen ].data , "connection: close" ))
1495+ if (string_is_equal_case_insensitive (response -> headers -> elems [_len ].data , "connection: close" ))
14871496 {
14881497 net_http_conn_pool_remove (state -> conn );
14891498 state -> conn = NULL ;
@@ -1497,23 +1506,14 @@ bool net_http_update(struct http_t *state, size_t* progress, size_t* total)
14971506
14981507 if (response -> status >= 300 && response -> status < 400 )
14991508 {
1500- for (newlen = 0 ; (size_t )newlen < response -> headers -> size ; newlen ++ )
1509+ for (_len = 0 ; (size_t )_len < response -> headers -> size ; _len ++ )
15011510 {
1502- if (string_starts_with_case_insensitive (response -> headers -> elems [newlen ].data , "Location: " ))
1503- {
1504- return net_http_redirect (state , response -> headers -> elems [newlen ].data + STRLEN_CONST ("Location: " ));
1505- }
1511+ if (string_starts_with_case_insensitive (response -> headers -> elems [_len ].data , "Location: " ))
1512+ return net_http_redirect (state , response -> headers -> elems [_len ].data + STRLEN_CONST ("Location: " ));
15061513 }
15071514 }
15081515
15091516 return true;
1510-
1511- error :
1512- net_http_conn_pool_remove (state -> conn );
1513- state -> err = true;
1514- response -> part = P_DONE ;
1515- response -> status = -1 ;
1516- return true;
15171517}
15181518
15191519/**
@@ -1543,12 +1543,8 @@ int net_http_status(struct http_t *state)
15431543 **/
15441544struct string_list * net_http_headers (struct http_t * state )
15451545{
1546- if (!state )
1546+ if (!state || ! state -> err )
15471547 return NULL ;
1548-
1549- if (state -> err )
1550- return NULL ;
1551-
15521548 return state -> response .headers ;
15531549}
15541550
0 commit comments