]> git.sur5r.net Git - bacula/bacula/commitdiff
Fix seg fault in SQlite driver
authorKern Sibbald <kern@sibbald.com>
Sat, 30 Jan 2010 07:48:11 +0000 (08:48 +0100)
committerKern Sibbald <kern@sibbald.com>
Sat, 30 Jan 2010 07:49:30 +0000 (08:49 +0100)
bacula/src/cats/sqlite.c
bacula/src/lib/bsys.c

index f98539ed38374970d58895d9b0f3265aa4cb7505..d18b24e891bec6d83fe726e6ae1f7138aa4509e6 100644 (file)
@@ -446,6 +446,13 @@ void my_sqlite_field_seek(B_DB *mdb, int field)
       mdb->fields = (SQL_FIELD **)malloc(sizeof(SQL_FIELD) * mdb->ncolumn);
       for (i=0; i < sql_num_fields(mdb); i++) {
          mdb->fields[i] = (SQL_FIELD *)malloc(sizeof(SQL_FIELD));
+         if (mdb->result[i] == NULL) {
+            mdb->fields_defined = false;
+            free(mdb->fields);
+            mdb->fields = NULL;
+            mdb->field = 0;
+            return;
+         }
          mdb->fields[i]->name = mdb->result[i];
          mdb->fields[i]->length = cstrlen(mdb->fields[i]->name);
          mdb->fields[i]->max_length = mdb->fields[i]->length;
index fe86199db3353d50c0c6bca831316ee8bc1d7eb0..f5d7bc6a7a648d59340cd93ed443b66cf7dba99b 100644 (file)
@@ -160,6 +160,9 @@ int cstrlen(const char *str)
 {
    uint8_t *p = (uint8_t *)str;
    int len = 0;
+   if (str == NULL) {
+      return 0;
+   }
    while (*p) {
       if ((*p & 0xC0) != 0xC0) {
          p++;