diff options
author | tpayne@chromium.org <tpayne@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-06-04 23:05:45 +0000 |
---|---|---|
committer | tpayne@chromium.org <tpayne@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-06-04 23:05:45 +0000 |
commit | 8b61135340ddd15e31f8c8715ad4a05dc129d94d (patch) | |
tree | c69980f9f27f95d1407cf0bd6b87cf7b90abd4b2 | |
parent | e0d8c4278bea8648d5441eac5970e6d75fa9f088 (diff) | |
download | chromium_src-8b61135340ddd15e31f8c8715ad4a05dc129d94d.zip chromium_src-8b61135340ddd15e31f8c8715ad4a05dc129d94d.tar.gz chromium_src-8b61135340ddd15e31f8c8715ad4a05dc129d94d.tar.bz2 |
applied upstream security patch
BUG=b/6534265
TEST=None
Review URL: https://chromiumcodereview.appspot.com/10515013
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@140415 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | third_party/qcms/README.chromium | 2 | ||||
-rw-r--r-- | third_party/qcms/google.patch | 36 | ||||
-rw-r--r-- | third_party/qcms/src/iccread.c | 2 | ||||
-rw-r--r-- | third_party/qcms/src/transform_util.c | 20 |
4 files changed, 58 insertions, 2 deletions
diff --git a/third_party/qcms/README.chromium b/third_party/qcms/README.chromium index 7043ed0..761820c 100644 --- a/third_party/qcms/README.chromium +++ b/third_party/qcms/README.chromium @@ -21,3 +21,5 @@ google.patch (https://bugzilla.mozilla.org/show_bug.cgi?id=692922) Applied upstream patch: - https://bug752254.bugzilla.mozilla.org/attachment.cgi?id=626102 +Applied upstream security patch: + - https://bugzilla.mozilla.org/show_bug.cgi?id=761014 diff --git a/third_party/qcms/google.patch b/third_party/qcms/google.patch index dae75d6..63ca8f2 100644 --- a/third_party/qcms/google.patch +++ b/third_party/qcms/google.patch @@ -696,3 +696,39 @@ index 9a6562b..ae3f628 100644 } qcms_bool qcms_supports_iccv4; +--- a/transform_util.c ++++ a/transform_util.c +@@ -214,6 +214,21 @@ float u8Fixed8Number_to_float(uint16_t x) + return x/256.; + } + ++/* The SSE2 code uses min & max which let NaNs pass through. ++ We want to try to prevent that here by ensuring that ++ gamma table is within expected values. */ ++void validate_gamma_table(float gamma_table[256]) ++{ ++ int i; ++ for (i = 0; i < 256; i++) { ++ // Note: we check that the gamma is not in range ++ // instead of out of range so that we catch NaNs ++ if (!(gamma_table[i] > 0.f && gamma_table[i] < 1.f)) { ++ gamma_table[i] = 0.f; ++ } ++ } ++} ++ + float *build_input_gamma_table(struct curveType *TRC) + { + float *gamma_table; +@@ -233,7 +248,10 @@ float *build_input_gamma_table(struct curveType *TRC) + } + } + } +- return gamma_table; ++ ++ validate_gamma_table(gamma_table); ++ ++ return gamma_table; + } + + struct matrix build_colorant_matrix(qcms_profile *p) diff --git a/third_party/qcms/src/iccread.c b/third_party/qcms/src/iccread.c index 2454924..0523846 100644 --- a/third_party/qcms/src/iccread.c +++ b/third_party/qcms/src/iccread.c @@ -266,7 +266,7 @@ qcms_bool qcms_profile_is_bogus(qcms_profile *profile) if (profile->color_space != RGB_SIGNATURE) return false; - if (profile->A2B0 || profile->B2A0) + if (qcms_supports_iccv4 && (profile->A2B0 || profile->B2A0)) return false; rX = s15Fixed16Number_to_float(profile->redColorant.X); diff --git a/third_party/qcms/src/transform_util.c b/third_party/qcms/src/transform_util.c index e8447e5..5443e9d 100644 --- a/third_party/qcms/src/transform_util.c +++ b/third_party/qcms/src/transform_util.c @@ -235,6 +235,21 @@ float u8Fixed8Number_to_float(uint16_t x) return x/256.; } +/* The SSE2 code uses min & max which let NaNs pass through. + We want to try to prevent that here by ensuring that + gamma table is within expected values. */ +void validate_gamma_table(float gamma_table[256]) +{ + int i; + for (i = 0; i < 256; i++) { + // Note: we check that the gamma is not in range + // instead of out of range so that we catch NaNs + if (!(gamma_table[i] > 0.f && gamma_table[i] < 1.f)) { + gamma_table[i] = 0.f; + } + } +} + float *build_input_gamma_table(struct curveType *TRC) { float *gamma_table; @@ -254,7 +269,10 @@ float *build_input_gamma_table(struct curveType *TRC) } } } - return gamma_table; + + validate_gamma_table(gamma_table); + + return gamma_table; } struct matrix build_colorant_matrix(qcms_profile *p) |