The following issues were found
test/src/net/conn_mock.c
4 issues
Line: 72
Column: 2
CWE codes:
327
Suggestion:
Use a more secure technique for acquiring random values
static int
mock_init(Connection *conn)
{
srand(time(0));
return 0;
}
static ConnOps mock_ops = {
.size = sizeof(MockConnection),
Reported by FlawFinder.
Line: 22
Column: 2
CWE codes:
119
120
Suggestion:
Perform bounds checking, use functions that limit length, or ensure that the size is larger than the maximum possible length
typedef struct MockConnection
{
Connection conn;
char recv_buf[MOCK_MAX_BUF_SIZE];
int recv_buf_offset;
int recv_buf_len;
} MockConnection;
static int
Reported by FlawFinder.
Line: 63
Column: 2
CWE codes:
120
Suggestion:
Make sure destination can always hold the source data
{
bytes_to_read = rand() % (max + 1);
}
memcpy(buf, mock->recv_buf + mock->recv_buf_offset, bytes_to_read);
mock->recv_buf_offset += bytes_to_read;
return bytes_to_read;
}
Reported by FlawFinder.
Line: 93
Column: 2
CWE codes:
120
Suggestion:
Make sure destination can always hold the source data
if (buf_len > MOCK_MAX_BUF_SIZE)
return -1;
memcpy(mock->recv_buf, buf, buf_len);
mock->recv_buf_len = buf_len;
return mock->recv_buf_len;
}
extern void _conn_mock_init(void);
Reported by FlawFinder.
test/sql/custom_type.sql
4 issues
Line: 5
Column: 1
-- Please see the included NOTICE for copyright information and
-- LICENSE-APACHE for a copy of the license.
\c :TEST_DBNAME :ROLE_SUPERUSER
CREATE OR REPLACE FUNCTION customtype_in(cstring) RETURNS customtype AS
'timestamptz_in'
LANGUAGE internal IMMUTABLE STRICT;
CREATE OR REPLACE FUNCTION customtype_out(customtype) RETURNS cstring AS
Reported by SQLint.
Line: 65
Column: 1
JOIN = scalargtjoinsel
);
\c :TEST_DBNAME :ROLE_DEFAULT_PERM_USER
CREATE TABLE customtype_test(time_custom customtype, val int);
\set ON_ERROR_STOP 0
-- Using interval type for chunk time interval should fail with custom time type
SELECT create_hypertable('customtype_test', 'time_custom', chunk_time_interval => INTERVAL '1 day', create_default_indexes=>false);
Reported by SQLint.
Line: 68
Column: 1
\c :TEST_DBNAME :ROLE_DEFAULT_PERM_USER
CREATE TABLE customtype_test(time_custom customtype, val int);
\set ON_ERROR_STOP 0
-- Using interval type for chunk time interval should fail with custom time type
SELECT create_hypertable('customtype_test', 'time_custom', chunk_time_interval => INTERVAL '1 day', create_default_indexes=>false);
\set ON_ERROR_STOP 1
SELECT create_hypertable('customtype_test', 'time_custom', chunk_time_interval => 10e6::bigint, create_default_indexes=>false);
Reported by SQLint.
Line: 71
Column: 1
\set ON_ERROR_STOP 0
-- Using interval type for chunk time interval should fail with custom time type
SELECT create_hypertable('customtype_test', 'time_custom', chunk_time_interval => INTERVAL '1 day', create_default_indexes=>false);
\set ON_ERROR_STOP 1
SELECT create_hypertable('customtype_test', 'time_custom', chunk_time_interval => 10e6::bigint, create_default_indexes=>false);
INSERT INTO customtype_test VALUES ('2001-01-01 01:02:03'::customtype, 10);
INSERT INTO customtype_test VALUES ('2001-01-01 01:02:03'::customtype, 10);
Reported by SQLint.
test/sql/util.sql
4 issues
Line: 5
Column: 1
-- Please see the included NOTICE for copyright information and
-- LICENSE-APACHE for a copy of the license.
\set ECHO errors
\set VERBOSITY default
DO $$
BEGIN
ASSERT( _timescaledb_internal.get_partition_for_key(''::text) = 669664877 );
Reported by SQLint.
Line: 11
Column: 3
DO $$
BEGIN
ASSERT( _timescaledb_internal.get_partition_for_key(''::text) = 669664877 );
ASSERT( _timescaledb_internal.get_partition_for_key('dev1'::text) = 1129986420 );
ASSERT( _timescaledb_internal.get_partition_for_key('longlonglonglongpartitionkey'::text) = 1169179734);
END$$;
Reported by SQLint.
Line: 12
Column: 3
BEGIN
ASSERT( _timescaledb_internal.get_partition_for_key(''::text) = 669664877 );
ASSERT( _timescaledb_internal.get_partition_for_key('dev1'::text) = 1129986420 );
ASSERT( _timescaledb_internal.get_partition_for_key('longlonglonglongpartitionkey'::text) = 1169179734);
END$$;
Reported by SQLint.
Line: 13
Column: 1
ASSERT( _timescaledb_internal.get_partition_for_key(''::text) = 669664877 );
ASSERT( _timescaledb_internal.get_partition_for_key('dev1'::text) = 1129986420 );
ASSERT( _timescaledb_internal.get_partition_for_key('longlonglonglongpartitionkey'::text) = 1169179734);
END$$;
Reported by SQLint.
src/import/planner.c
3 issues
Line: 222
Column: 4
CWE codes:
120
Suggestion:
Make sure destination can always hold the source data
* but flat-copy the node itself to avoid damaging other trees.
*/
newaggref = makeNode(Aggref);
memcpy(newaggref, aggref, sizeof(struct Aggref));
/* For now, assume serialization is required */
mark_partial_aggref(newaggref, AGGSPLIT_INITIAL_SERIAL);
lfirst(lc) = newaggref;
Reported by FlawFinder.
Line: 913
Column: 4
CWE codes:
120
Suggestion:
Make sure destination can always hold the source data
*/
PlaceHolderVar *newphv = makeNode(PlaceHolderVar);
memcpy(newphv, phv, sizeof(PlaceHolderVar));
newphv->phexpr = (Expr *) replace_nestloop_params_mutator((Node *) phv->phexpr, root);
return (Node *) newphv;
}
/* Replace the PlaceHolderVar with a nestloop Param */
return (Node *) replace_nestloop_param_placeholdervar(root, phv);
Reported by FlawFinder.
Line: 403
Column: 7
CWE codes:
126
Suggestion:
This function is often discouraged by most C++ coding standards in favor of its safer alternatives provided since C++14. Consider using a form of this function that checks the second iterator before potentially overflowing it
while (emexpr && IsA(emexpr, RelabelType))
emexpr = ((RelabelType *) emexpr)->arg;
if (equal(emexpr, tlexpr))
return em;
}
return NULL;
}
Reported by FlawFinder.
test/sql/truncate.sql
3 issues
Line: 5
Column: 1
-- Please see the included NOTICE for copyright information and
-- LICENSE-APACHE for a copy of the license.
\o /dev/null
\ir include/insert_two_partitions.sql
\o
SELECT * FROM _timescaledb_catalog.hypertable;
SELECT * FROM _timescaledb_catalog.chunk;
Reported by SQLint.
Line: 58
Column: 1
AFTER TRUNCATE ON _timescaledb_internal._hyper_1_5_chunk
FOR EACH STATEMENT EXECUTE FUNCTION test_trigger();
\set ON_ERROR_STOP 0
TRUNCATE "two_Partitions";
-- cannot TRUNCATE ONLY a hypertable
TRUNCATE ONLY "two_Partitions" CASCADE;
\set ON_ERROR_STOP 1
Reported by SQLint.
Line: 62
Column: 1
TRUNCATE "two_Partitions";
-- cannot TRUNCATE ONLY a hypertable
TRUNCATE ONLY "two_Partitions" CASCADE;
\set ON_ERROR_STOP 1
-- create a regular table to make sure we can truncate it in the same call
CREATE TABLE truncate_normal (color int);
INSERT INTO truncate_normal VALUES (1);
SELECT * FROM truncate_normal;
Reported by SQLint.
src/chunk_constraint.c
3 issues
Line: 61
Column: 2
CWE codes:
120
Suggestion:
Make sure destination can always hold the source data
{
ChunkConstraints *copy = palloc(sizeof(ChunkConstraints));
memcpy(copy, ccs, sizeof(ChunkConstraints));
copy->constraints = palloc0(CHUNK_CONSTRAINTS_SIZE(ccs->capacity));
memcpy(copy->constraints, ccs->constraints, CHUNK_CONSTRAINTS_SIZE(ccs->num_constraints));
return copy;
}
Reported by FlawFinder.
Line: 63
Column: 2
CWE codes:
120
Suggestion:
Make sure destination can always hold the source data
memcpy(copy, ccs, sizeof(ChunkConstraints));
copy->constraints = palloc0(CHUNK_CONSTRAINTS_SIZE(ccs->capacity));
memcpy(copy->constraints, ccs->constraints, CHUNK_CONSTRAINTS_SIZE(ccs->num_constraints));
return copy;
}
static void
Reported by FlawFinder.
Line: 92
Column: 2
CWE codes:
119
120
Suggestion:
Perform bounds checking, use functions that limit length, or ensure that the size is larger than the maximum possible length
static void
chunk_constraint_choose_name(Name dst, const char *hypertable_constraint_name, int32 chunk_id)
{
char constrname[NAMEDATALEN];
CatalogSecurityContext sec_ctx;
Assert(hypertable_constraint_name != NULL);
ts_catalog_database_info_become_owner(ts_catalog_database_info_get(), &sec_ctx);
Reported by FlawFinder.
test/sql/sql_query.sql
3 issues
Line: 5
Column: 1
-- Please see the included NOTICE for copyright information and
-- LICENSE-APACHE for a copy of the license.
\o /dev/null
\ir include/insert_two_partitions.sql
\o
SELECT * FROM PUBLIC."two_Partitions";
Reported by SQLint.
Line: 13
Column: 1
EXPLAIN (verbose ON, costs off) SELECT * FROM PUBLIC."two_Partitions";
\echo "The following queries should NOT scan two_Partitions._hyper_1_1_chunk"
EXPLAIN (verbose ON, costs off) SELECT * FROM PUBLIC."two_Partitions" WHERE device_id = 'dev2';
EXPLAIN (verbose ON, costs off) SELECT * FROM PUBLIC."two_Partitions" WHERE device_id = 'dev'||'2';
EXPLAIN (verbose ON, costs off) SELECT * FROM PUBLIC."two_Partitions" WHERE 'dev'||'2' = device_id;
--test integer partition key
Reported by SQLint.
Line: 34
Column: 1
--Need to verify space partitions are currently pruned in this query
--EXPLAIN (verbose ON, costs off) SELECT * FROM "two_Partitions" WHERE device_id IN ('dev2', 'dev21');
\echo "The following shows non-aggregated queries with time desc using merge append"
EXPLAIN (verbose ON, costs off)SELECT * FROM PUBLIC."two_Partitions" ORDER BY "timeCustom" DESC NULLS LAST limit 2;
--shows that more specific indexes are used if the WHERE clauses "match", uses the series_1 index here.
EXPLAIN (verbose ON, costs off)SELECT * FROM PUBLIC."two_Partitions" WHERE series_1 IS NOT NULL ORDER BY "timeCustom" DESC NULLS LAST limit 2;
--here the "match" is implication series_1 > 1 => series_1 IS NOT NULL
Reported by SQLint.
test/sql/plan_ordered_append.sql
3 issues
Line: 13
Column: 1
-- are different across versions we need version specific output
-- here anyway.
\set TEST_BASE_NAME plan_ordered_append
SELECT format('include/%s_load.sql', :'TEST_BASE_NAME') as "TEST_LOAD_NAME",
format('include/%s_query.sql', :'TEST_BASE_NAME') as "TEST_QUERY_NAME",
format('%s/results/%s_results_optimized.out', :'TEST_OUTPUT_DIR', :'TEST_BASE_NAME') as "TEST_RESULTS_OPTIMIZED",
format('%s/results/%s_results_unoptimized.out', :'TEST_OUTPUT_DIR', :'TEST_BASE_NAME') as "TEST_RESULTS_UNOPTIMIZED"
\gset
Reported by SQLint.
Line: 35
Column: 1
\set PREFIX_NO_ANALYZE ''
\o :TEST_RESULTS_OPTIMIZED
SET timescaledb.ordered_append = 'on';
\ir :TEST_QUERY_NAME
\o
\o :TEST_RESULTS_UNOPTIMIZED
SET timescaledb.ordered_append = 'off';
\ir :TEST_QUERY_NAME
\o
Reported by SQLint.
Line: 39
Column: 1
\o
\o :TEST_RESULTS_UNOPTIMIZED
SET timescaledb.ordered_append = 'off';
\ir :TEST_QUERY_NAME
\o
:DIFF_CMD
Reported by SQLint.
src/version.c
3 issues
Line: 206
Column: 2
CWE codes:
120
uname(&os_info);
memset(info, 0, sizeof(VersionOSInfo));
strncpy(info->sysname, os_info.sysname, VERSION_INFO_LEN - 1);
strncpy(info->version, os_info.version, VERSION_INFO_LEN - 1);
strncpy(info->release, os_info.release, VERSION_INFO_LEN - 1);
info->has_pretty_version = get_pretty_version(info->pretty_version);
return true;
Reported by FlawFinder.
Line: 207
Column: 2
CWE codes:
120
memset(info, 0, sizeof(VersionOSInfo));
strncpy(info->sysname, os_info.sysname, VERSION_INFO_LEN - 1);
strncpy(info->version, os_info.version, VERSION_INFO_LEN - 1);
strncpy(info->release, os_info.release, VERSION_INFO_LEN - 1);
info->has_pretty_version = get_pretty_version(info->pretty_version);
return true;
}
Reported by FlawFinder.
Line: 208
Column: 2
CWE codes:
120
memset(info, 0, sizeof(VersionOSInfo));
strncpy(info->sysname, os_info.sysname, VERSION_INFO_LEN - 1);
strncpy(info->version, os_info.version, VERSION_INFO_LEN - 1);
strncpy(info->release, os_info.release, VERSION_INFO_LEN - 1);
info->has_pretty_version = get_pretty_version(info->pretty_version);
return true;
}
#else
Reported by FlawFinder.
src/utils.c
3 issues
Line: 533
Column: 2
CWE codes:
120
Suggestion:
Make sure destination can always hold the source data
* Also compare the aligned sizes in the assert.
*/
Assert(copy_size == MAXALIGN(tuple->t_len - tuple->t_data->t_hoff));
memcpy(struct_ptr, GETSTRUCT(tuple), copy_size);
return struct_ptr;
}
void *
Reported by FlawFinder.
Line: 801
Column: 6
CWE codes:
126
Assert(IS_INTEGER_TYPE(rettype));
if (strlen(NameStr(open_dim->fd.integer_now_func)) == 0 &&
strlen(NameStr(open_dim->fd.integer_now_func_schema)) == 0)
ereport(ERROR,
(errcode(ERRCODE_UNDEFINED_FUNCTION), (errmsg("integer_now function not set"))));
List *name = list_make2(makeString((char *) NameStr(open_dim->fd.integer_now_func_schema)),
Reported by FlawFinder.
Line: 802
Column: 3
CWE codes:
126
Assert(IS_INTEGER_TYPE(rettype));
if (strlen(NameStr(open_dim->fd.integer_now_func)) == 0 &&
strlen(NameStr(open_dim->fd.integer_now_func_schema)) == 0)
ereport(ERROR,
(errcode(ERRCODE_UNDEFINED_FUNCTION), (errmsg("integer_now function not set"))));
List *name = list_make2(makeString((char *) NameStr(open_dim->fd.integer_now_func_schema)),
makeString((char *) NameStr(open_dim->fd.integer_now_func)));
Reported by FlawFinder.