[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#642055: daisy-player: reports "corrupt daisy structure" and aborts while reading valid book



Hello,

Jason White, le Mon 19 Sep 2011 18:38:37 +1000, a écrit :
> @@ -395,6 +395,7 @@ void get_attributes (char *p)
>          break;
>        strncpy (name, p, 250);
>        p = name;
> +      begin = p;

Mmm, no begin should really stay at the beginning of the buffer. But if
you need that to get things done I guess it's because p - begin becomes
greater than 250?  That rather means that we have to increase the size
of the buffer, as is already done in ebook-speaker. Could you try the
attached patch?

Samuel
diff --git a/daisy-player.c b/daisy-player.c
index 2ba53aa..6c3c8f8 100644
--- a/daisy-player.c
+++ b/daisy-player.c
@@ -47,7 +47,7 @@ int smil_file_fd, discinfo_fp, discinfo = 00, multi = 0, displaying = 0;
 int playing, just_this_item;
 int bytes_read, current_page_number, total_pages;
 char label[255], clip_str_b[15], clip_str_e[15], bookmark_title[100];
-char tag[255], element[255], search_str[30], tmp_ncx[255], tmp_wav[255];
+char tag[255], element[1024], search_str[30], tmp_ncx[255], tmp_wav[255];
 char daisy_version[25];
 pid_t player_pid, daisy_player_pid;
 double clip_begin, clip_end;
@@ -339,7 +339,7 @@ void html_entities_to_utf8 (char *s)
 
 void get_attributes (char *p)
 {
-   char name[255], *value, *begin;
+   char name[1024], *value, *begin;
    int break2;
 
    *attribute.class = 0;
@@ -367,7 +367,7 @@ void get_attributes (char *p)
    {
       if (*p == '>' || *p == '?')
          return;
-      if (p - begin > 250)
+      if (p - begin > 1000)
       {
          *p = 0;
          return;
@@ -384,7 +384,7 @@ void get_attributes (char *p)
             break2 = 1;
             break;
          } // if
-         if (p - begin > 250)
+	 if (p - begin > 1000)
          {
             *p = 0;
             break2 = 1;
@@ -393,7 +393,7 @@ void get_attributes (char *p)
       } // while
       if (break2)
         break;
-      strncpy (name, p, 250);
+      strncpy (name, p, 1000);
       p = name;
       while (! isspace (*p) && *p != '=')
       {
@@ -402,7 +402,7 @@ void get_attributes (char *p)
             break2 = 1;
             break;
          } // if
-         if (p - begin > 250)
+	 if (p - begin > 1000)
          {
             *p = 0;
             break2 = 1;
@@ -420,7 +420,7 @@ void get_attributes (char *p)
             break2 = 1;
             break; 
          } // if
-         if (p - begin > 250)
+	 if (p - begin > 1000)
          {
             *p = 0;
             break2 = 1;
@@ -436,7 +436,7 @@ void get_attributes (char *p)
       p = value;
       while (*p != '"' && *p != '>' && *p != '?')
       {
-         if (p - begin > 250)
+	 if (p - begin > 1000)
          {
             *p = 0;
             break2 = 1;

Reply to: