[med-svn] [aghermann] 25/34: libmetrics/swu, mc: prevent improper memory reads in corner cases

andrei zavada hmmr-guest at moszumanska.debian.org
Sat Nov 23 00:46:49 UTC 2013


This is an automated email from the git hooks/post-receive script.

hmmr-guest pushed a commit to branch master
in repository aghermann.

commit c87b716ee8a7498d759f82710d114e339d48a893
Author: Andrei Zavada <hmmr at ra>
Date:   Sat Nov 16 01:47:56 2013 +0200

    libmetrics/swu,mc: prevent improper memory reads in corner cases
---
 upstream/src/libmetrics/mc.hh  | 7 ++++++-
 upstream/src/libmetrics/swu.cc | 2 +-
 2 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/upstream/src/libmetrics/mc.hh b/upstream/src/libmetrics/mc.hh
index 5af7d54..2b30dea 100644
--- a/upstream/src/libmetrics/mc.hh
+++ b/upstream/src/libmetrics/mc.hh
@@ -221,7 +221,12 @@ do_sssu_reduction( const valarray<T>& S,
                 ss (lpages),
                 su (lpages);
         for ( size_t p = 0; p < lpages; ++p ) {
-                auto range = slice (p * inc_samples, scope_samples, 1);
+                if ( unlikely (p * inc_samples + scope_samples-1 >= due_filtered.size()) ) {
+                        // printf ("WTF? %zu >= %zu\n", p * inc_samples + scope_samples-1, due_filtered.size());
+                        // happened at pagesize 4; just make it stop
+                        break;
+                }
+                auto range = slice (p * inc_samples, scope_samples-1, 1);
                 su[p] =
                         (valarray<T> {due_filtered[range]} * valarray<T> {se_filtered[range]})
                         .sum() / scope_samples;
diff --git a/upstream/src/libmetrics/swu.cc b/upstream/src/libmetrics/swu.cc
index 63e40fe..f9d23e9 100644
--- a/upstream/src/libmetrics/swu.cc
+++ b/upstream/src/libmetrics/swu.cc
@@ -97,7 +97,7 @@ go_compute()
                 for ( auto i = a; i < z; ++i ) {
                         double q = 0.;
                         auto j = i;
-                        while ( dS[j] > 0 ) {
+                        while ( j < dS.size() && dS[j] > 0 ) {
                                 q += dS[j];
                                 if ( not (j < z) )
                                         break;

-- 
Alioth's /git/debian-med/git-commit-notice on /srv/git.debian.org/git/debian-med/aghermann.git



More information about the debian-med-commit mailing list