Changeset: 65f043cf39e6 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=65f043cf39e6
Modified Files:
monetdb5/modules/mosaic/mosaic_prefix.c
Branch: mosaic
Log Message:
Avoid segfaults
diffs (110 lines):
diff --git a/monetdb5/modules/mosaic/mosaic_prefix.c
b/monetdb5/modules/mosaic/mosaic_prefix.c
--- a/monetdb5/modules/mosaic/mosaic_prefix.c
+++ b/monetdb5/modules/mosaic/mosaic_prefix.c
@@ -93,6 +93,8 @@ MOSlayout_prefix(Client cntxt, MOStask t
unsigned char mask = *dst++;
unsigned char val = *dst++;
bits = (int)(val & (~mask));
+ bytes = wordaligned(MosaicBlkSize + 2 * sizeof(unsigned
char),int);
+ bytes += wordaligned(getBitVectorSize(cnt,bits) *
sizeof(int), int);
}
break;
case 2:
@@ -100,6 +102,8 @@ MOSlayout_prefix(Client cntxt, MOStask t
unsigned short mask = *dst++;
unsigned short val = *dst++;
bits = (int)(val & (~mask));
+ bytes = wordaligned(MosaicBlkSize + 2 * sizeof(unsigned
short),int);
+ bytes += wordaligned(getBitVectorSize(cnt,bits) *
sizeof(int), int);
}
break;
case 4:
@@ -107,6 +111,8 @@ MOSlayout_prefix(Client cntxt, MOStask t
unsigned int mask = *dst++;
unsigned int val = *dst++;
bits = (int)(val & (~mask));
+ bytes = wordaligned(MosaicBlkSize + 2 * sizeof(unsigned
int),int);
+ bytes += wordaligned(getBitVectorSize(cnt,bits) *
sizeof(int), int);
}
break;
case 8:
@@ -114,9 +120,10 @@ MOSlayout_prefix(Client cntxt, MOStask t
ulng mask = *dst++;
ulng val = *dst++;
bits = (int)(val & (~mask));
+ bytes = wordaligned(MosaicBlkSize + 2 *
sizeof(ulng),int);
+ bytes += wordaligned(getBitVectorSize(cnt,bits) *
sizeof(int), int);
}
}
- bytes = sizeof(int) * ((MOSgetCnt(task->blk) * bits)/32 +
(((MOSgetCnt(task->blk) * bits) %32) != 0));
output = wordaligned(bytes, int);
BUNappend(binput, &input, FALSE);
BUNappend(boutput, &output, FALSE);
@@ -664,7 +671,6 @@ MOSdecompress_prefix(Client cntxt, MOSta
case 1:
{ unsigned char *dst = (unsigned char*)
MOScodevector(task);
unsigned char mask = *dst++, val = *dst++, v;
- unsigned char *w = ((unsigned char*) task->src) +
task->start;
base = (BitVector)((char*)MOScodevector(task) +
wordaligned(2 * sizeof(unsigned char),int));
bits =(int) (val & (~mask));
@@ -673,7 +679,7 @@ MOSdecompress_prefix(Client cntxt, MOSta
for(i = 0; i < lim; i++){
v = val | decompress(base,i,bits);
hdr->checksum2.sumsht += v;
- *w++ = v;
+ ((unsigned char*) task->src)[i] = v;
}
task->src += i * sizeof(unsigned char);
}
@@ -681,7 +687,6 @@ MOSdecompress_prefix(Client cntxt, MOSta
case 2:
{ unsigned short *dst = (unsigned short*)
MOScodevector(task);
unsigned short mask = *dst++, val = *dst++, v;
- unsigned short *w = ((unsigned short*) task->src) +
task->start;
base = (BitVector)((char*)MOScodevector(task) +
wordaligned(2 * sizeof(unsigned short),int));
bits = (int) (val & (~mask));
@@ -696,7 +701,7 @@ MOSdecompress_prefix(Client cntxt, MOSta
i, val, decompress(base,i,bits), v);
#endif
hdr->checksum2.sumsht += v;
- *w++ = v;
+ ((unsigned short*) task->src)[i] = v;
}
task->src += i * sizeof(unsigned short);
}
@@ -704,7 +709,6 @@ MOSdecompress_prefix(Client cntxt, MOSta
case 4:
{ unsigned int *dst = (unsigned int*)
MOScodevector(task);
unsigned int mask = *dst++, val = *dst++, v;
- unsigned int *w = ((unsigned int*) task->src) +
task->start;
base = (BitVector)(MOScodevector(task) + wordaligned(2
* sizeof(unsigned int),int));
bits = (int)(val & (~mask));
@@ -719,7 +723,7 @@ MOSdecompress_prefix(Client cntxt, MOSta
i, val, decompress(base,i,bits), v);
#endif
hdr->checksum2.sumint += v;
- *w++ = v;
+ ((unsigned int*) task->src)[i] = v;
}
task->src += i * sizeof(unsigned int);
}
@@ -727,7 +731,6 @@ MOSdecompress_prefix(Client cntxt, MOSta
case 8:
{ ulng *dst = (ulng*) MOScodevector(task);
ulng mask = *dst++, val = *dst++, v;
- ulng *w = ((ulng*) task->src) + task->start;
base = (BitVector)((char*)MOScodevector(task) +
wordaligned(2 * sizeof(ulng),int));
bits = (int)(val & (~mask));
@@ -736,7 +739,7 @@ MOSdecompress_prefix(Client cntxt, MOSta
for(i = 0; i < lim; i++){
v= val | decompress(base,i,bits);
hdr->checksum2.sumlng += v;
- *w++ = v;
+ ((ulng*) task->src)[i] = v;
}
task->src += i * sizeof(ulng);
}
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list