Skip to content

Commit 55f2530

Browse files
author
Aakash Arayambeth
committed
terminate strings and free allocations
1 parent 3bce474 commit 55f2530

File tree

3 files changed

+78
-1
lines changed

3 files changed

+78
-1
lines changed

Diff for: db/views_serial.c

+19
Original file line numberDiff line numberDiff line change
@@ -2065,6 +2065,25 @@ hash_view_t *hash_deserialize_view(const char *view_str, struct errstat *err)
20652065
}
20662066

20672067
view = create_hash_view(viewname, tablename, num_keys, keynames, num_partitions, dbnames, err);
2068+
2069+
if (dbnames) {
2070+
for(int i=0;i<num_partitions;i++){
2071+
if (dbnames[i]) {
2072+
free(dbnames[i]);
2073+
}
2074+
}
2075+
free(dbnames);
2076+
}
2077+
2078+
2079+
if (keynames) {
2080+
for(int i=0;i<num_keys;i++){
2081+
if (keynames[i]) {
2082+
free(keynames[i]);
2083+
}
2084+
}
2085+
free(keynames);
2086+
}
20682087
if (rootVal) {
20692088
cson_value_free(rootVal);
20702089
}

Diff for: schemachange/sc_struct.c

+22
Original file line numberDiff line numberDiff line change
@@ -94,13 +94,33 @@ void free_schema_change_type(struct schema_change_type *s)
9494
Pthread_cond_destroy(&s->condStart);
9595
Pthread_mutex_destroy(&s->mtxStart);
9696

97+
/*if (s->partition.type == PARTITION_ADD_COL_HASH) {
98+
char *str = s->partition.u.hash.viewname;
99+
if (str) free(str);
100+
for(int i=0;i<s->partition.u.hash.num_columns;i++){
101+
str = s->partition.u.hash.columns[i];
102+
if (str) free(str);
103+
}
104+
if (s->partition.u.hash.columns) {
105+
free(s->partition.u.hash.columns);
106+
}
107+
for(int i=0;i<s->partition.u.hash.num_partitions;i++){
108+
str = s->partition.u.hash.partitions[i];
109+
if (str) free(str);
110+
}
111+
if (s->partition.u.hash.partitions) {
112+
free(s->partition.u.hash.partitions);
113+
}
114+
}*/
115+
97116
if (s->sb && s->must_close_sb) {
98117
close_appsock(s->sb);
99118
s->sb = NULL;
100119
}
101120
if (!s->onstack) {
102121
free(s);
103122
}
123+
104124
}
105125

106126
static size_t dests_field_packed_size(struct schema_change_type *s)
@@ -1072,6 +1092,7 @@ void *buf_get_schemachange_v2(struct schema_change_type *s,
10721092
s->partition.u.hash.columns[i] = (char *)malloc(sizeof(char) * len + 1);
10731093
p_buf = (uint8_t *)buf_no_net_get(s->partition.u.hash.columns[i], len,
10741094
p_buf, p_buf_end);
1095+
s->partition.u.hash.columns[i][len]='\0';
10751096
logmsg(LOGMSG_USER, "GOT COLUMN AS %s \n", s->partition.u.hash.columns[i]);
10761097
}
10771098
p_buf =
@@ -1083,6 +1104,7 @@ void *buf_get_schemachange_v2(struct schema_change_type *s,
10831104
s->partition.u.hash.partitions[i] = (char *)malloc(sizeof(char) * len + 1);
10841105
p_buf = (uint8_t *)buf_no_net_get(s->partition.u.hash.partitions[i], len, p_buf,
10851106
p_buf_end);
1107+
s->partition.u.hash.partitions[i][len]='\0';
10861108
logmsg(LOGMSG_USER, "GOT PARTITION AS %s \n", s->partition.u.hash.partitions[i]);
10871109
}
10881110
break;

Diff for: sqlite/src/comdb2build.c

+37-1
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ int createRemotePartitions(struct comdb2_partition *partition);
5353
int createLocalAliases(struct comdb2_partition *partition);
5454
void deleteRemoteTables(const char *, char **, int startIdx);
5555
void deleteRemotePartitions(const char *, char **, int startIdx);
56+
void free_comdb2_partition(struct comdb2_partition *partition);
5657
/******************* Utility ****************************/
5758

5859
static inline int setError(Parse *pParse, int rc, const char *msg)
@@ -599,6 +600,8 @@ static int comdb2SqlSchemaChange_int(OpFunc *f, int usedb)
599600
f->errorMsg = "Transactional DDL Error: Overlapping Tables";
600601
else if (f->rc)
601602
f->errorMsg = "Transactional DDL Error: Internal Errors";
603+
604+
free_comdb2_partition(&(s->partition));
602605
return f->rc;
603606
}
604607

@@ -7794,6 +7797,39 @@ static int comdb2GetHashPartitionParams(Parse* pParse, IdList *pColumn, IdList *
77947797
return 0;
77957798
}
77967799

7800+
void free_comdb2_partition(struct comdb2_partition *partition) {
7801+
if (!partition) return;
7802+
switch (partition->type) {
7803+
case PARTITION_ADD_COL_HASH: {
7804+
if (partition->u.hash.viewname) {
7805+
free(partition->u.hash.viewname);
7806+
}
7807+
if (partition->u.hash.columns) {
7808+
for(int i=0;i<partition->u.hash.num_columns;i++){
7809+
if (partition->u.hash.columns[i]) {
7810+
free(partition->u.hash.columns[i]);
7811+
}
7812+
}
7813+
free(partition->u.hash.columns);
7814+
}
7815+
if (partition->u.hash.partitions) {
7816+
for(int i=0;i<partition->u.hash.num_partitions;i++){
7817+
if (partition->u.hash.partitions[i]) {
7818+
free(partition->u.hash.partitions[i]);
7819+
}
7820+
}
7821+
free(partition->u.hash.partitions);
7822+
}
7823+
7824+
if (partition->u.hash.createQuery) {
7825+
free(partition->u.hash.createQuery);
7826+
}
7827+
break;
7828+
}
7829+
default:
7830+
break;
7831+
}
7832+
}
77977833
struct comdb2_partition *_get_comdb2_hash_partition(Parse *pParse, IdList *pColumn, IdList *pPartitions, int remove) {
77987834
struct comdb2_partition *partition;
77997835
partition = _get_partition(pParse, 0);
@@ -7865,7 +7901,7 @@ void comdb2CreateHashPartition(Parse *pParse, IdList *pColumn, IdList *pPartitio
78657901
GET_CLNT;
78667902
if (clnt && clnt->sql) {
78677903
logmsg(LOGMSG_USER, "The sql query is %s\n", clnt->sql);
7868-
partition->u.hash.createQuery = clnt->sql;
7904+
partition->u.hash.createQuery = strdup(clnt->sql);
78697905
} else {
78707906
if (!clnt) {
78717907
logmsg(LOGMSG_USER, "The client object is not available\n");

0 commit comments

Comments
 (0)