fixed memory overrun error

* app/convert.c: fixed memory overrun error

* app/gdisplay.c
* app/menus.c: reapplied the tools patch from Nether, looks
like it doesn't trip up anymore. Added some sanity checks
anyway

* app/disp_callbacks.c
* app/transform_core.c: plugged some harmless build warnings

-Yosh
This commit is contained in:
Manish Singh 1998-03-11 08:58:42 +00:00
parent 1b62534d5f
commit 89ec6691ee
16 changed files with 335 additions and 62 deletions

View File

@ -1,3 +1,15 @@
Wed Mar 11 00:27:35 PST 1998 Manish Singh <yosh@gimp.org>
* app/convert.c: fixed memory overrun error
* app/gdisplay.c
* app/menus.c: reapplied the tools patch from Nether, looks
like it doesn't trip up anymore. Added some sanity checks
anyway
* app/disp_callbacks.c
* app/transform_core.c: plugged some harmless build warnings
1998-03-11 Larry Ewing <lewing@discord.isc.tamu.edu>
* app/undo.c

View File

@ -1066,7 +1066,7 @@ generate_histogram_rgb (Histogram histogram,
num_found_cols++;
if (num_found_cols > col_limit)
if (num_found_cols >= col_limit)
{
/* There are more colours in the image
* than were allowed. We switch to plain

View File

@ -1066,7 +1066,7 @@ generate_histogram_rgb (Histogram histogram,
num_found_cols++;
if (num_found_cols > col_limit)
if (num_found_cols >= col_limit)
{
/* There are more colours in the image
* than were allowed. We switch to plain

View File

@ -41,7 +41,6 @@
#include "scroll.h"
#include "tools.h"
#include "undo.h"
#include "tools.h"
#include "layer_pvt.h" /* ick. */
@ -1110,6 +1109,10 @@ gdisplay_active ()
event = gtk_get_current_event ();
event_widget = gtk_get_event_widget (event);
gdk_event_free (event);
if (event_widget == NULL)
return NULL;
toplevel_widget = gtk_widget_get_toplevel (event_widget);
gdisp = g_hash_table_lookup (display_ht, toplevel_widget);
@ -1118,7 +1121,6 @@ gdisplay_active ()
if (popup_shell)
{
active_tool_control (DESTROY, gdisp);
gdisp = gtk_object_get_user_data (GTK_OBJECT (popup_shell));
return gdisp;
}

View File

@ -62,14 +62,6 @@ redraw (GDisplay *gdisp,
}
}
static gint
expose_predicate (GdkEvent *event,
gpointer data)
{
return ((event->type == GDK_EXPOSE) &&
(event->any.window == data));
}
gint
gdisplay_canvas_events (GtkWidget *canvas,
GdkEvent *event)
@ -259,12 +251,7 @@ gdisplay_canvas_events (GtkWidget *canvas,
}
else if (mevent->state & GDK_BUTTON2_MASK)
{
/* int flush; */
grab_and_scroll (gdisp, mevent);
/* if (flush)
gdisplays_flush (); */
}
break;

View File

@ -62,14 +62,6 @@ redraw (GDisplay *gdisp,
}
}
static gint
expose_predicate (GdkEvent *event,
gpointer data)
{
return ((event->type == GDK_EXPOSE) &&
(event->any.window == data));
}
gint
gdisplay_canvas_events (GtkWidget *canvas,
GdkEvent *event)
@ -259,12 +251,7 @@ gdisplay_canvas_events (GtkWidget *canvas,
}
else if (mevent->state & GDK_BUTTON2_MASK)
{
/* int flush; */
grab_and_scroll (gdisp, mevent);
/* if (flush)
gdisplays_flush (); */
}
break;

View File

@ -41,7 +41,6 @@
#include "scroll.h"
#include "tools.h"
#include "undo.h"
#include "tools.h"
#include "layer_pvt.h" /* ick. */
@ -1110,6 +1109,10 @@ gdisplay_active ()
event = gtk_get_current_event ();
event_widget = gtk_get_event_widget (event);
gdk_event_free (event);
if (event_widget == NULL)
return NULL;
toplevel_widget = gtk_widget_get_toplevel (event_widget);
gdisp = g_hash_table_lookup (display_ht, toplevel_widget);
@ -1118,7 +1121,6 @@ gdisplay_active ()
if (popup_shell)
{
active_tool_control (DESTROY, gdisp);
gdisp = gtk_object_get_user_data (GTK_OBJECT (popup_shell));
return gdisp;
}

