Commit Graph

111 Commits

Author SHA1 Message Date
dlee
12fa90c9a8 Bug 1562822 - P1. Return NS_ERROR_FILE_CORRUPTED when Safe Browsing cannot read the header of its database. r=gcp
Differential Revision: https://phabricator.services.mozilla.com/D42613
2019-08-21 12:07:44 +00:00
dlee
3297a79701 Bug 1574450 - Close inputstream before reseting HashStore file. r=gcp
mInputStream holds a reference to the current opened HashStore file.
While resetting the file, mInputStream should be closed first, otherwise,
the file->Remove returns failure code NS_ERROR_FILE_IS_LOCKED.
(This only happens in Windows platform)

Differential Revision: https://phabricator.services.mozilla.com/D42460
2019-08-19 07:45:33 +00:00
dlee
6ee4703f17 Bug 1531354 - P6. Remove unused testing files and load old version of prefixes data. r=gcp
This patch does the following:
1. Remove testing files from disk because they are no longer required.
2. Load completions from previous version of HashStore until an update
   is applied.
3. Older version of HashStore(.sbstore) & PrefixSet(.vlpset) will be
   removed during an update

Differential Revision: https://phabricator.services.mozilla.com/D36002
2019-06-29 19:24:14 +00:00
dlee
0864125fd4 Bug 1531354 - P3. Do not store completion in HashStore. r=gcp
Completions are now stored in .vlpset, we can remove it from .sbstore
Functions related to optimize reading completions from .sbstore can also
be removed because it is no longer HashStore's responsibility

Differential Revision: https://phabricator.services.mozilla.com/D34574
2019-06-26 19:45:08 +00:00
dlee
f066428f6b Bug 1543319 - P1. Free intermediate memory as early as possible during Safe Browsing update. r=gcp
Here is the flow how prefixes are handled during an V4 update:
1. Prefixes are received from Safe Browsing update, stored in ProtocolBuffer
2. Copy the prefixes from ProtocolBuffer to TableUpdate structure
3. Prefixes in TableUpdate are merged with local prefixes (stored in LookupCacheV4)
4. Merged prefixes are processes by PrefixSet to generate the in-memory prefix
   set data structure (MakePrefixSet).

In this patch, we free the prefixes stored in TableUpdate right after step3.
This reduces the peak memory used during an update (peak happens in step 4).

Differential Revision: https://phabricator.services.mozilla.com/D26860
2019-04-10 14:32:54 +00:00
Dimi Lee
0b4d6efd3f Bug 1353956 - P1. Rename checksum used in SafeBrowsing V4 to SHA256. r=gcp
SafeBrowsing V4 protocol use SHA-256 as the checksum to check integrity
of update data and also the integrity of prefix files.

SafeBrowsing V2 HashStore use MD5 as the checksum to check integrity of
.sbstore

Since we are going to use CRC32 as the integrity check of V4 prefix files,
I think rename V4 "checksum" to SHA256 can improve readability.

Differential Revision: https://phabricator.services.mozilla.com/D21460
2019-03-07 14:40:14 +00:00
Dorel Luca
688429d9d6 Backed out 6 changesets (bug 1353956) for Linux Build bustage
Backed out changeset 71dafccc22ae (bug 1353956)
Backed out changeset f1f29fe519cf (bug 1353956)
Backed out changeset 4978556a66f6 (bug 1353956)
Backed out changeset bc0b91abce9b (bug 1353956)
Backed out changeset 6b8412db5a05 (bug 1353956)
Backed out changeset 3d326cfcd002 (bug 1353956)
2019-03-07 01:49:03 +02:00
Dimi Lee
15191963de Bug 1353956 - P1. Rename checksum used in SafeBrowsing V4 to SHA256. r=gcp
SafeBrowsing V4 protocol use SHA-256 as the checksum to check integrity
of update data and also the integrity of prefix files.

SafeBrowsing V2 HashStore use MD5 as the checksum to check integrity of
.sbstore

Since we are going to use CRC32 as the integrity check of V4 prefix files,
I think rename V4 "checksum" to SHA256 can improve readability.

