Bug#597190: gda2-mysql: I can't use semicolons in querys (ej: INSERT into gamusino (id,text) VALUES (10,'; ; ; '); )

Carlos Terrón cterron at alienvault.com
Fri Sep 17 13:24:06 UTC 2010


Package: gda2-mysql
Version: 1.2.4-1.2
Severity: grave
Justification: renders package unusable


I was using the gda-mysql providor for libgad2. I was trying to insert in a field 
text some text with semicolons ej:

CREATE TABLE gamusino (id INT,texto TEXT);
INSERT INTO gamusino (1,';;;;;');

with the  C code at the end of the report. When the program execute
the line:
command = gda_command_new ("INSERT INTO gamusino (id,texto) VALUES (1,';;;')",
		GDA_COMMAND_TYPE_SQL,GDA_COMMAND_OPTION_STOP_ON_ERRORS);
	assert(command != NULL);
	rc = gda_connection_execute_non_query(conn,command,NULL)

There is an error. If I use the query log option of MySQL (in my.cnf I activated the log with general_log_file        = /var/log/mysql/mysql.log and  general_log             = 1 )

I can see that the query is bad:


100917 15:07:07	  910 Connect	root at localhost on snort
		  910 Query	CREATE TEMPORARY TABLE  gamusino (id INT,texto TEXT)
		  910 Query	INSERT INTO gamusino (id,texto) VALUES (1,'HOLA')
		  910 Query	INSERT INTO gamusino (id,texto) VALUES (1,'

If you look at the last line, the query is incorrect. I think that the problems resides in the gda-mysql-provider.c , in the function  process_sql_commands, because it splits the SQL command without considering that the ";" is a legal char in a string



#include <stdio.h>
#include <stdlib.h>
#include <glib.h>
#include <libgda/libgda.h>
#include <assert.h>
#define DSN "PORT=3306;USER=root;PASSWORD=XXXXX;DATABASE=snort;HOST=127.0.0.1"
void test_bug (void){
	GdaClient *client;
	GdaConnection *conn;
	GdaCommand *command;
	int rc;
	client = gda_client_new ();
	conn = gda_client_open_connection_from_string (client,
		"MySQL",DSN ,0);
	assert(conn != NULL);
	command = gda_command_new("CREATE TEMPORARY TABLE  gamusino (id INT,texto TEXT)",
				GDA_COMMAND_TYPE_SQL,GDA_COMMAND_OPTION_STOP_ON_ERRORS);
	assert(command != NULL);
	rc = gda_connection_execute_non_query(conn,command,NULL);
	assert (rc!=-1);
	gda_command_free (command);
	command = gda_command_new ("INSERT INTO gamusino (id,texto) VALUES (1,'HOLA')",
		GDA_COMMAND_TYPE_SQL,GDA_COMMAND_OPTION_STOP_ON_ERRORS);
	assert(command != NULL);
	rc = gda_connection_execute_non_query(conn,command,NULL);
	assert (rc!=-1);
	gda_command_free (command);
	command = gda_command_new ("INSERT INTO gamusino (id,texto) VALUES (1,';;;')",
		GDA_COMMAND_TYPE_SQL,GDA_COMMAND_OPTION_STOP_ON_ERRORS);
	assert(command != NULL);
	rc = gda_connection_execute_non_query(conn,command,NULL);
	if (rc==-1){
		GList *errors = gda_error_list_copy (gda_connection_get_errors (conn));
		int i;
   for (i = 0; i < g_list_length(errors); i++)
   {
     GdaError *error = (GdaError *) g_list_nth_data (errors, i);

     g_message ("ERROR %lu: %s", gda_error_get_number (error), gda_error_get_description (error));
   }
   gda_error_list_free (errors);
 }
	assert (rc!=-1);

	gda_client_close_all_connections (client);
	g_object_unref(G_OBJECT(client));
}

int main(int argc,char **argv){
	gda_init("BugGDA","1.0",argc,argv);
	test_bug();
}


-- System Information:
Debian Release: 5.0.5
 APT prefers stable
 APT policy: (500, 'stable')
Architecture: amd64 (x86_64)

Kernel: Linux 2.6.31.6 (SMP w/1 CPU core)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/bash

Versions of packages gda2-mysql depends on:
ii  libc6               2.7-18lenny4         GNU C Library: Shared libraries
ii  libct4              0.82-4               libraries for connecting to MS SQL
ii  libgda2-3           1.2.4-1.2            GNOME Data Access library for GNOM
ii  libglib2.0-0        2.16.6-3             The GLib library of C routines
ii  libmysqlclient15off 5.0.51a-24+lenny4    MySQL database client library
ii  libxml2             2.6.32.dfsg-5+lenny1 GNOME XML library
ii  libxslt1.1          1.1.24-2             XSLT processing library - runtime 

gda2-mysql recommends no packages.

gda2-mysql suggests no packages.

-- no debconf information





More information about the pkg-gnome-maintainers mailing list