View File

@ -62,14 +62,6 @@ redraw (GDisplay *gdisp,
}
}
static gint
expose_predicate (GdkEvent *event,
gpointer data)
{
return ((event->type == GDK_EXPOSE) &&
(event->any.window == data));
}
gint
gdisplay_canvas_events (GtkWidget *canvas,
GdkEvent *event)
@ -259,12 +251,7 @@ gdisplay_canvas_events (GtkWidget *canvas,
}
else if (mevent->state & GDK_BUTTON2_MASK)
{
/* int flush; */
grab_and_scroll (gdisp, mevent);
/* if (flush)
gdisplays_flush (); */
}
break;

View File

@ -41,7 +41,6 @@
#include "scroll.h"
#include "tools.h"
#include "undo.h"
#include "tools.h"
#include "layer_pvt.h" /* ick. */
@ -1110,6 +1109,10 @@ gdisplay_active ()
event = gtk_get_current_event ();
event_widget = gtk_get_event_widget (event);
gdk_event_free (event);
if (event_widget == NULL)
return NULL;
toplevel_widget = gtk_widget_get_toplevel (event_widget);
gdisp = g_hash_table_lookup (display_ht, toplevel_widget);
@ -1118,7 +1121,6 @@ gdisplay_active ()
if (popup_shell)
{
active_tool_control (DESTROY, gdisp);
gdisp = gtk_object_get_user_data (GTK_OBJECT (popup_shell));
return gdisp;
}

View File

