Add check for NULL input and regression test
authorCΓ©dric Villemain <cedric@2ndquadrant.fr>
Fri, 12 Oct 2012 12:16:37 +0000 (14:16 +0200)
committerCΓ©dric Villemain <cedric@2ndquadrant.fr>
Thu, 5 Dec 2013 00:22:55 +0000 (01:22 +0100)
pgfincore.c
sql/pgfincore.ext.sql
sql/pgfincore.sql

index 3bad6870528d516043d26e6f9516b3bbde27ddc4..9969a4cdcafd6234f01667131991b02918ba0396 100644 (file)
@@ -642,7 +642,7 @@ pgfadvise_loader(PG_FUNCTION_ARGS)
        int       segmentNumber = PG_GETARG_INT32(2);
        bool      willneed      = PG_GETARG_BOOL(3);
        bool      dontneed      = PG_GETARG_BOOL(4);
-       VarBit    *databit              = PG_GETARG_VARBIT_P(5);
+       VarBit    *databit;
 
        /* our structure use to return values */
        pgfloaderStruct *pgfloader;
@@ -662,6 +662,11 @@ pgfadvise_loader(PG_FUNCTION_ARGS)
        Datum           values[PGFADVISE_LOADER_COLS];
        bool            nulls[PGFADVISE_LOADER_COLS];
 
+       if (PG_ARGISNULL(5))
+               elog(ERROR, "pgfadvise_loader: databit argument shouldn't be NULL");
+       else
+               databit         = PG_GETARG_VARBIT_P(5);
+
        /* initialize nulls array to build the tuple */
        memset(nulls, 0, sizeof(nulls));
 
index 59cba7d071aff1fcb4c94e5d205005c1f6f06727..b45ad3b2b1435c3565a0a40cbe791bf1e8e7241b 100644 (file)
@@ -23,6 +23,9 @@ select true from pgfadvise_loader('test', 0, true, true, B'1010');
 select true from pgfadvise_loader('test', 0, true, false, B'1010');
 select true from pgfadvise_loader('test', 0, false, true, B'1010');
 select true from pgfadvise_loader('test', 0, false, false, B'1010');
+-- must not fail on NULL or empty
+select true from pgfadvise_loader('test', 0, false, false, NULL);
+select true from pgfadvise_loader('test', 0, false, false, B'');
 
 --
 -- test pgfincore
index 28e3d288718679843f8e78afb81844cd6d5af8e8..3f60bd92c871c3b74b48772d464a72f981543997 100644 (file)
@@ -27,6 +27,9 @@ select true from pgfadvise_loader('test', 0, true, true, B'1010');
 select true from pgfadvise_loader('test', 0, true, false, B'1010');
 select true from pgfadvise_loader('test', 0, false, true, B'1010');
 select true from pgfadvise_loader('test', 0, false, false, B'1010');
+-- must not fail on NULL or empty
+select true from pgfadvise_loader('test', 0, false, false, NULL);
+select true from pgfadvise_loader('test', 0, false, false, B'');
 
 --
 -- test pgfincore