@@ -455,8 +455,6 @@ impl LoginDb {
455455 SET local_modified = :now_millis,
456456 timeLastUsed = :time_last_used,
457457 timePasswordChanged = :time_password_changed,
458- timeOfLastBreach = :time_of_last_breach,
459- timeLastBreachAlertDismissed = :time_last_breach_alert_dismissed,
460458 httpRealm = :http_realm,
461459 formActionOrigin = :form_action_origin,
462460 usernameField = :username_field,
@@ -483,8 +481,6 @@ impl LoginDb {
483481 ":time_password_changed" : login. meta. time_password_changed,
484482 ":sec_fields" : login. sec_fields,
485483 ":guid" : & login. meta. id,
486- ":time_of_last_breach" : login. fields. time_of_last_breach,
487- ":time_last_breach_alert_dismissed" : login. fields. time_last_breach_alert_dismissed,
488484 // time_last_used has been set to now.
489485 ":now_millis" : login. meta. time_last_used,
490486 } ,
@@ -1799,8 +1795,9 @@ mod tests {
17991795 assert ! ( !db. is_potentially_breached( & login. meta. id) . unwrap( ) ) ;
18001796 assert ! ( login. fields. time_last_breach_alert_dismissed. is_none( ) ) ;
18011797
1802- // set - use a time that's definitely after password was changed
1803- let breach_time = login. meta . time_password_changed + 1000 ;
1798+ // Wait and use a time that's definitely after password was changed
1799+ thread:: sleep ( time:: Duration :: from_millis ( 50 ) ) ;
1800+ let breach_time = util:: system_time_ms_i64 ( SystemTime :: now ( ) ) ;
18041801 db. record_breach ( & login. meta . id , breach_time) . unwrap ( ) ;
18051802 assert ! ( db. is_potentially_breached( & login. meta. id) . unwrap( ) ) ;
18061803 let login1 = db. get_by_id ( & login. meta . id ) . unwrap ( ) . unwrap ( ) ;
@@ -1817,9 +1814,10 @@ mod tests {
18171814 let login3 = db. get_by_id ( & login. meta . id ) . unwrap ( ) . unwrap ( ) ;
18181815 assert ! ( login3. fields. time_of_last_breach. is_none( ) ) ;
18191816
1820- // set again - use a time that's definitely after password was changed
1821- let breach_time2 = login. meta . time_password_changed + 2000 ;
1822- db. record_breach ( & login. meta . id , breach_time2) . unwrap ( ) ;
1817+ // Wait and use a time that's definitely after password was changed
1818+ thread:: sleep ( time:: Duration :: from_millis ( 50 ) ) ;
1819+ let breach_time = util:: system_time_ms_i64 ( SystemTime :: now ( ) ) ;
1820+ db. record_breach ( & login. meta . id , breach_time) . unwrap ( ) ;
18231821 assert ! ( db. is_potentially_breached( & login. meta. id) . unwrap( ) ) ;
18241822
18251823 // now change password
@@ -1836,6 +1834,45 @@ mod tests {
18361834 assert ! ( !db. is_potentially_breached( & login. meta. id) . unwrap( ) ) ;
18371835 }
18381836
1837+ #[ test]
1838+ fn test_breach_alert_fields_not_overwritten_by_update ( ) {
1839+ ensure_initialized ( ) ;
1840+ let db = LoginDb :: open_in_memory ( ) ;
1841+ let login = db
1842+ . add (
1843+ LoginEntry {
1844+ origin : "https://www.example.com" . into ( ) ,
1845+ http_realm : Some ( "https://www.example.com" . into ( ) ) ,
1846+ username : "user1" . into ( ) ,
1847+ password : "password1" . into ( ) ,
1848+ ..Default :: default ( )
1849+ } ,
1850+ & * TEST_ENCDEC ,
1851+ )
1852+ . unwrap ( ) ;
1853+ assert ! ( !db. is_potentially_breached( & login. meta. id) . unwrap( ) ) ;
1854+
1855+ // Wait and use a time that's definitely after password was changed
1856+ thread:: sleep ( time:: Duration :: from_millis ( 50 ) ) ;
1857+ let breach_time = util:: system_time_ms_i64 ( SystemTime :: now ( ) ) ;
1858+ db. record_breach ( & login. meta . id , breach_time) . unwrap ( ) ;
1859+ assert ! ( db. is_potentially_breached( & login. meta. id) . unwrap( ) ) ;
1860+
1861+ // change some fields
1862+ db. update (
1863+ & login. meta . id . clone ( ) ,
1864+ LoginEntry {
1865+ username_field : "changed-username-field" . into ( ) ,
1866+ ..login. clone ( ) . decrypt ( & * TEST_ENCDEC ) . unwrap ( ) . entry ( )
1867+ } ,
1868+ & * TEST_ENCDEC ,
1869+ )
1870+ . unwrap ( ) ;
1871+
1872+ // breach still present
1873+ assert ! ( db. is_potentially_breached( & login. meta. id) . unwrap( ) ) ;
1874+ }
1875+
18391876 #[ test]
18401877 fn test_breach_alert_dismissal_with_specific_timestamp ( ) {
18411878 ensure_initialized ( ) ;
0 commit comments