Skip to content

Commit f0f8601

Browse files
committed
fix double free memory
1 parent 21135b2 commit f0f8601

File tree

1 file changed

+19
-17
lines changed

1 file changed

+19
-17
lines changed

src/gstype_php.i

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -274,22 +274,22 @@ static void throwGSException(griddb::GSException* exception) {
274274
(dataContainerInfo = zend_hash_get_current_data_ex(arrContainerInfo, &posContainerInfo)) != NULL;
275275
zend_hash_move_forward_ex(arrContainerInfo, &posContainerInfo)) {
276276
if (zend_hash_get_current_key_ex(arrContainerInfo, &key, &index, &posContainerInfo) != HASH_KEY_IS_STRING) {
277-
freeArgContainerInfo($2);
277+
freeArgContainerInfo(&$2);
278278
SWIG_exception(E_ERROR, "Expected string as input for key");
279279
}
280280

281281
name = ZSTR_VAL(key);
282282
if (strcmp(name, "name") == 0) {
283283
if (Z_TYPE_P(dataContainerInfo) != IS_STRING) {
284-
freeArgContainerInfo($2);
284+
freeArgContainerInfo(&$2);
285285
SWIG_exception(E_ERROR, "Expected string as input"
286286
" for name property");
287287
}
288288
$1 = Z_STRVAL_P(dataContainerInfo);
289289
} else if (strcmp(name, "columnInfoArray") == 0) {
290290
// Input valid is array only
291291
if (Z_TYPE_P(dataContainerInfo) != IS_ARRAY) {
292-
freeArgContainerInfo($2);
292+
freeArgContainerInfo(&$2);
293293
SWIG_exception(E_ERROR, "Expected array as input"
294294
" for columnInfo property");
295295
}
@@ -298,7 +298,7 @@ static void throwGSException(griddb::GSException* exception) {
298298
int sizeOfColumnInfoArray = zend_hash_num_elements(arrColumnInfoArray);
299299
$3 = sizeOfColumnInfoArray;
300300
if ($3 == 0) {
301-
freeArgContainerInfo($2);
301+
freeArgContainerInfo(&$2);
302302
SWIG_exception(E_ERROR, "Expected not empty array");
303303
}
304304
$2 = new GSColumnInfo[$3];
@@ -313,15 +313,15 @@ static void throwGSException(griddb::GSException* exception) {
313313
(dataColumnInfoArray = zend_hash_get_current_data_ex(arrColumnInfoArray, &posColumnInfoArray)) != NULL;
314314
zend_hash_move_forward_ex(arrColumnInfoArray, &posColumnInfoArray)) {
315315
if (Z_TYPE_P(dataColumnInfoArray) != IS_ARRAY) {
316-
freeArgContainerInfo($2);
316+
freeArgContainerInfo(&$2);
317317
SWIG_exception(E_ERROR, "Expected array property as"
318318
" ColumnInfo element");
319319
}
320320
// Fetch the hash table from a zval
321321
arrColumnInfo = Z_ARRVAL_P(dataColumnInfoArray);
322322
int sizeOfColumnInfo = zend_hash_num_elements(arrColumnInfo);
323323
if (sizeOfColumnInfo != 2) {
324-
freeArgContainerInfo($2);
324+
freeArgContainerInfo(&$2);
325325
SWIG_exception(E_ERROR, "Expected two elements for"
326326
" columnInfo property");
327327
}
@@ -331,7 +331,7 @@ static void throwGSException(griddb::GSException* exception) {
331331
&posColumnInfo);
332332
if (Z_TYPE_P(columnName = zend_hash_get_current_data_ex(
333333
arrColumnInfo, &posColumnInfo)) != IS_STRING) {
334-
freeArgContainerInfo($2);
334+
freeArgContainerInfo(&$2);
335335
SWIG_exception(E_ERROR, "Expected string as column name");
336336
}
337337

@@ -341,7 +341,7 @@ static void throwGSException(griddb::GSException* exception) {
341341
zend_hash_move_forward_ex(arrColumnInfo, &posColumnInfo);
342342
if (Z_TYPE_P(columnType = zend_hash_get_current_data_ex(
343343
arrColumnInfo, &posColumnInfo)) != IS_LONG) {
344-
freeArgContainerInfo($2);
344+
freeArgContainerInfo(&$2);
345345
SWIG_exception(E_ERROR, "Expected an integer as"
346346
" column type");
347347
}
@@ -350,14 +350,14 @@ static void throwGSException(griddb::GSException* exception) {
350350
}
351351
} else if (strcmp(name, "type") == 0) {
352352
if (Z_TYPE_P(dataContainerInfo) != IS_LONG) {
353-
freeArgContainerInfo($2);
353+
freeArgContainerInfo(&$2);
354354
SWIG_exception(E_ERROR, "Expected integer as input"
355355
" for type property");
356356
}
357357
$4 = Z_LVAL_P(dataContainerInfo);
358358
} else if (strcmp(name, "rowKey") == 0) {
359359
if (!checkTypeIsLongBool(dataContainerInfo)) {
360-
freeArgContainerInfo($2);
360+
freeArgContainerInfo(&$2);
361361
SWIG_exception(E_ERROR, "Expected boolean as input"
362362
" for rowKey property");
363363
}
@@ -368,13 +368,13 @@ static void throwGSException(griddb::GSException* exception) {
368368
$descriptor(griddb::ExpirationInfo*),
369369
0 | 0);
370370
if (!SWIG_IsOK(res)) {
371-
freeArgContainerInfo($2);
371+
freeArgContainerInfo(&$2);
372372
SWIG_exception(E_ERROR, "Expected expiration object"
373373
" as input for expiration property");
374374
}
375375
$6 = (griddb::ExpirationInfo *) expiration;
376376
} else {
377-
freeArgContainerInfo($2);
377+
freeArgContainerInfo(&$2);
378378
SWIG_exception(E_ERROR, "Invalid Property");
379379
}
380380
}
@@ -387,14 +387,15 @@ static void throwGSException(griddb::GSException* exception) {
387387
(const GSChar* name, const GSColumnInfo* props,
388388
int propsCount, GSContainerType type, bool row_key,
389389
griddb::ExpirationInfo* expiration) {
390-
freeArgContainerInfo($2);
390+
freeArgContainerInfo(&$2);
391391
}
392392

393393
%fragment("freeArgContainerInfo", "header") {
394394
//SWIG_exception does not include freearg, so we need this function
395-
static void freeArgContainerInfo(const GSColumnInfo* props) {
396-
if (props) {
397-
delete[] props;
395+
static void freeArgContainerInfo(GSColumnInfo** props) {
396+
if (*props) {
397+
delete[] *props;
398+
*props = NULL;
398399
}
399400
}
400401
}
@@ -1169,6 +1170,7 @@ static void convertToAgrregationResultZvalObj(griddb::AggregationResult* aggResu
11691170
static void freeArgColumnInfoList(ColumnInfoList* infoList) {
11701171
if (infoList->columnInfo) {
11711172
delete[](infoList->columnInfo);
1173+
infoList->columnInfo = NULL;
11721174
}
11731175
}
11741176
}
@@ -1263,4 +1265,4 @@ static bool checkTypeIsLongBool(zval* value) {
12631265
SWIG_exception(E_ERROR, "Expected long value as input");
12641266
}
12651267
$1 = Z_LVAL_P(&$input);
1266-
}
1268+
}

0 commit comments

Comments
 (0)