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
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to