Differential Revision: https://phabricator.services.mozilla.com/D21460
2019-02-28 08:12:36 +00:00
Sylvestre Ledru
e5a134f73a Bug 1511181 - Reformat everything to the Google coding style r=ehsan a=clang-format
# ignore-this-changeset
2018-11-30 11:46:48 +01:00
Henri Sivonen
cb3dbf9549 Bug 1485325 - Avoid nsTSubstring::GetMutableData() in URL classifier. r=francois
MozReview-Commit-ID: EzyOTuEZ9Ot

Differential Revision: https://phabricator.services.mozilla.com/D3966
2018-08-22 23:07:59 +00:00
Francois Marier
b910cbbb34 Bug 1434206 - Make TableUpdate objects const as much as possible. r=gcp
I tried to make TableUpdateArray point to const TableUpdate objects
everywhere but there were two problems:

- HashStore::ApplyUpdate() triggers a few Merge() calls which include
  sorting the underlying TableUpdate object first.

- LookupCacheV4::ApplyUpdate() calls TableUpdateV4::NewChecksum() when the
  checksum is missing and that sets mChecksum.

MozReview-Commit-ID: LIhJcoxo7e7
2018-05-11 16:02:37 -07:00
Francois Marier
ef8ea55aca Bug 1434206 - Keep TableUpdate objects in smart pointers. r=gcp
Manually keeping tabs on the lifetime of these objects is a pain
and is the likely source of some of our crashes. I suspect we might
also be leaking memory.

This change creates an explicit copy of the main array into the
update thread to avoid using a non-thread-safe shared data
structure. This is a shallow copy. Only the pointers to the
TableUpdates are copied, which means one pointer per list (e.g. 5
in total for google4 in a new profile).

MozReview-Commit-ID: 221d6GkKt0M
2018-06-01 15:48:48 -07:00
Francois Marier
6d1e9d5082 Bug 1434206 - Use a TableUpdateV2 param in ApplyUpdate(). r=gcp
HashStore::ApplyUpdate() is a V2-only function and so we can be
explicit about that and remove unnecessary casts.

Add a new update error code for when we fail to cast a TableUpdate
object to the expected protocol version.

MozReview-Commit-ID: 65BBwiZJw6J
2018-05-10 16:06:49 -07:00
Francois Marier
ffcbff3049 Bug 1434206 - Add const to members and functions that can take it. r=gcp
MozReview-Commit-ID: B2aaQTttPAV
2018-05-16 15:26:14 -07:00
Sebastian Hengst
d91e9954eb Backed out 4 changesets (bug 525063) on request from Andi. a=backout
Backed out changeset 516c4fb1e4b8 (bug 525063)
Backed out changeset 6ff8aaef2866 (bug 525063)
Backed out changeset bf13e4103150 (bug 525063)
Backed out changeset d7d2f08e051c (bug 525063)
2018-04-13 16:01:28 +03:00
Tristan Bourvon
6095241db8 Bug 525063 - Initialize uninitialized class attributes in m-c. r=ehsan 2018-04-10 21:11:02 +02:00
Francois Marier
170af9408f Bug 1438671 - Remove the std::string wrapper in TableUpdateV4. r=gcp
Given we're no longer using dependent strings in
LookupCacheV4::PrefixString(), we will end up make a copy of the
prefixes at some point. Let's do it early and remove a bunch of
complicated code.

Make the string copies fallible so that we return an error and
fail the update instead of crashing.

MozReview-Commit-ID: 5cZHSDIJSlD
2018-04-03 17:11:30 -07:00
Andrea Marchesini
304820957d Bug 1409327 - NS_NewBufferedInputStream should take the ownership of the inputStream, r=smaug 2017-10-19 11:39:30 +02:00
Kartikaya Gupta
14424677af Bug 1384233 - Remove SizePrintfMacros.h. r=froydnj
We have a minimum requirement of VS 2015 for Windows builds, which supports
the z length modifier for format specifiers. So we don't need SizePrintfMacros.h
any more, and can just use %zu and friends directly everywhere.