@ -1066,7 +1066,7 @@ generate_histogram_rgb (Histogram histogram,
num_found_cols++;
if (num_found_cols > col_limit)
if (num_found_cols >= col_limit)
{
/* There are more colours in the image
* than were allowed. We switch to plain

View File

@ -29,7 +29,7 @@
#include "procedural_db.h"
#include "scale.h"
#include "tools.h"
#include "gdisplay.h"
static void menus_init (void);
static void menus_foreach (gpointer key,
@ -43,7 +43,8 @@ static gint menus_install_accel (GtkWidget *widget,
static void menus_remove_accel (GtkWidget *widget,
gchar *signal_name,
gchar *path);
static void menus_activate_callback (GtkWidget *widget,
GtkMenuEntry *entry);
static GtkMenuEntry menu_items[] =
{
@ -298,6 +299,9 @@ menus_create (GtkMenuEntry *entries,
gtk_signal_connect (GTK_OBJECT (entries[i].widget), "remove_accelerator",
(GtkSignalFunc) menus_remove_accel,
entries[i].path);
gtk_signal_connect (GTK_OBJECT (entries[i].widget), "activate",
(GtkSignalFunc) menus_activate_callback,
&entries[i]);
}
}
@ -486,3 +490,73 @@ menus_remove_accel (GtkWidget *widget,
g_hash_table_insert (entry_ht, path, g_strdup (""));
}
}
static void
menus_activate_callback (GtkWidget *widget,
GtkMenuEntry *entry)
{
/* These are the functions upon which we won't destroy the
tool... "safe", so to say. All the others are expected to alter
the image, so the tool must be destroyed */
const GtkMenuCallback ignore[]={
image_posterize_cmd_callback,
image_threshold_cmd_callback,
image_color_balance_cmd_callback,
image_brightness_contrast_cmd_callback,
image_hue_saturation_cmd_callback,
image_curves_cmd_callback,
image_levels_cmd_callback,
image_histogram_cmd_callback,
tools_select_cmd_callback,
about_dialog_cmd_callback,
tips_dialog_cmd_callback,
file_new_cmd_callback,
file_open_cmd_callback,
file_save_cmd_callback,
file_save_as_cmd_callback,
file_pref_cmd_callback,
file_close_cmd_callback,
file_quit_cmd_callback,
view_zoomin_cmd_callback,
view_zoomout_cmd_callback,
view_zoom_16_1_callback,
view_zoom_8_1_callback,
view_zoom_4_1_callback,
view_zoom_2_1_callback,
view_zoom_1_1_callback,
view_zoom_1_2_callback,
view_zoom_1_4_callback,
view_zoom_1_8_callback,
view_zoom_1_16_callback,
view_window_info_cmd_callback,
view_toggle_rulers_cmd_callback,
view_toggle_guides_cmd_callback,
view_snap_to_guides_cmd_callback,
channel_ops_duplicate_cmd_callback,
dialogs_lc_cmd_callback,
dialogs_brushes_cmd_callback,
dialogs_patterns_cmd_callback,
dialogs_palette_cmd_callback,
dialogs_gradient_editor_cmd_callback,
dialogs_lc_cmd_callback,
dialogs_indexed_palette_cmd_callback,
dialogs_tools_options_cmd_callback,
file_load_by_extension_callback,
file_save_by_extension_callback
};
int i;
if (active_tool){
for (i=0; i<sizeof(ignore)/sizeof(*ignore); i++)
if (entry->callback == ignore[i])
return;
if (active_tool->gdisp_ptr == NULL)
active_tool_control (DESTROY, active_tool->gdisp_ptr);
else {
GDisplay *gdisp;
gdisp = gdisplay_active ();
if (gdisp == NULL || ((GDisplay*)active_tool->gdisp_ptr)->gimage == gdisp->gimage)
active_tool_control (DESTROY, active_tool->gdisp_ptr);
}
}
}

View File

@ -29,7 +29,7 @@
#include "procedural_db.h"
#include "scale.h"
#include "tools.h"
#include "gdisplay.h"
static void menus_init (void);
static void menus_foreach (gpointer key,
@ -43,7 +43,8 @@ static gint menus_install_accel (GtkWidget *widget,
static void menus_remove_accel (GtkWidget *widget,
gchar *signal_name,
gchar *path);
static void menus_activate_callback (GtkWidget *widget,
GtkMenuEntry *entry);
static GtkMenuEntry menu_items[] =
{
@ -298,6 +299,9 @@ menus_create (GtkMenuEntry *entries,
gtk_signal_connect (GTK_OBJECT (entries[i].widget), "remove_accelerator",
(GtkSignalFunc) menus_remove_accel,
entries[i].path);
gtk_signal_connect (GTK_OBJECT (entries[i].widget), "activate",
(GtkSignalFunc) menus_activate_callback,
&entries[i]);
}
}
@ -486,3 +490,73 @@ menus_remove_accel (GtkWidget *widget,
g_hash_table_insert (entry_ht, path, g_strdup (""));
}
}
static void
menus_activate_callback (GtkWidget *widget,
GtkMenuEntry *entry)
{
/* These are the functions upon which we won't destroy the
tool... "safe", so to say. All the others are expected to alter
the image, so the tool must be destroyed */
const GtkMenuCallback ignore[]={
image_posterize_cmd_callback,
image_threshold_cmd_callback,
image_color_balance_cmd_callback,
image_brightness_contrast_cmd_callback,
image_hue_saturation_cmd_callback,
image_curves_cmd_callback,
image_levels_cmd_callback,
image_histogram_cmd_callback,
tools_select_cmd_callback,
about_dialog_cmd_callback,
tips_dialog_cmd_callback,
file_new_cmd_callback,
file_open_cmd_callback,
file_save_cmd_callback,
file_save_as_cmd_callback,
file_pref_cmd_callback,
file_close_cmd_callback,
file_quit_cmd_callback,
view_zoomin_cmd_callback,
view_zoomout_cmd_callback,
view_zoom_16_1_callback,
view_zoom_8_1_callback,
view_zoom_4_1_callback,
view_zoom_2_1_callback,
view_zoom_1_1_callback,
view_zoom_1_2_callback,
view_zoom_1_4_callback,
view_zoom_1_8_callback,
view_zoom_1_16_callback,
view_window_info_cmd_callback,
view_toggle_rulers_cmd_callback,
view_toggle_guides_cmd_callback,
view_snap_to_guides_cmd_callback,
channel_ops_duplicate_cmd_callback,
dialogs_lc_cmd_callback,
dialogs_brushes_cmd_callback,
dialogs_patterns_cmd_callback,
dialogs_palette_cmd_callback,
dialogs_gradient_editor_cmd_callback,
dialogs_lc_cmd_callback,
dialogs_indexed_palette_cmd_callback,
dialogs_tools_options_cmd_callback,
file_load_by_extension_callback,
file_save_by_extension_callback
};
int i;
if (active_tool){
for (i=0; i<sizeof(ignore)/sizeof(*ignore); i++)
if (entry->callback == ignore[i])
return;
if (active_tool->gdisp_ptr == NULL)
active_tool_control (DESTROY, active_tool->gdisp_ptr);
else {
GDisplay *gdisp;
gdisp = gdisplay_active ();
if (gdisp == NULL || ((GDisplay*)active_tool->gdisp_ptr)->gimage == gdisp->gimage)
active_tool_control (DESTROY, active_tool->gdisp_ptr);
}
}
}

View File

@ -29,7 +29,7 @@
#include "procedural_db.h"
#include "scale.h"
#include "tools.h"
#include "gdisplay.h"
static void menus_init (void);
static void menus_foreach (gpointer key,
@ -43,7 +43,8 @@ static gint menus_install_accel (GtkWidget *widget,
static void menus_remove_accel (GtkWidget *widget,
gchar *signal_name,
gchar *path);
static void menus_activate_callback (GtkWidget *widget,
GtkMenuEntry *entry);
static GtkMenuEntry menu_items[] =
{
@ -298,6 +299,9 @@ menus_create (GtkMenuEntry *entries,
gtk_signal_connect (GTK_OBJECT (entries[i].widget), "remove_accelerator",
(GtkSignalFunc) menus_remove_accel,
entries[i].path);
gtk_signal_connect (GTK_OBJECT (entries[i].widget), "activate",
(GtkSignalFunc) menus_activate_callback,
&entries[i]);
}
}
@ -486,3 +490,73 @@ menus_remove_accel (GtkWidget *widget,
g_hash_table_insert (entry_ht, path, g_strdup (""));
}
}
static void
menus_activate_callback (GtkWidget *widget,
GtkMenuEntry *entry)
{
/* These are the functions upon which we won't destroy the
tool... "safe", so to say. All the others are expected to alter
the image, so the tool must be destroyed */
const GtkMenuCallback ignore[]={
image_posterize_cmd_callback,
image_threshold_cmd_callback,
image_color_balance_cmd_callback,
image_brightness_contrast_cmd_callback,
image_hue_saturation_cmd_callback,
image_curves_cmd_callback,
image_levels_cmd_callback,
image_histogram_cmd_callback,
tools_select_cmd_callback,
about_dialog_cmd_callback,
tips_dialog_cmd_callback,
file_new_cmd_callback,
file_open_cmd_callback,
file_save_cmd_callback,
file_save_as_cmd_callback,
file_pref_cmd_callback,
file_close_cmd_callback,
file_quit_cmd_callback,
view_zoomin_cmd_callback,
view_zoomout_cmd_callback,
view_zoom_16_1_callback,
view_zoom_8_1_callback,
view_zoom_4_1_callback,
view_zoom_2_1_callback,
view_zoom_1_1_callback,
view_zoom_1_2_callback,
view_zoom_1_4_callback,
view_zoom_1_8_callback,
view_zoom_1_16_callback,
view_window_info_cmd_callback,
view_toggle_rulers_cmd_callback,
view_toggle_guides_cmd_callback,
view_snap_to_guides_cmd_callback,
channel_ops_duplicate_cmd_callback,
dialogs_lc_cmd_callback,
dialogs_brushes_cmd_callback,
dialogs_patterns_cmd_callback,
dialogs_palette_cmd_callback,
dialogs_gradient_editor_cmd_callback,
dialogs_lc_cmd_callback,
dialogs_indexed_palette_cmd_callback,
dialogs_tools_options_cmd_callback,
file_load_by_extension_callback,
file_save_by_extension_callback
};
int i;
if (active_tool){
for (i=0; i<sizeof(ignore)/sizeof(*ignore); i++)
if (entry->callback == ignore[i])
return;
if (active_tool->gdisp_ptr == NULL)
active_tool_control (DESTROY, active_tool->gdisp_ptr);
else {
GDisplay *gdisp;
gdisp = gdisplay_active ();
if (gdisp == NULL || ((GDisplay*)active_tool->gdisp_ptr)->gimage == gdisp->gimage)
active_tool_control (DESTROY, active_tool->gdisp_ptr);
}
}
}

View File

@ -838,8 +838,8 @@ transform_core_do (gimage, drawable, float_tiles, interpolation, matrix)
double dx1, dy1, dx2, dy2, dx3, dy3, dx4, dy4;
double xinc, yinc, winc;
double tx, ty, tw;
double ttx, tty;
double dx, dy;
double ttx = 0.0, tty = 0.0;
double dx = 0.0, dy = 0.0;
unsigned char * dest, * d;
unsigned char * src[16];
double src_a[16][MAX_CHANNELS];
@ -1183,7 +1183,6 @@ transform_core_paste (gimage, drawable, tiles, new_layer)
{
Layer * layer;
Layer * floating_layer;
int layer_type;
if (new_layer)
{

View File

@ -838,8 +838,8 @@ transform_core_do (gimage, drawable, float_tiles, interpolation, matrix)
double dx1, dy1, dx2, dy2, dx3, dy3, dx4, dy4;
double xinc, yinc, winc;
double tx, ty, tw;
double ttx, tty;
double dx, dy;
double ttx = 0.0, tty = 0.0;
double dx = 0.0, dy = 0.0;
unsigned char * dest, * d;
unsigned char * src[16];
double src_a[16][MAX_CHANNELS];
@ -1183,7 +1183,6 @@ transform_core_paste (gimage, drawable, tiles, new_layer)
{
Layer * layer;
Layer * floating_layer;
int layer_type;
if (new_layer)
{

View File

@ -29,7 +29,7 @@
#include "procedural_db.h"
#include "scale.h"
#include "tools.h"
#include "gdisplay.h"
static void menus_init (void);
static void menus_foreach (gpointer key,
@ -43,7 +43,8 @@ static gint menus_install_accel (GtkWidget *widget,
static void menus_remove_accel (GtkWidget *widget,
gchar *signal_name,
gchar *path);
static void menus_activate_callback (GtkWidget *widget,
GtkMenuEntry *entry);
static GtkMenuEntry menu_items[] =
{
@ -298,6 +299,9 @@ menus_create (GtkMenuEntry *entries,
gtk_signal_connect (GTK_OBJECT (entries[i].widget), "remove_accelerator",
(GtkSignalFunc) menus_remove_accel,
entries[i].path);
gtk_signal_connect (GTK_OBJECT (entries[i].widget), "activate",
(GtkSignalFunc) menus_activate_callback,
&entries[i]);
}
}
@ -486,3 +490,73 @@ menus_remove_accel (GtkWidget *widget,
g_hash_table_insert (entry_ht, path, g_strdup (""));
}
}
static void
menus_activate_callback (GtkWidget *widget,
GtkMenuEntry *entry)
{
/* These are the functions upon which we won't destroy the
tool... "safe", so to say. All the others are expected to alter
the image, so the tool must be destroyed */
const GtkMenuCallback ignore[]={
image_posterize_cmd_callback,
image_threshold_cmd_callback,
image_color_balance_cmd_callback,
image_brightness_contrast_cmd_callback,
image_hue_saturation_cmd_callback,
image_curves_cmd_callback,
image_levels_cmd_callback,
image_histogram_cmd_callback,
tools_select_cmd_callback,
about_dialog_cmd_callback,
tips_dialog_cmd_callback,
file_new_cmd_callback,
file_open_cmd_callback,
file_save_cmd_callback,
file_save_as_cmd_callback,
file_pref_cmd_callback,
file_close_cmd_callback,
file_quit_cmd_callback,
view_zoomin_cmd_callback,
view_zoomout_cmd_callback,
view_zoom_16_1_callback,
view_zoom_8_1_callback,
view_zoom_4_1_callback,
view_zoom_2_1_callback,
view_zoom_1_1_callback,
view_zoom_1_2_callback,
view_zoom_1_4_callback,
view_zoom_1_8_callback,
view_zoom_1_16_callback,
view_window_info_cmd_callback,
view_toggle_rulers_cmd_callback,
view_toggle_guides_cmd_callback,
view_snap_to_guides_cmd_callback,
channel_ops_duplicate_cmd_callback,
dialogs_lc_cmd_callback,
dialogs_brushes_cmd_callback,
dialogs_patterns_cmd_callback,
dialogs_palette_cmd_callback,
dialogs_gradient_editor_cmd_callback,
dialogs_lc_cmd_callback,
dialogs_indexed_palette_cmd_callback,
dialogs_tools_options_cmd_callback,
file_load_by_extension_callback,
file_save_by_extension_callback
};
int i;
if (active_tool){
for (i=0; i<sizeof(ignore)/sizeof(*ignore); i++)
if (entry->callback == ignore[i])
return;
if (active_tool->gdisp_ptr == NULL)
active_tool_control (DESTROY, active_tool->gdisp_ptr);
else {
GDisplay *gdisp;
gdisp = gdisplay_active ();
if (gdisp == NULL || ((GDisplay*)active_tool->gdisp_ptr)->gimage == gdisp->gimage)
active_tool_control (DESTROY, active_tool->gdisp_ptr);
}
}
}