Browse code

bb12412 - Fix for chdir bug in libfreshclam that also triggered a double-free.

Micah Snyder authored on 2019/11/02 02:16:47
Showing 1 changed files
... ...
@@ -311,15 +311,6 @@ fc_error_t fc_prune_database_directory(char **databaseList, uint32_t nDatabases)
311 311
     struct dirent *dent;
312 312
     char *extension = NULL;
313 313
 
314
-    char currDir[PATH_MAX];
315
-
316
-    /* Store CWD */
317
-    if (!getcwd(currDir, PATH_MAX)) {
318
-        logg("!getcwd() failed\n");
319
-        status = FC_EDIRECTORY;
320
-        goto done;
321
-    }
322
-
323 314
     /* Change directory to database directory */
324 315
     if (chdir(g_databaseDirectory)) {
325 316
         logg("!Can't change dir to %s\n", g_databaseDirectory);
... ...
@@ -367,16 +358,6 @@ done:
367 367
         closedir(dir);
368 368
     }
369 369
 
370
-    if (currDir[0] != '\0') {
371
-        /* Restore CWD */
372
-        if (chdir(currDir)) {
373
-            logg("!Failed to change back to original directory %s\n", currDir);
374
-            status = FC_EDIRECTORY;
375
-            goto done;
376
-        }
377
-        logg("*Current working dir restored to %s\n", currDir);
378
-    }
379
-
380 370
     return status;
381 371
 }
382 372
 
... ...
@@ -607,13 +588,10 @@ fc_error_t fc_update_database(
607 607
     fc_error_t status = FC_EARG;
608 608
 
609 609
     char *dbFilename = NULL;
610
-    char currDir[PATH_MAX];
611 610
     int signo    = 0;
612 611
     long attempt = 1;
613 612
     uint32_t i;
614 613
 
615
-    currDir[0] = '\0';
616
-
617 614
     if ((NULL == database) || (NULL == serverList) || (NULL == bUpdated)) {
618 615
         logg("^fc_update_database: Invalid arguments.\n");
619 616
         goto done;
... ...
@@ -621,13 +599,6 @@ fc_error_t fc_update_database(
621 621
 
622 622
     *bUpdated = 0;
623 623
 
624
-    /* Store CWD */
625
-    if (!getcwd(currDir, PATH_MAX)) {
626
-        logg("!getcwd() failed\n");
627
-        status = FC_EDIRECTORY;
628
-        goto done;
629
-    }
630
-
631 624
     /* Change directory to database directory */
632 625
     if (chdir(g_databaseDirectory)) {
633 626
         logg("!Can't change dir to %s\n", g_databaseDirectory);
... ...
@@ -698,16 +669,6 @@ done:
698 698
         free(dbFilename);
699 699
     }
700 700
 
701
-    if (currDir[0] != '\0') {
702
-        /* Restore CWD */
703
-        if (chdir(currDir)) {
704
-            logg("!Failed to change back to original directory %s\n", currDir);
705
-            status = FC_EDIRECTORY;
706
-            goto done;
707
-        }
708
-        logg("*Current working dir restored to %s\n", currDir);
709
-    }
710
-
711 701
     return status;
712 702
 }
713 703
 
... ...
@@ -770,12 +731,9 @@ fc_error_t fc_download_url_database(
770 770
     fc_error_t ret;
771 771
     fc_error_t status = FC_EARG;
772 772
 
773
-    char currDir[PATH_MAX];
774 773
     long attempt     = 1;
775 774
     char *dbFilename = NULL;
776 775
 
777
-    currDir[0] = '\0';
778
-
779 776
     if ((NULL == urlDatabase) || (NULL == bUpdated)) {
780 777
         logg("^fc_download_url_database: Invalid arguments.\n");
781 778
         goto done;
... ...
@@ -783,13 +741,6 @@ fc_error_t fc_download_url_database(
783 783
 
784 784
     *bUpdated = 0;
785 785
 
786
-    /* Store CWD */
787
-    if (!getcwd(currDir, PATH_MAX)) {
788
-        logg("!getcwd() failed\n");
789
-        status = FC_EDIRECTORY;
790
-        goto done;
791
-    }
792
-
793 786
     /* Change directory to database directory */
794 787
     if (chdir(g_databaseDirectory)) {
795 788
         logg("!Can't change dir to %s\n", g_databaseDirectory);
... ...
@@ -852,16 +803,6 @@ done:
852 852
         free(dbFilename);
853 853
     }
854 854
 
855
-    if (currDir[0] != '\0') {
856
-        /* Restore CWD */
857
-        if (chdir(currDir)) {
858
-            logg("!Failed to change back to original directory %s\n", currDir);
859
-            status = FC_EDIRECTORY;
860
-            goto done;
861
-        }
862
-        logg("*Current working dir restored to %s\n", currDir);
863
-    }
864
-
865 855
     return status;
866 856
 }
867 857