@@ -841,6 +841,11 @@ void update_savedata_file(const Tox *tox, const uint8_t *passphrase, size_t pass
841841 dbg (9 , "update_savedata_file:ERROR:tox ptr is NULL" );
842842 return ;
843843 }
844+
845+ bool save_unencrypted = false;
846+ size_t size_enc = 0 ;
847+ uint8_t * savedata_enc = NULL ;
848+
844849 size_t size = tox_get_savedata_size (tox );
845850 // dbg(9, "update_savedata_file:tox_get_savedata_size=%d", (int)size);
846851
@@ -875,42 +880,56 @@ void update_savedata_file(const Tox *tox, const uint8_t *passphrase, size_t pass
875880 snprintf (full_path_filename_tmp , (size_t )MAX_FULL_PATH_LENGTH , "%s/%s" , app_data_dir , savedata_tmp_filename );
876881#endif
877882
878- size_t size_enc = size + TOX_PASS_ENCRYPTION_EXTRA_LENGTH ;
879- // dbg(9, "update_savedata_file:size_enc=%d", (int)size_enc);
880- uint8_t * savedata_enc = calloc (1 , size_enc );
881- // dbg(9, "update_savedata_file:savedata_enc=%p", savedata_enc);
882- TOX_ERR_ENCRYPTION error ;
883- tox_pass_encrypt ((const uint8_t * )savedata , size , passphrase , passphrase_len , savedata_enc , & error );
884- // dbg(9, "update_savedata_file:tox_pass_encrypt:%d", (int)error);
885-
886- if ((size_enc < TOX_PASS_ENCRYPTION_EXTRA_LENGTH ) || (error != TOX_ERR_ENCRYPTION_OK ))
883+ if ((passphrase == NULL ) || (passphrase_len == 0 ))
887884 {
888- dbg (9 , "update_savedata_file:ERROR:size_enc < TOX_PASS_ENCRYPTION_EXTRA_LENGTH or error != TOX_ERR_ENCRYPTION_OK: error=%d" , (int )error );
889- if (savedata )
890- {
891- free (savedata );
892- }
893- if (savedata_enc )
894- {
895- free (savedata_enc );
896- }
897- return ;
885+ // HINT: caller wants to save UN-encrypted
886+ dbg (9 , "update_savedata_file:!!!!!!! saving UN-encrypted !!!!!!!" );
887+ save_unencrypted = true;
898888 }
899889 else
900890 {
901- bool res = false;
902- res = tox_is_data_encrypted ((const uint8_t * )savedata_enc );
903- if (!res )
891+ size_enc = size + TOX_PASS_ENCRYPTION_EXTRA_LENGTH ;
892+ // dbg(9, "update_savedata_file:size_enc=%d", (int)size_enc);
893+ savedata_enc = calloc (1 , size_enc );
894+ // dbg(9, "update_savedata_file:savedata_enc=%p", savedata_enc);
895+ TOX_ERR_ENCRYPTION error ;
896+ tox_pass_encrypt ((const uint8_t * )savedata , size , passphrase , passphrase_len , savedata_enc , & error );
897+ // dbg(9, "update_savedata_file:tox_pass_encrypt:%d", (int)error);
898+
899+ if ((size_enc < TOX_PASS_ENCRYPTION_EXTRA_LENGTH ) || (error != TOX_ERR_ENCRYPTION_OK ))
904900 {
905- dbg (9 , "update_savedata_file:ERROR:savedata_enc is corrupted" );
901+ dbg (9 , "update_savedata_file:ERROR:size_enc < TOX_PASS_ENCRYPTION_EXTRA_LENGTH or error != TOX_ERR_ENCRYPTION_OK: error=%d" , ( int ) error );
906902 free (savedata );
907903 free (savedata_enc );
904+ free (full_path_filename );
905+ free (full_path_filename_tmp );
908906 return ;
909907 }
908+ else
909+ {
910+ bool res = false;
911+ res = tox_is_data_encrypted ((const uint8_t * )savedata_enc );
912+ if (!res )
913+ {
914+ dbg (9 , "update_savedata_file:ERROR:savedata_enc is corrupted" );
915+ free (savedata );
916+ free (savedata_enc );
917+ free (full_path_filename );
918+ free (full_path_filename_tmp );
919+ return ;
920+ }
921+ }
910922 }
911923
912924 FILE * f = fopen (full_path_filename_tmp , "wb" );
913- fwrite ((const void * )savedata_enc , size_enc , 1 , f );
925+ if (save_unencrypted )
926+ {
927+ fwrite ((const void * )savedata , size , 1 , f );
928+ }
929+ else
930+ {
931+ fwrite ((const void * )savedata_enc , size_enc , 1 , f );
932+ }
914933 fseek (f , 0 , SEEK_END );
915934 long fsize = ftell (f );
916935 // dbg(0, "update_savedata_file:ftell:savedata size=%ld", fsize);
@@ -920,14 +939,10 @@ void update_savedata_file(const Tox *tox, const uint8_t *passphrase, size_t pass
920939 if (fsize < 1 )
921940 {
922941 dbg (9 , "update_savedata_file:ERROR:fsize < 1" );
923- if (savedata )
924- {
925- free (savedata );
926- }
927- if (savedata_enc )
928- {
929- free (savedata_enc );
930- }
942+ free (savedata );
943+ free (savedata_enc );
944+ free (full_path_filename );
945+ free (full_path_filename_tmp );
931946 return ;
932947 }
933948
@@ -940,18 +955,10 @@ void update_savedata_file(const Tox *tox, const uint8_t *passphrase, size_t pass
940955
941956 int res_rename = rename (full_path_filename_tmp , full_path_filename );
942957 // dbg(9, "update_savedata_file:rename src=%s dst=%s res=%d", full_path_filename_tmp, full_path_filename, res_rename);
958+ free (savedata );
959+ free (savedata_enc );
943960 free (full_path_filename );
944961 free (full_path_filename_tmp );
945-
946- if (savedata )
947- {
948- free (savedata );
949- }
950-
951- if (savedata_enc )
952- {
953- free (savedata_enc );
954- }
955962}
956963
957964
0 commit comments