Переглянути джерело

fix(emqx_mgmt_data_backup): remove an uploaded backup file if it's not valid

Serge Tupchii 1 рік тому
батько
коміт
40eccb10d6

+ 2 - 0
apps/emqx_management/src/emqx_mgmt_data_backup.erl

@@ -315,8 +315,10 @@ do_upload(BackupFileNameStr, BackupFileContent) ->
     catch
     catch
         error:{badmatch, {error, Reason}}:Stack ->
         error:{badmatch, {error, Reason}}:Stack ->
             ?SLOG(error, #{msg => "emqx_data_upload_failed", reason => Reason, stacktrace => Stack}),
             ?SLOG(error, #{msg => "emqx_data_upload_failed", reason => Reason, stacktrace => Stack}),
+            _ = file:delete(FilePath),
             {error, Reason};
             {error, Reason};
         Class:Reason:Stack ->
         Class:Reason:Stack ->
+            _ = file:delete(FilePath),
             ?SLOG(error, #{
             ?SLOG(error, #{
                 msg => "emqx_data_upload_failed",
                 msg => "emqx_data_upload_failed",
                 exception => Class,
                 exception => Class,

+ 5 - 1
apps/emqx_management/test/emqx_mgmt_api_data_backup_SUITE.erl

@@ -199,7 +199,11 @@ upload_backup_test(Config, BackupName) ->
     ?assertEqual(ok, upload_backup(?NODE3_PORT, Auth, UploadFile)),
     ?assertEqual(ok, upload_backup(?NODE3_PORT, Auth, UploadFile)),
     %% This file was specially forged to pass upload validation bat fail on import
     %% This file was specially forged to pass upload validation bat fail on import
     ?assertEqual(ok, upload_backup(?NODE2_PORT, Auth, BadImportFile)),
     ?assertEqual(ok, upload_backup(?NODE2_PORT, Auth, BadImportFile)),
-    ?assertEqual({error, bad_request}, upload_backup(?NODE1_PORT, Auth, BadUploadFile)).
+    ?assertEqual({error, bad_request}, upload_backup(?NODE1_PORT, Auth, BadUploadFile)),
+    %% Invalid file must not be kept
+    ?assertMatch(
+        {error, {_, 404, _}}, backup_file_op(get, ?NODE1_PORT, Auth, ?BAD_UPLOAD_BACKUP, [])
+    ).
 
 
 import_backup_test(Config, BackupName) ->
 import_backup_test(Config, BackupName) ->
     Auth = ?config(auth, Config),
     Auth = ?config(auth, Config),

+ 1 - 0
changes/ce/fix-12759.en.md

@@ -0,0 +1 @@
+Do not save invalid uploaded backup files.