if (num_params == 0)
PenCount = 8;
- else if (num_params == 1 && params[0].value.number <= 1024)
- PenCount = (int)params[0].value.number;
+ else if (num_params == 1)
+ {
+ if (params[0].value.number < 1 || params[0].value.number > MAX_PENS)
+ {
+ fprintf(stderr,
+ "DEBUG: HP-GL/2 \'NP\' command with invalid number of "
+ "pens (%d)!\n", (int)params[0].value.number);
+ PenCount = 8;
+ }
+ else
+ PenCount = (int)params[0].value.number;
+ }
else
fprintf(stderr,
"DEBUG: HP-GL/2 \'NP\' command with invalid number of "
if (num_params == 0)
{
- for (i = 0; i <= PenCount; i ++)
+ for (i = 0; i < PenCount; i ++)
if (i < 8)
{
Pens[i].rgb[0] = standard_colors[i][0];
}
else if (num_params == 1 || num_params == 4)
{
- i = (int)params[0].value.number;
+ i = (int)params[0].value.number - 1;
+
+ if (i < 0 || i >= PenCount)
+ {
+ fprintf(stderr,
+ "DEBUG: HP-GL/2 \'PC\' command with invalid pen (%d)!\n", i + 1);
+ return;
+ }
if (num_params == 1)
{
if (num_params == 2)
{
- pen = (int)params[1].value.number;
+ pen = (int)params[1].value.number - 1;
+
+ if (pen < 0 || pen >= PenCount)
+ {
+ fprintf(stderr,
+ "DEBUG: HP-GL/2 \'PW\' command with invalid pen (%d)!\n",
+ pen + 1);
+ return;
+ }
Pens[pen].width = w;
* Set width for all pens...
*/
- for (pen = 0; pen <= PenCount; pen ++)
+ for (pen = 0; pen < PenCount; pen ++)
Pens[pen].width = w;
if (PageDirty)
param_t *params) /* I - Parameters */
{
if (num_params == 0)
- PenNumber = 1;
- else if (params[0].value.number <= PenCount)
- PenNumber = (int)params[0].value.number;
- else
+ PenNumber = 0;
+ else if (num_params > 1)
fprintf(stderr,
- "DEBUG: HP-GL/2 \'SP\' command with invalid number or value "
- "of parameters (%d, %d)!\n", num_params,
+ "DEBUG: HP-GL/2 \'SP\' command with invalid number of parameters "
+ "(%d)!\n", num_params);
+ else if (params[0].value.number <= 0 || params[0].value.number >= PenCount)
+ fprintf(stderr, "DEBUG: HP-GL/2 \'SP\' command with invalid pen (%d)!\n",
(int)params[0].value.number);
+ else
+ PenNumber = (int)params[0].value.number - 1;
if (PageDirty)
printf("%.3f %.3f %.3f %.2f SP\n", Pens[PenNumber].rgb[0],