]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/cats/sqlite.c
Split messages line by line before sending it to syslog() fix #3325
[bacula/bacula] / bacula / src / cats / sqlite.c
index 2ca68f06893077505b3eb743302941a3b6bd8429..a859777ff755c028125a695b54feea19a698366a 100644 (file)
@@ -302,28 +302,14 @@ void B_DB_SQLITE::db_escape_string(JCR *jcr, char *snew, char *old, int len)
  */
 char *B_DB_SQLITE::db_escape_object(JCR *jcr, char *old, int len)
 {
-   char *n, *o;
+   int l;
+   int max = len*2;           /* TODO: too big, should be *4/3 */
+
+   esc_obj = check_pool_memory_size(esc_obj, max);
+   l = bin_to_base64(esc_obj, max, old, len, true);
+   esc_obj[l] = 0;
+   ASSERT(l < max);    /* TODO: add check for l */
 
-   n = esc_obj = check_pool_memory_size(esc_obj, len*2+1);
-   o = old;
-   while (len--) {
-      switch (*o) {
-      case '\'':
-         *n++ = '\'';
-         *n++ = '\'';
-         o++;
-         break;
-      case 0:
-         *n++ = '\\';
-         *n++ = 0;
-         o++;
-         break;
-      default:
-         *n++ = *o++;
-         break;
-      }
-   }
-   *n = 0;
    return esc_obj;
 }
 
@@ -332,6 +318,7 @@ char *B_DB_SQLITE::db_escape_object(JCR *jcr, char *old, int len)
  *
  * TODO: need to be implemented (escape \0)
  */
+
 void B_DB_SQLITE::db_unescape_object(JCR *jcr, char *from, int32_t expected_len,
                                      POOLMEM **dest, int32_t *dest_len)
 {
@@ -341,8 +328,8 @@ void B_DB_SQLITE::db_unescape_object(JCR *jcr, char *from, int32_t expected_len,
       return;
    }
    *dest = check_pool_memory_size(*dest, expected_len+1);
+   base64_to_bin(*dest, expected_len+1, from, strlen(from));
    *dest_len = expected_len;
-   memcpy(*dest, from, expected_len);
    (*dest)[expected_len]=0;
 }