MozReview-Commit-ID: 6s78RvPFMzv
2017-07-26 16:03:57 -04:00
Thomas Nguyen
41442f215a Bug 1378680 - Refactor usage fallible alloc in url-classifier r=francois
MozReview-Commit-ID: HHG1ByeIwZv
2017-07-20 16:20:27 +08:00
Thomas Nguyen
d158ca7769 Bug 1361699 - Add buffer when writing hashstore to file r=gcp,mcmanus
We write a lot of 4-bytes prefixes to file which call many system calls.
We should use a buffer and only write to file if the buffer is full or
finish writing. nsIBufferedOutputStream is a good candidate to do that

MozReview-Commit-ID: CzGOd7iXVTv
2017-05-19 13:17:07 +08:00
DimiL
a0b8501692 Bug 1333328 - Refactor cache miss handling mechanism for V2. r=francois
In this patch, we will make Safebrowsing V2 caching use the same algorithm as V4.
So we remove "mMissCache" for negative caching and TableFresness check for
positive caching.

But Safebrowsing V2 doesn't contain negative/positive cache duration information in
gethash response. So we hard-code a fixed value, 15 minutes, as cache duration.
In this way, we can sync the mechanism we handle caching for V2 and V4.

An extra effort for V2 here is that we need to manually record prefixes misses
because we won't get any response for those prefixes(implemented in
nsUrlClassifierLookupCallback::CacheMisses).
2017-05-04 09:38:14 +08:00
Thomas Nguyen
1cf911e408 Bug 1322523 - Add telemetry to capture the length of long Safe Browsing V4 prefixes r=francois
MozReview-Commit-ID: HhWhyJvyG85
2017-05-14 14:09:10 +08:00
dimi
b19db734bc Bug 1311933 - P1. Use integer as the key of safebrowsing cache. r=francois
In Bug 1323953, we always send 4-bytes prefix for completion and the prefix is also
used as the key to store cache result from gethash request.
Since it is always 4-bytes, we could convert it to integer for simplicity.

MozReview-Commit-ID: Lkvrg0wvX5Z
2017-04-11 16:07:26 +08:00
dimi
5b1a0ff5b5 Bug 1311935 - P2. Process fullHashes.find response. r=francois
This patch includes following changes:

1. nsUrlClassifierHashCompleter.js
   nsUrlClassifierHashCompleter.idl
   - Add completionV4 interface for hashCompleter to pass response data to
     DB service.
   - Process response data includes negative cache duration, matched full
     hashes and cache duration for each match. Full matches are passed through
     nsIFullHashMatch interface.
   - Change _requests.responses from array contains matched fullhashes to
     dictionary so that it can store additional information likes negative cache
     duration.
2. nsUrlClassifierDBService.cpp
   - Implement CompletionV4 interface, store response data to CacheResultV4
     object. Expired duration to expired time is handled here.
   - Add CacheResultToTableUpdate function to convert V2 & V4 cache result
     to TableUpdate object.
3. LookupCache.h
   - Extend CacheResult to CacheResultV2 and CacheResultV4 so we can store
     response data in CompletionV2 and CompletionV4.
4. HashStore.h
   - Add API and member variable in TableUpdateV4 to store response data.
     TableUpdate object is used by DB service to pass update data or gethash
     response to Classifier, so we need to extend TableUpdateV4 to be able
     to store fullHashes.find response.
6. Entry.h
   - Define the structure about how we cache fullHashes.find response.

MozReview-Commit-ID: FV4yAl2SAc6
2017-04-11 11:50:48 +08:00
Iris Hsiao
cd018fd494 Backed out 4 changesets (bug 1311935) for causing assertion crash by developer's request
Backed out changeset 27e624cd9479 (bug 1311935)
Backed out changeset 4c0381ab0990 (bug 1311935)
Backed out changeset 73587838ef16 (bug 1311935)
Backed out changeset a5a6c0f79733 (bug 1311935)
2017-04-11 11:04:54 +08:00
dimi
5856f89d1f Bug 1311935 - P2. Process fullHashes.find response. r=francois
This patch includes following changes:

