Date: Friday, November 10, 2006 @ 14:24:33
Author: csaba
Path: /cvsroot/carob/libmysequoia
Modified: src/Utils.cpp (1.43 -> 1.44) test/TestMySQLAPI.cpp (1.45 ->
1.46) test/TestMySQLAPI.hpp (1.21 -> 1.22)
Do not use sprintf, use snprintf instead! Fixes for LMS-31
-----------------------+
src/Utils.cpp | 2 -
test/TestMySQLAPI.cpp | 55 ++++++++++++++++++++++++++++++++++++++++++++++++
test/TestMySQLAPI.hpp | 2 +
3 files changed, 58 insertions(+), 1 deletion(-)
Index: libmysequoia/src/Utils.cpp
diff -u libmysequoia/src/Utils.cpp:1.43 libmysequoia/src/Utils.cpp:1.44
--- libmysequoia/src/Utils.cpp:1.43 Fri Oct 20 20:40:52 2006
+++ libmysequoia/src/Utils.cpp Fri Nov 10 14:24:33 2006
@@ -697,7 +697,7 @@
int len;
if (field->decimals >= 31)
{
- len = sprintf((char *)bind->buffer, "%-*.*g",
(int)bind->buffer_length, (int)min(14, FLT_DIG), f);
+ len = snprintf((char *)bind->buffer, bind->buffer_length, "%-*.*g",
(int)bind->buffer_length, (int)min(14, FLT_DIG), f);
if (len > 0 && (unsigned)len <= bind->buffer_length)
{
char *c = strchr((char *)bind->buffer, ' ');
Index: libmysequoia/test/TestMySQLAPI.cpp
diff -u libmysequoia/test/TestMySQLAPI.cpp:1.45
libmysequoia/test/TestMySQLAPI.cpp:1.46
--- libmysequoia/test/TestMySQLAPI.cpp:1.45 Fri Nov 3 14:52:30 2006
+++ libmysequoia/test/TestMySQLAPI.cpp Fri Nov 10 14:24:33 2006
@@ -1162,3 +1162,58 @@
// free the result set
mysql_free_result(res);
}
+
+void TestMySQLAPI::bug_lms_31_test(void)
+{
+ MYSQL_STMT *stmt;
+ MYSQL_RES *stmt_metadata;
+ MYSQL_BIND outbind[2];
+ MYSQL_FIELD *stmt_field_list;
+ long stmt_field_count;
+ my_bool is_true = true;
+ int i;
+ char *query = "select * from t1";
+
+ CPPUNIT_ASSERT(mysql_real_connect(mysql, HOST, USER1, PASSWD1, DB1, 0, 0, 0)
!= 0);
+ mysql_query(mysql, "drop table t1");
+ CPPUNIT_ASSERT(mysql_query(mysql, "create table t1 (i int, f float)") == 0);
+ CPPUNIT_ASSERT(mysql_query(mysql, "insert into t1 values (0, 0.0),(1,
1.1),(2, 2.2)") == 0);
+
+ CPPUNIT_ASSERT((stmt = mysql_stmt_init(mysql)) != 0);
+ CPPUNIT_ASSERT(mysql_stmt_prepare(stmt, query, strlen(query)) == 0);
+ CPPUNIT_ASSERT(mysql_stmt_execute(stmt) == 0);
+
+ CPPUNIT_ASSERT(mysql_stmt_attr_set(stmt, STMT_ATTR_UPDATE_MAX_LENGTH,
&is_true) == 0);
+ CPPUNIT_ASSERT(mysql_stmt_store_result(stmt) == 0);
+
+ CPPUNIT_ASSERT(stmt_metadata = mysql_stmt_result_metadata(stmt));
+ CPPUNIT_ASSERT(stmt_field_list = mysql_fetch_fields(stmt_metadata));
+ CPPUNIT_ASSERT(stmt_field_count = mysql_num_fields(stmt_metadata));
+
+ memset(outbind, 0, sizeof(outbind));
+ for (i= 0; i < stmt_field_count; ++i)
+ {
+ outbind[i].buffer_type= MYSQL_TYPE_STRING;
+ outbind[i].buffer_length= stmt_field_list[i].max_length + 1;
+ outbind[i].buffer= malloc(outbind[i].buffer_length);
+ }
+ CPPUNIT_ASSERT(mysql_stmt_bind_result(stmt, outbind) == 0);
+
+ CPPUNIT_ASSERT(mysql_stmt_fetch(stmt) == 0);
+ CPPUNIT_ASSERT(memcmp(outbind[0].buffer, "0", 2) == 0);
+ CPPUNIT_ASSERT(memcmp(outbind[1].buffer, "0", 2) == 0);
+ CPPUNIT_ASSERT(mysql_stmt_fetch(stmt) == 0);
+ CPPUNIT_ASSERT(memcmp(outbind[0].buffer, "1", 2) == 0);
+ CPPUNIT_ASSERT(memcmp(outbind[1].buffer, "1.1", 4) == 0);
+ CPPUNIT_ASSERT(mysql_stmt_fetch(stmt) == 0);
+ CPPUNIT_ASSERT(memcmp(outbind[0].buffer, "2", 2) == 0);
+ CPPUNIT_ASSERT(memcmp(outbind[1].buffer, "2.2", 4) == 0);
+
+ for (i= 0; i < stmt_field_count; ++i)
+ free(outbind[i].buffer);
+
+ CPPUNIT_ASSERT(mysql_stmt_close(stmt) == 0);
+
+ // free the result set
+ mysql_free_result(stmt_metadata);
+}
Index: libmysequoia/test/TestMySQLAPI.hpp
diff -u libmysequoia/test/TestMySQLAPI.hpp:1.21
libmysequoia/test/TestMySQLAPI.hpp:1.22
--- libmysequoia/test/TestMySQLAPI.hpp:1.21 Fri Nov 3 14:52:30 2006
+++ libmysequoia/test/TestMySQLAPI.hpp Fri Nov 10 14:24:33 2006
@@ -68,6 +68,7 @@
CPPUNIT_TEST (bug_lms_27_test);
CPPUNIT_TEST (bug_lms_28_test);
CPPUNIT_TEST (bug_lms_29_test);
+ CPPUNIT_TEST (bug_lms_31_test);
CPPUNIT_TEST_SUITE_END ();
public:
@@ -113,6 +114,7 @@
void bug_lms_27_test(void);
void bug_lms_28_test(void);
void bug_lms_29_test(void);
+ void bug_lms_31_test(void);
private:
MYSQL *mysql;
};
_______________________________________________
Carob-commits mailing list
[email protected]
https://forge.continuent.org/mailman/listinfo/carob-commits