@@ -328,15 +328,16 @@ void net_http_urlencode_full(char *s, const char *source, size_t len)
328328 size_t tmp_len ;
329329 char url_domain [256 ];
330330 char url_path [PATH_MAX_LENGTH ];
331- char * tmp = NULL ;
332- int count = 0 ;
331+ int count = 0 ;
332+ char * tmp = url_path ;
333333
334334 strlcpy (url_path , source , sizeof (url_path ));
335- tmp = url_path ;
336335
337336 while (count < 3 && tmp [0 ] != '\0' )
338337 {
339338 tmp = strchr (tmp , '/' );
339+ if (!tmp )
340+ break ;
340341 count ++ ;
341342 tmp ++ ;
342343 }
@@ -1155,11 +1156,11 @@ int net_http_fd(struct http_t *state)
11551156 return state -> conn -> fd ;
11561157}
11571158
1158- 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 )
11591160{
11601161 struct response * response = (struct response * )& state -> response ;
11611162
1162- response -> pos += newlen ;
1163+ response -> pos += len ;
11631164
11641165 while (response -> part < P_BODY )
11651166 {
@@ -1227,7 +1228,7 @@ static ssize_t net_http_receive_header(struct http_t *state, ssize_t newlen)
12271228
12281229 if (response -> part >= P_BODY )
12291230 {
1230- newlen = response -> pos ;
1231+ len = response -> pos ;
12311232 response -> pos = 0 ;
12321233 if (response -> bodytype == T_LEN )
12331234 {
@@ -1243,7 +1244,7 @@ static ssize_t net_http_receive_header(struct http_t *state, ssize_t newlen)
12431244 response -> data = (char * )realloc (response -> data , response -> buflen );
12441245 }
12451246 }
1246- return newlen ;
1247+ return len ;
12471248}
12481249
12491250static bool net_http_receive_body (struct http_t * state , ssize_t newlen )
@@ -1411,12 +1412,9 @@ static bool net_http_redirect(struct http_t *state, const char *location)
14111412bool net_http_update (struct http_t * state , size_t * progress , size_t * total )
14121413{
14131414 struct response * response ;
1414- ssize_t newlen = 0 ;
1415-
1416- if (!state )
1417- return true;
1415+ ssize_t _len = 0 ;
14181416
1419- if (state -> err )
1417+ if (! state || state -> err )
14201418 return true;
14211419
14221420 if (!state -> conn )
@@ -1444,26 +1442,38 @@ bool net_http_update(struct http_t *state, size_t* progress, size_t* total)
14441442
14451443#ifdef HAVE_SSL
14461444 if (state -> ssl && state -> conn -> ssl_ctx )
1447- 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 ,
14481446 (uint8_t * )response -> data + response -> pos ,
14491447 response -> buflen - response -> pos );
14501448 else
14511449#endif
1452- newlen = socket_receive_all_nonblocking (state -> conn -> fd , & state -> err ,
1450+ _len = socket_receive_all_nonblocking (state -> conn -> fd , & state -> err ,
14531451 (uint8_t * )response -> data + response -> pos ,
14541452 response -> buflen - response -> pos );
14551453
14561454 if (response -> part < P_BODY )
14571455 {
1458- if (newlen < 0 || state -> err )
1459- goto error ;
1460- 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 );
14611465 }
14621466
14631467 if (response -> part >= P_BODY && response -> part < P_DONE )
14641468 {
1465- if (!net_http_receive_body (state , newlen ))
1466- 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+ }
14671477 }
14681478
14691479 if (progress )
@@ -1480,9 +1490,9 @@ bool net_http_update(struct http_t *state, size_t* progress, size_t* total)
14801490 if (response -> part != P_DONE )
14811491 return false;
14821492
1483- for (newlen = 0 ; (size_t )newlen < response -> headers -> size ; newlen ++ )
1493+ for (_len = 0 ; (size_t )_len < response -> headers -> size ; _len ++ )
14841494 {
1485- 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" ))
14861496 {
14871497 net_http_conn_pool_remove (state -> conn );
14881498 state -> conn = NULL ;
@@ -1496,23 +1506,14 @@ bool net_http_update(struct http_t *state, size_t* progress, size_t* total)
14961506
14971507 if (response -> status >= 300 && response -> status < 400 )
14981508 {
1499- for (newlen = 0 ; (size_t )newlen < response -> headers -> size ; newlen ++ )
1509+ for (_len = 0 ; (size_t )_len < response -> headers -> size ; _len ++ )
15001510 {
1501- if (string_starts_with_case_insensitive (response -> headers -> elems [newlen ].data , "Location: " ))
1502- {
1503- return net_http_redirect (state , response -> headers -> elems [newlen ].data + STRLEN_CONST ("Location: " ));
1504- }
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: " ));
15051513 }
15061514 }
15071515
15081516 return true;
1509-
1510- error :
1511- net_http_conn_pool_remove (state -> conn );
1512- state -> err = true;
1513- response -> part = P_DONE ;
1514- response -> status = -1 ;
1515- return true;
15161517}
15171518
15181519/**
@@ -1542,12 +1543,8 @@ int net_http_status(struct http_t *state)
15421543 **/
15431544struct string_list * net_http_headers (struct http_t * state )
15441545{
1545- if (!state )
1546+ if (!state || ! state -> err )
15461547 return NULL ;
1547-
1548- if (state -> err )
1549- return NULL ;
1550-
15511548 return state -> response .headers ;
15521549}
15531550
0 commit comments