@@ -275,7 +275,7 @@ static void start_fetch_loose(struct transfer_request *request)
275275 if (!start_active_slot (slot )) {
276276 fprintf (stderr , "Unable to start GET request\n" );
277277 repo -> can_update_info_refs = 0 ;
278- release_http_object_request (obj_req );
278+ release_http_object_request (& obj_req );
279279 release_request (request );
280280 }
281281}
@@ -375,7 +375,7 @@ static void start_put(struct transfer_request *request)
375375 /* Set it up */
376376 git_deflate_init (& stream , zlib_compression_level );
377377 size = git_deflate_bound (& stream , len + hdrlen );
378- strbuf_init (& request -> buffer .buf , size );
378+ strbuf_grow (& request -> buffer .buf , size );
379379 request -> buffer .posn = 0 ;
380380
381381 /* Compress it */
@@ -437,9 +437,11 @@ static void start_move(struct transfer_request *request)
437437 if (start_active_slot (slot )) {
438438 request -> slot = slot ;
439439 request -> state = RUN_MOVE ;
440+ request -> headers = dav_headers ;
440441 } else {
441442 request -> state = ABORTED ;
442443 FREE_AND_NULL (request -> url );
444+ curl_slist_free_all (dav_headers );
443445 }
444446}
445447
@@ -512,6 +514,8 @@ static void release_request(struct transfer_request *request)
512514 }
513515
514516 free (request -> url );
517+ free (request -> dest );
518+ strbuf_release (& request -> buffer .buf );
515519 free (request );
516520}
517521
@@ -578,9 +582,10 @@ static void finish_request(struct transfer_request *request)
578582 if (obj_req -> rename == 0 )
579583 request -> obj -> flags |= (LOCAL | REMOTE );
580584
585+ release_http_object_request (& obj_req );
586+
581587 /* Try fetching packed if necessary */
582588 if (request -> obj -> flags & LOCAL ) {
583- release_http_object_request (obj_req );
584589 release_request (request );
585590 } else
586591 start_fetch_packed (request );
@@ -649,12 +654,10 @@ static void add_fetch_request(struct object *obj)
649654 return ;
650655
651656 obj -> flags |= FETCHING ;
652- request = xmalloc ( sizeof ( * request ) );
657+ CALLOC_ARRAY ( request , 1 );
653658 request -> obj = obj ;
654- request -> url = NULL ;
655- request -> lock = NULL ;
656- request -> headers = NULL ;
657659 request -> state = NEED_FETCH ;
660+ strbuf_init (& request -> buffer .buf , 0 );
658661 request -> next = request_queue_head ;
659662 request_queue_head = request ;
660663
@@ -685,12 +688,11 @@ static int add_send_request(struct object *obj, struct remote_lock *lock)
685688 }
686689
687690 obj -> flags |= PUSHING ;
688- request = xmalloc ( sizeof ( * request ) );
691+ CALLOC_ARRAY ( request , 1 );
689692 request -> obj = obj ;
690- request -> url = NULL ;
691693 request -> lock = lock ;
692- request -> headers = NULL ;
693694 request -> state = NEED_PUSH ;
695+ strbuf_init (& request -> buffer .buf , 0 );
694696 request -> next = request_queue_head ;
695697 request_queue_head = request ;
696698
@@ -912,6 +914,7 @@ static struct remote_lock *lock_remote(const char *path, long timeout)
912914 result = XML_Parse (parser , in_buffer .buf ,
913915 in_buffer .len , 1 );
914916 free (ctx .name );
917+ free (ctx .cdata );
915918 if (result != XML_STATUS_OK ) {
916919 fprintf (stderr , "XML error: %s\n" ,
917920 XML_ErrorString (
@@ -1169,6 +1172,7 @@ static void remote_ls(const char *path, int flags,
11691172 result = XML_Parse (parser , in_buffer .buf ,
11701173 in_buffer .len , 1 );
11711174 free (ctx .name );
1175+ free (ctx .cdata );
11721176
11731177 if (result != XML_STATUS_OK ) {
11741178 fprintf (stderr , "XML error: %s\n" ,
@@ -1182,6 +1186,7 @@ static void remote_ls(const char *path, int flags,
11821186 }
11831187
11841188 free (ls .path );
1189+ free (ls .dentry_name );
11851190 free (url );
11861191 strbuf_release (& out_buffer .buf );
11871192 strbuf_release (& in_buffer );
@@ -1370,9 +1375,13 @@ static int get_delta(struct rev_info *revs, struct remote_lock *lock)
13701375 }
13711376
13721377 while (objects ) {
1378+ struct object_list * next = objects -> next ;
1379+
13731380 if (!(objects -> item -> flags & UNINTERESTING ))
13741381 count += add_send_request (objects -> item , lock );
1375- objects = objects -> next ;
1382+
1383+ free (objects );
1384+ objects = next ;
13761385 }
13771386
13781387 return count ;
@@ -1398,6 +1407,7 @@ static int update_remote(const struct object_id *oid, struct remote_lock *lock)
13981407 if (start_active_slot (slot )) {
13991408 run_active_slot (slot );
14001409 strbuf_release (& out_buffer .buf );
1410+ curl_slist_free_all (dav_headers );
14011411 if (results .curl_result != CURLE_OK ) {
14021412 fprintf (stderr ,
14031413 "PUT error: curl result=%d, HTTP code=%ld\n" ,
@@ -1407,6 +1417,7 @@ static int update_remote(const struct object_id *oid, struct remote_lock *lock)
14071417 }
14081418 } else {
14091419 strbuf_release (& out_buffer .buf );
1420+ curl_slist_free_all (dav_headers );
14101421 fprintf (stderr , "Unable to start PUT request\n" );
14111422 return 0 ;
14121423 }
@@ -1516,6 +1527,7 @@ static void update_remote_info_refs(struct remote_lock *lock)
15161527 results .curl_result , results .http_code );
15171528 }
15181529 }
1530+ curl_slist_free_all (dav_headers );
15191531 }
15201532 strbuf_release (& buffer .buf );
15211533}
@@ -1707,7 +1719,7 @@ int cmd_main(int argc, const char **argv)
17071719 int rc = 0 ;
17081720 int i ;
17091721 int new_refs ;
1710- struct ref * ref , * local_refs ;
1722+ struct ref * ref , * local_refs = NULL ;
17111723
17121724 CALLOC_ARRAY (repo , 1 );
17131725
@@ -1972,6 +1984,7 @@ int cmd_main(int argc, const char **argv)
19721984 cleanup :
19731985 if (info_ref_lock )
19741986 unlock_remote (info_ref_lock );
1987+ free (repo -> url );
19751988 free (repo );
19761989
19771990 http_cleanup ();
@@ -1983,5 +1996,8 @@ int cmd_main(int argc, const char **argv)
19831996 request = next_request ;
19841997 }
19851998
1999+ refspec_clear (& rs );
2000+ free_refs (local_refs );
2001+
19862002 return rc ;
19872003}
0 commit comments