Commit b70bb2fc3c9164d28ea0ef2dcceed6bccea6cc8a

Authored by perry.werneck@gmail.com
1 parent 12e3bf67

Corrigindo segfault na impressão quando a tabela de cores está errada

Showing 2 changed files with 19 additions and 7 deletions   Show diff stats
src/pw3270/print.c
... ... @@ -395,6 +395,9 @@ static gchar * enum_to_string(GType type, guint enum_value)
395 395 {
396 396 gchar *ptr = get_string_from_config("print","colors","");
397 397  
  398 + trace("info->color=%p",info->color);
  399 + trace("colorlist=%p",ptr);
  400 +
398 401 if(*ptr)
399 402 v3270_set_color_table(info->color,ptr);
400 403 else
... ...
src/pw3270/v3270/widget.c
... ... @@ -1296,15 +1296,24 @@ void v3270_set_color_table(GdkRGBA *table, const gchar *colors)
1296 1296  
1297 1297 g_warning("Color table has %d elements; should be %d.",cnt,V3270_COLOR_COUNT);
1298 1298  
1299   - for(f=0;f < cnt;f++)
1300   - gdk_rgba_parse(table+f,clr[f]);
1301   -
1302   - for(f=cnt; f < V3270_COLOR_COUNT;f++)
1303   - gdk_rgba_parse(table+f,clr[cnt-1]);
  1299 + if(cnt < V3270_COLOR_COUNT)
  1300 + {
  1301 + // Less than the required
  1302 + for(f=0;f < cnt;f++)
  1303 + gdk_rgba_parse(table+f,clr[f]);
1304 1304  
1305   - clr[V3270_COLOR_OIA_BACKGROUND] = clr[0];
1306   - clr[V3270_COLOR_SELECTED_BG] = clr[0];
  1305 + for(f=cnt; f < V3270_COLOR_COUNT;f++)
  1306 + gdk_rgba_parse(table+f,clr[cnt-1]);
1307 1307  
  1308 + clr[V3270_COLOR_OIA_BACKGROUND] = clr[0];
  1309 + clr[V3270_COLOR_SELECTED_BG] = clr[0];
  1310 + }
  1311 + else
  1312 + {
  1313 + // More than required
  1314 + for(f=0;f < V3270_COLOR_COUNT;f++)
  1315 + gdk_rgba_parse(table+f,clr[f]);
  1316 + }
1308 1317 }
1309 1318  
1310 1319 g_strfreev(clr);
... ...