浏览代码

db_postgres: reset row_buf for each row

- DB1 interface was reusing local buffer to convert returned rows,
  resulting in misusage of values from previous rows for null values
- reported by Jan Klepal
Daniel-Constantin Mierla 15 年之前
父节点
当前提交
63c724b42d
共有 1 个文件被更改,包括 2 次插入1 次删除
  1. 2 1
      modules/db_postgres/km_res.c

+ 2 - 1
modules/db_postgres/km_res.c

@@ -220,7 +220,6 @@ int db_postgres_convert_rows(const db1_con_t* _h, db1_res_t* _r)
 		return -1;
 		return -1;
 	}
 	}
 	LM_DBG("allocate for %d columns %d bytes in row buffer at %p\n", RES_COL_N(_r), len, row_buf);
 	LM_DBG("allocate for %d columns %d bytes in row buffer at %p\n", RES_COL_N(_r), len, row_buf);
-	memset(row_buf, 0, len);
 
 
 	if (db_allocate_rows(_r) < 0) {
 	if (db_allocate_rows(_r) < 0) {
 		LM_ERR("could not allocate rows\n");
 		LM_ERR("could not allocate rows\n");
@@ -230,6 +229,8 @@ int db_postgres_convert_rows(const db1_con_t* _h, db1_res_t* _r)
 	}
 	}
 
 
 	for(row = RES_LAST_ROW(_r); row < (RES_LAST_ROW(_r) + RES_ROW_N(_r)); row++) {
 	for(row = RES_LAST_ROW(_r); row < (RES_LAST_ROW(_r) + RES_ROW_N(_r)); row++) {
+		/* reset row buf content */
+		memset(row_buf, 0, len);
 		for(col = 0; col < RES_COL_N(_r); col++) {
 		for(col = 0; col < RES_COL_N(_r); col++) {
 			/*
 			/*
 			 * The row data pointer returned by PQgetvalue points to storage
 			 * The row data pointer returned by PQgetvalue points to storage