display problem when using http protocol

Post any defects you find in the released or beta versions of the ImageMagick software here. Include the ImageMagick version, OS, and any command-line required to reproduce the problem. Got a patch for a bug? Post it here.
Post Reply
Hubbitus
Posts: 66
Joined: 2010-05-04T10:50:21-07:00
Authentication code: 8675308
Location: Russia, Saint-Petersburg

display problem when using http protocol

Post by Hubbitus »

Please look at this bugreport from our user: https://bugzilla.redhat.com/show_bug.cgi?id=742812
User avatar
magick
Site Admin
Posts: 11064
Joined: 2003-05-31T11:32:55-07:00

Re: display problem when using http protocol

Post by magick »

Can we get a stack trace? We downloaded / installed ImageMagick-6.6.5.10-19.fc15.x86_64.rpm and displayed / converted the 800px-Americanindiansmapcensusbureau.gif image without complaint.
Hubbitus
Posts: 66
Joined: 2010-05-04T10:50:21-07:00
Authentication code: 8675308
Location: Russia, Saint-Petersburg

Re: display problem when using http protocol

Post by Hubbitus »

I request it.

I can't see this error in console, but can reproduce what display exit after 1 or 2 seconds showing this image. Exit status 0, and it do not related http protocol, local copy behave on same way.
Hubbitus
Posts: 66
Joined: 2010-05-04T10:50:21-07:00
Authentication code: 8675308
Location: Russia, Saint-Petersburg

Re: display problem when using http protocol

Post by Hubbitus »

Please look at bugzilla - backtrace provided.
User avatar
magick
Site Admin
Posts: 11064
Joined: 2003-05-31T11:32:55-07:00

Re: display problem when using http protocol

Post by magick »

Thanks for the problem report. We can reproduce the problem you posted and have a patch:

Code: Select all

*** magick~/string.c    2011-10-22 10:34:27.463418895 -0400
--- magick/string.c     2011-10-22 10:26:55.329340982 -0400
***************
*** 167,173 ****
    if (string_info->length != 0)
      {
        string_info->datum=(unsigned char *) NULL;
!       if (~string_info->length >= MaxTextExtent)
          string_info->datum=(unsigned char *) AcquireQuantumMemory(
            string_info->length+MaxTextExtent,sizeof(*string_info->datum));
        if (string_info->datum == (unsigned char *) NULL)
--- 167,173 ----
    if (string_info->length != 0)
      {
        string_info->datum=(unsigned char *) NULL;
!       if (~string_info->length >= (MaxTextExtent-1))
          string_info->datum=(unsigned char *) AcquireQuantumMemory(
            string_info->length+MaxTextExtent,sizeof(*string_info->datum));
        if (string_info->datum == (unsigned char *) NULL)
***************
*** 223,233 ****
    if (~length < MaxTextExtent)
      ThrowFatalException(ResourceLimitFatalError,"UnableToAcquireString");
    *destination=(char *) ResizeQuantumMemory(*destination,length+MaxTextExtent,
!     sizeof(*destination));
    if (*destination == (char *) NULL)
      ThrowFatalException(ResourceLimitFatalError,"UnableToAcquireString");
    if (length != 0)
!     (void) memcpy(*destination,source,length*sizeof(*destination));
    (*destination)[length]='\0';
    return(*destination);
  }
--- 223,233 ----
    if (~length < MaxTextExtent)
      ThrowFatalException(ResourceLimitFatalError,"UnableToAcquireString");
    *destination=(char *) ResizeQuantumMemory(*destination,length+MaxTextExtent,
!     sizeof(**destination));
    if (*destination == (char *) NULL)
      ThrowFatalException(ResourceLimitFatalError,"UnableToAcquireString");
    if (length != 0)
!     (void) memcpy(*destination,source,length*sizeof(**destination));
    (*destination)[length]='\0';
    return(*destination);
  }
***************
*** 442,448 ****
    if (~length < MaxTextExtent)
      ThrowFatalException(ResourceLimitFatalError,"UnableToConcatenateString");
    *destination=(char *) ResizeQuantumMemory(*destination,length+MaxTextExtent,
!     sizeof(*destination));
    if (*destination == (char *) NULL)
      ThrowFatalException(ResourceLimitFatalError,"UnableToConcatenateString");
    if (source_length != 0)
--- 442,448 ----
    if (~length < MaxTextExtent)
      ThrowFatalException(ResourceLimitFatalError,"UnableToConcatenateString");
    *destination=(char *) ResizeQuantumMemory(*destination,length+MaxTextExtent,
!     sizeof(**destination));
    if (*destination == (char *) NULL)
      ThrowFatalException(ResourceLimitFatalError,"UnableToConcatenateString");
    if (source_length != 0)
***************
*** 550,556 ****
      }
    length=(size_t) offset;
    string=(char *) NULL;
!   if (~length > MaxTextExtent)
      string=(char *) AcquireQuantumMemory(length+MaxTextExtent,sizeof(*string));
    if (string == (char *) NULL)
      {
--- 550,556 ----
      }
    length=(size_t) offset;
    string=(char *) NULL;
!   if (~length >= (MaxTextExtent-1))
      string=(char *) AcquireQuantumMemory(length+MaxTextExtent,sizeof(*string));
    if (string == (char *) NULL)
      {
***************
*** 688,693 ****
--- 688,695 ----
    register size_t
      n;
  
+   if (source == (const char *) NULL)
+     return(0);
    p=source;
    q=destination;
    for (n=length; n > 4; n-=4)
***************
*** 872,878 ****
          length++;
        }
    destination=(char *) NULL;