1. nsUrlClassifierHashCompleter.js
   nsUrlClassifierHashCompleter.idl
   - Add completionV4 interface for hashCompleter to pass response data to
     DB service.
   - Process response data includes negative cache duration, matched full
     hashes and cache duration for each match. Full matches are passed through
     nsIFullHashMatch interface.
   - Change _requests.responses from array contains matched fullhashes to
     dictionary so that it can store additional information likes negative cache
     duration.
2. nsUrlClassifierDBService.cpp
   - Implement CompletionV4 interface, store response data to CacheResultV4
     object. Expired duration to expired time is handled here.
   - Add CacheResultToTableUpdate function to convert V2 & V4 cache result
     to TableUpdate object.
3. LookupCache.h
   - Extend CacheResult to CacheResultV2 and CacheResultV4 so we can store
     response data in CompletionV2 and CompletionV4.
4. HashStore.h
   - Add API and member variable in TableUpdateV4 to store response data.
     TableUpdate object is used by DB service to pass update data or gethash
     response to Classifier, so we need to extend TableUpdateV4 to be able
     to store fullHashes.find response.
6. Entry.h
   - Define the structure about how we cache fullHashes.find response.

MozReview-Commit-ID: KgR1NASl7GC
2017-04-10 16:20:09 +08:00
Henry Chang
4543c61a48 Bug 1339050 - Asynchronously apply safebrowsing DB update. r=francois,gcp
A new function Classifier::AsyncApplyUpdates() is implemented for async update.
Besides, all public Classifier interfaces become "worker thread only" and
we remove DBServiceWorker::ApplyUpdatesBackground/Foreground.

In DBServiceWorker::FinishUpdate, instead of calling Classifier::ApplyUpdates,
we call Classifier::AsyncApplyUpdates and install a callback for notifying
the update observer when update is finished. The callback will occur on the
caller thread (i.e. worker thread.)

As for the shutdown issue, when the main thread is notified to shut down,
we at first *synchronously* dispatch an event to the worker thread to
shut down the update thread. After getting synchronized with all other
threads, we send last two events "CancelUpdate" and "CloseDb" to notify
dangling update (i.e. BeginUpdate is called but FinishUpdate isn't)
and do cleanup work.

MozReview-Commit-ID: DXZvA2eFKlc
2017-04-06 07:07:56 +08:00
Tom Tromey
a4b717ab39 Bug 1060419 - make log_print use Printf.h, r=froydnj
MozReview-Commit-ID: BIZ1GQEZ1vs
2016-12-15 20:16:31 -07:00
Sylvestre Ledru
887ae57066 Bug 1338086 - Remove useless else blocks in order to reduce complexity in toolkit/components/url-classifier/ r=francois
MozReview-Commit-ID: GTb9ME8pfVq
2017-02-09 10:57:22 +01:00
DimiL
636ddbc7f3 Bug 1321834 - Use iterators instead of Elements() in RemoveMatchingPrefixes. r=francois,froydnj
MozReview-Commit-ID: 5YKF1lGL0hp
2016-12-20 09:58:45 +08:00
Thomas Nguyen
7064eed520 Bug 1315386 - Make Safe Browsing code more shutdown-aware. r=francois,gcp.
MozReview-Commit-ID: ATCVfh5YLZl
2016-11-25 16:02:37 +08:00
Sylvestre Ledru
a15f1c5d08 Bug 1318004 - Replace default bodies of special member functions with = default; r=Ehsan
MozReview-Commit-ID: 33AOhtFrXS8
2016-11-16 18:26:14 +01:00
Wes Kocher
b620596e75 Backed out 4 changesets (bug 1318004) for xpcshell failures a=backout CLOSED TREE
Backed out changeset a3fe53641526 (bug 1318004)
Backed out changeset a5d1676b6f88 (bug 1318004)
Backed out changeset b56b37f0f4d7 (bug 1318004)
Backed out changeset fb5254baf1cb (bug 1318004)
2016-11-21 16:15:38 -08:00
Sylvestre Ledru
eaf1a1bb8c Bug 1318004 - Replace default bodies of special member functions with = default; r=Ehsan
MozReview-Commit-ID: 33AOhtFrXS8
2016-11-16 18:26:14 +01:00
Wes Kocher
13642ca8af Backed out 4 changesets (bug 1318004) for xpcshell failures a=backout
Backed out changeset 6995bd33872b (bug 1318004)
Backed out changeset 9be5c856bc78 (bug 1318004)
Backed out changeset 365b0b7f289a (bug 1318004)
Backed out changeset 2f2ebf176eac (bug 1318004)
2016-11-21 12:23:17 -08:00
Sylvestre Ledru
c30faf12df Bug 1318004 - Replace default bodies of special member functions with = default; r=Ehsan
MozReview-Commit-ID: 33AOhtFrXS8
2016-11-16 18:26:14 +01:00
Henry Chang
7f94b8915f Bug 1315097 - Build the provider dictionary on the main thread to be used everywhere. r=francois,gcp
MozReview-Commit-ID: Ft1deSNKuVB
2016-11-04 17:54:05 +08:00
Henry Chang
fff35e78ca Bug 1305484 - Save/load state and checksum to/from disk rather than prefs. r=dimi,francois
MozReview-Commit-ID: 4gmmrI9wY4c
2016-10-13 15:22:08 +08:00
Henry Chang
ea02e6b8bd Bug 1285848 - Part 2: Request and parse RICE encoded prefix by default. r=francois
MozReview-Commit-ID: Cd0lT5VTM7t
2016-10-05 14:59:53 +08:00
Dimi Lee
d316530abf Bug 1305801 - Part 5: Support SafeBrowsing v4 partial update. r=gcp
MozReview-Commit-ID: 7OEWLaZbotS
2016-10-04 09:14:39 +08:00
Phil Ringnalda
81e623a5b4 Backed out 5 changesets (bug 1305801) for ASan gtest bustage
Backed out changeset 0c95d5dec6d9 (bug 1305801)
Backed out changeset bca0e706dbc5 (bug 1305801)
Backed out changeset def8da367beb (bug 1305801)
Backed out changeset 56ceae52d847 (bug 1305801)
Backed out changeset 14457cc4c325 (bug 1305801)
2016-10-03 22:14:49 -07:00
Dimi Lee
daec409fa0 Bug 1305801 - Part 5: Support SafeBrowsing v4 partial update. r=gcp
MozReview-Commit-ID: 7OEWLaZbotS
2016-10-04 09:14:39 +08:00
Henry Chang
176430c017 Bug 1254763 - Part 1: Use per-provider directory for V4 databases. r=dimi,gcp
MozReview-Commit-ID: KZGWIcKAQyW
2016-09-02 12:00:00 +08:00
Thomas Nguyen
29f9371e3b Bug 1201716 - Missing status check in SafeBrowsing::Merge causes SafeBrowsing malfunction. r=francois
MozReview-Commit-ID: CtF4Gczkoa1
2016-08-24 17:15:13 +08:00
Henry Chang
a677ac7afb Bug 1284204 - Parse SafeBrowsing V4 updates to TableUpdateV4. r=francois.
MozReview-Commit-ID: 88AEIbosxKl
2016-08-12 11:55:48 +08:00
dimi
ac0dea5510 Bug 1254766 - Stop caching Safe Browsing completions to disk. r=gcp
MozReview-Commit-ID: 8Qnc8yymgDL
2016-08-11 08:17:39 +08:00
Nicholas Nethercote
9f712249f8 Bug 1276724 - Make two url-classifier allocations fallible. r=gcp.
This addresses two crashes in the top #75 on 47.0.1.
2016-07-29 19:34:20 +10:00
Ralph Giles
3d546266d0 Bug 1275744 - Reference MOZ_LOG in toolkit comments. r=erahm
NSPR_LOG_MODULES is deprecated.

MozReview-Commit-ID: 2iZFe60Uxvi
2016-05-26 11:14:47 -07:00
Eric Rahm
b5eaad35ff Bug 1270126 - Avoid out of memory in safebrowsing::ByteSliceWrite. r=gcp
Switch over to using a single fallible array in ByteSliceWrite. This allows us
to only use 2 transient arrays 1/4 the size of the input array rather than 5
transient arrays.
2016-05-05 17:37:27 -07:00