Changeset: ce8d014bc7d4 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=ce8d014bc7d4
Modified Files:
        gdk/gdk_imprints.c
        gdk/gdk_unique.c
Branch: default
Log Message:

Added some error checking.


diffs (90 lines):

diff --git a/gdk/gdk_imprints.c b/gdk/gdk_imprints.c
--- a/gdk/gdk_imprints.c
+++ b/gdk/gdk_imprints.c
@@ -563,18 +563,42 @@ BATimprints(BAT *b) {
                if (imprints == NULL) {
                        GDKerror("#BATimprints: memory allocation error.\n");
                        MT_lock_unset(&GDKimprintsLock(abs(b->batCacheid)),
-                       "BATimprints");
+                                     "BATimprints");
                        return NULL;
                }
 
 #define SMP_SIZE 2048
                s = BATsample(b, SMP_SIZE);
+               if (s == NULL) {
+                       MT_lock_unset(&GDKimprintsLock(abs(b->batCacheid)),
+                                     "BATimprints");
+                       GDKfree(imprints);
+                       return NULL;
+               }
                smp = BATsubunique(b, s);
                BBPunfix(s->batCacheid);
+               if (smp == NULL) {
+                       MT_lock_unset(&GDKimprintsLock(abs(b->batCacheid)),
+                                     "BATimprints");
+                       GDKfree(imprints);
+                       return NULL;
+               }
                s = BATproject(smp,b);
                BBPunfix(smp->batCacheid);
+               if (s == NULL) {
+                       MT_lock_unset(&GDKimprintsLock(abs(b->batCacheid)),
+                                     "BATimprints");
+                       GDKfree(imprints);
+                       return NULL;
+               }
                s->tkey=1; /* we know is unique on tail now */
-               BATsubsort(&smp,NULL,NULL,s,NULL,NULL,0,0);
+               if (BATsubsort(&smp,NULL,NULL,s,NULL,NULL,0,0) == GDK_FAIL) {
+                       MT_lock_unset(&GDKimprintsLock(abs(b->batCacheid)),
+                                     "BATimprints");
+                       BBPunfix(s->batCacheid);
+                       GDKfree(imprints);
+                       return NULL;
+               }
                BBPunfix(s->batCacheid);
                /* smp now is ordered and unique on tail */
                assert(smp->tkey && smp->tsorted);
@@ -592,7 +616,7 @@ BATimprints(BAT *b) {
                        GDKfree(imprints);
                        BBPunfix(smp->batCacheid);
                        MT_lock_unset(&GDKimprintsLock(abs(b->batCacheid)),
-                       "BATimprints");
+                                     "BATimprints");
                        return NULL;
                }
                sprintf(imprints->bins->filename, "%s.bins", nme);
@@ -601,7 +625,7 @@ BATimprints(BAT *b) {
                        GDKfree(imprints->bins);
                        GDKfree(imprints);
                        MT_lock_unset(&GDKimprintsLock(abs(b->batCacheid)),
-                                       "BATimprints");
+                                     "BATimprints");
                        return NULL;
                }
 
diff --git a/gdk/gdk_unique.c b/gdk/gdk_unique.c
--- a/gdk/gdk_unique.c
+++ b/gdk/gdk_unique.c
@@ -97,9 +97,17 @@ BATsubunique(BAT *b, BAT *s)
        }
 
        if (cand && BATcount(b) > 16 * BATcount(s)) {
-               BAT *nb = BATproject(s, b); 
-               BAT *r = BATsubunique(nb, 0);
-               BAT *nr = BATproject(r, s);
+               BAT *nb, *r, *nr;
+
+               nb = BATproject(s, b);
+               if (nb == NULL)
+                       return NULL;
+               r = BATsubunique(nb, NULL);
+               if (r == NULL) {
+                       BBPunfix(nb->batCacheid);
+                       return NULL;
+               }
+               nr = BATproject(r, s);
                BBPunfix(nb->batCacheid);
                BBPunfix(r->batCacheid);
                return nr;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to