From 87ef5b7c2e6f5dc6d738a955c95a5366eb0cb7a2 Mon Sep 17 00:00:00 2001 From: Norbert Podhorszki Date: Wed, 4 Oct 2017 07:59:33 -0400 Subject: [PATCH] fix bpls -dD when start index is already out of bound --- utils/bpls/bpls.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/utils/bpls/bpls.c b/utils/bpls/bpls.c index 64c5d114a..3a9c4d151 100644 --- a/utils/bpls/bpls.c +++ b/utils/bpls/bpls.c @@ -1447,7 +1447,7 @@ int readVarBlock(ADIOS_FILE *fp, ADIOS_VARINFO *vi, const char * name, int block tidx = 1; } - + int out_of_bound = 0; for (j=0; jndim; j++) { if (istart[j+tidx] < 0) // negative index means last-|index| st = vi->blockinfo[blockid].count[j]+istart[j+tidx]; @@ -1458,8 +1458,12 @@ int readVarBlock(ADIOS_FILE *fp, ADIOS_VARINFO *vi, const char * name, int block else ct = icount[j+tidx]; - if (ct > vi->blockinfo[blockid].count[j] - st) + if (st > vi->blockinfo[blockid].count[j]) { + out_of_bound = 1; + } + else if (ct > vi->blockinfo[blockid].count[j] - st) { ct = vi->blockinfo[blockid].count[j] - st; + } if (verbose>2) printf(" j=%d, st=%" PRIu64 " ct=%" PRIu64 "\n", j, st, ct); @@ -1477,6 +1481,9 @@ int readVarBlock(ADIOS_FILE *fp, ADIOS_VARINFO *vi, const char * name, int block print_slice_info(vi->ndim, vi->blockinfo[blockid].count, false, vi->nsteps, start_t, count_t); + if (out_of_bound) + return 0; + maxreadn = MAX_BUFFERSIZE/elemsize; if (nelems < maxreadn) maxreadn = nelems;