Subject: bug#3605: Crash in ns_index_color (nsterm.m:1305)

From: David Reitter <[email-masked]>
Date: Thu, 23 Jul 2009 16:16:26 +0100

On Jul 23, 2009, at 3:46 PM, Adrian Robert wrote:
>
> If you could please retest this against the latest branch or trunk,  
> I've checked in some robustness improvement to the indexed color  
> stuff that may clear this up.

Further to that, I don't think your change is as safe as it could be.
Below is what I did in Aquamacs:master:  I'm returning an actual color  
in case the index is invalid, rather than nil.
Is ns_lookup_indexed_color() generally expected to return nil if  
something goes wrong?  It's cleaner than returning something random,  
but it'll still lead to an error if unchecked.

- D

<<<<<<< HEAD:src/nsterm.m

   /* for some reason, idx is 0 for undefined colors.
      Also, this function is called with very high indices at times
      (XXX: debug this.) */
   if (idx > 0 && idx < color_table->size
       && ![color_table->empty_indices containsObject: [NSNumber  
numberWithUnsignedInt: idx]])
     {
       /* fprintf(stderr, "lookup color %d\n", idx); */
       return color_table->colors[idx];
     }
   /* fprintf(stderr, "DISCARDING lookup color %d\n", idx); */
   return [NSColor orangeColor];  // mark undefined color
=======
   if (idx < 1 || idx >= color_table->avail)
     return nil;
   return color_table->colors[idx];
 >>>>>>> emacs23.1:src/nsterm.m