!   if (~length >= MaxTextExtent)
      destination=(char *) AcquireQuantumMemory(length+MaxTextExtent,
        sizeof(*destination));
    if (destination == (char *) NULL)
--- 874,880 ----
          length++;
        }
    destination=(char *) NULL;
!   if (~length >= (MaxTextExtent-1))
      destination=(char *) AcquireQuantumMemory(length+MaxTextExtent,
        sizeof(*destination));
    if (destination == (char *) NULL)
***************
*** 1816,1822 ****
      return((StringInfo *) NULL);
    split_info=AcquireStringInfo(offset);
    SetStringInfo(split_info,string_info);
!   (void) memcpy(string_info->datum,string_info->datum+offset,
      string_info->length-offset+MaxTextExtent);
    SetStringInfoLength(string_info,string_info->length-offset);
    return(split_info);
--- 1818,1824 ----
      return((StringInfo *) NULL);
    split_info=AcquireStringInfo(offset);
    SetStringInfo(split_info,string_info);
!   (void) memmove(string_info->datum,string_info->datum+offset,
      string_info->length-offset+MaxTextExtent);
    SetStringInfoLength(string_info,string_info->length-offset);
    return(split_info);
***************
*** 1854,1860 ****
  
    string=(char *) NULL;
    length=string_info->length;
!   if (~length >= MaxTextExtent)
      string=(char *) AcquireQuantumMemory(length+MaxTextExtent,sizeof(*string));
    if (string == (char *) NULL)
      return((char *) NULL);
--- 1856,1862 ----
  
    string=(char *) NULL;
    length=string_info->length;
!   if (~length >= (MaxTextExtent-1))
      string=(char *) AcquireQuantumMemory(length+MaxTextExtent,sizeof(*string));
    if (string == (char *) NULL)
      return((char *) NULL);
***************
*** 1913,1918 ****
--- 1915,1922 ----
    {
      while (isspace((int) ((unsigned char) *p)) != 0)
        p++;
+     if (*p == '\0')
+       break;
      (*argc)++;
      if (*p == '"')
        for (p++; (*p != '"') && (*p != '\0'); p++) ;
***************
*** 1943,1950 ****
      else
        if (*q == '\'')
          {
            for (q++; (*q != '\'') && (*q != '\0'); q++) ;
-           q++;
          }
        else
          while ((isspace((int) ((unsigned char) *q)) == 0) && (*q != '\0'))
--- 1947,1954 ----
      else
        if (*q == '\'')
          {
+           p++;
            for (q++; (*q != '\'') && (*q != '\0'); q++) ;
          }
        else
          while ((isspace((int) ((unsigned char) *q)) == 0) && (*q != '\0'))
***************
*** 2175,2181 ****
            if ((*q == '\r') || (*q == '\n'))
              break;
          textlist[i]=(char *) AcquireQuantumMemory((size_t) (q-p)+MaxTextExtent,
!           sizeof(*textlist));
          if (textlist[i] == (char *) NULL)
            ThrowFatalException(ResourceLimitFatalError,"UnableToConvertText");
          (void) memcpy(textlist[i],p,(size_t) (q-p));
--- 2179,2185 ----
            if ((*q == '\r') || (*q == '\n'))
              break;
          textlist[i]=(char *) AcquireQuantumMemory((size_t) (q-p)+MaxTextExtent,
!           sizeof(**textlist));
          if (textlist[i] == (char *) NULL)
            ThrowFatalException(ResourceLimitFatalError,"UnableToConvertText");
          (void) memcpy(textlist[i],p,(size_t) (q-p));
***************
*** 2208,2214 ****
        for (i=0; i < (ssize_t) lines; i++)
        {
          textlist[i]=(char *) AcquireQuantumMemory(2UL*MaxTextExtent,
!           sizeof(*textlist));
          if (textlist[i] == (char *) NULL)
            ThrowFatalException(ResourceLimitFatalError,"UnableToConvertText");
          (void) FormatMagickString(textlist[i],MaxTextExtent,"0x%08lx: ",
--- 2212,2218 ----
        for (i=0; i < (ssize_t) lines; i++)
        {
          textlist[i]=(char *) AcquireQuantumMemory(2UL*MaxTextExtent,
!           sizeof(**textlist));
          if (textlist[i] == (char *) NULL)
            ThrowFatalException(ResourceLimitFatalError,"UnableToConvertText");
          (void) FormatMagickString(textlist[i],MaxTextExtent,"0x%08lx: ",
***************
*** 2326,2332 ****
    if (q > p)
      if ((*q == '\'') || (*q == '"'))
        q--;
!   (void) memcpy(message,p,(size_t) (q-p+1));
    message[q-p+1]='\0';
    for (p=message; *p != '\0'; p++)
      if (*p == '\n')
--- 2330,2336 ----
    if (q > p)
      if ((*q == '\'') || (*q == '"'))
        q--;
!   (void) memmove(message,p,(size_t) (q-p+1));
    message[q-p+1]='\0';
    for (p=message; *p != '\0'; p++)
      if (*p == '\n')
Hubbitus
Posts: 66
Joined: 2010-05-04T10:50:21-07:00
Authentication code: 8675308
Location: Russia, Saint-Petersburg

Re: display problem when using http protocol

Post by Hubbitus »

Thank you very much. I'll hope it will be included in new version. And I'll just buil it.
Post Reply