Index: filter/hpgl-attr.c =================================================================== --- filter/hpgl-attr.c (revision 8118) +++ filter/hpgl-attr.c (working copy) @@ -3,7 +3,7 @@ * * HP-GL/2 attribute processing for the Common UNIX Printing System (CUPS). * - * Copyright 2007 by Apple Inc. + * Copyright 2007-2008 by Apple Inc. * Copyright 1993-2007 by Easy Software Products. * * These coded instructions, statements, and computer programs are the @@ -214,7 +214,7 @@ "DEBUG: HP-GL/2 \'NP\' command with invalid number of " "parameters (%d)!\n", num_params); - for (i = 0; i <= PenCount; i ++) + for (i = 0; i < PenCount; i ++) Pens[i].width = PenWidth; PC_pen_color(0, NULL); @@ -232,14 +232,14 @@ int i; /* Looping var */ static float standard_colors[8][3] = /* Standard colors for first 8 pens */ { - { 1.0, 1.0, 1.0 }, /* White */ { 0.0, 0.0, 0.0 }, /* Black */ { 1.0, 0.0, 0.0 }, /* Red */ { 0.0, 1.0, 0.0 }, /* Green */ { 1.0, 1.0, 0.0 }, /* Yellow */ { 0.0, 0.0, 1.0 }, /* Blue */ { 1.0, 0.0, 1.0 }, /* Magenta */ - { 0.0, 1.0, 1.0 } /* Cyan */ + { 0.0, 1.0, 1.0 }, /* Cyan */ + { 1.0, 1.0, 1.0 } /* White */ }; Index: filter/hpgl-vector.c =================================================================== --- filter/hpgl-vector.c (revision 8118) +++ filter/hpgl-vector.c (working copy) @@ -3,7 +3,7 @@ * * HP-GL/2 vector routines for the Common UNIX Printing System (CUPS). * - * Copyright 2007 by Apple Inc. + * Copyright 2007-2008 by Apple Inc. * Copyright 1993-2007 by Easy Software Products. * * These coded instructions, statements, and computer programs are the @@ -393,13 +393,20 @@ break; case ':' : /* Select pen */ s ++; - PenNumber = (int)decode_number(&s, base_bits, 1.0); + temp = (int)decode_number(&s, base_bits, 1.0) - 1; + if (temp < 0 || temp >= PenCount) + { + fprintf(stderr, "DEBUG: Bad pen number %d in PE\n", temp + 1); + return; + } + PenNumber = temp; + #ifdef DEBUG - fprintf(stderr, "DEBUG: set pen #%d\n", PenNumber); + fprintf(stderr, "DEBUG: set pen #%d\n", PenNumber + 1); #endif /* DEBUG */ - Outputf("%% PE: set pen #%d\n", PenNumber); + Outputf("%% PE: set pen #%d\n", PenNumber + 1); if (PageDirty) printf("%.3f %.3f %.3f %.2f SP\n", Pens[PenNumber].rgb[0],