import OL gimp-3.0.4-1.el9_7.1

This commit is contained in:
eabdullin 2025-11-27 12:00:41 +00:00
parent fac97f0b7c
commit df751d603e
20 changed files with 806 additions and 1493 deletions

View File

@ -1 +1 @@
79324eeafe2b63fe7f2b1637e57b683695af8f05 SOURCES/gimp-2.99.8.tar.bz2
f7c52adcf5c8ab3e858ac776d3b7cedd1f94a891 SOURCES/gimp-3.0.4.tar.xz

2
.gitignore vendored
View File

@ -1 +1 @@
SOURCES/gimp-2.99.8.tar.bz2
SOURCES/gimp-3.0.4.tar.xz

View File

@ -1,25 +0,0 @@
diff -up gimp-2.10.14/etc/gimprc.in.cm-system-monitor-profile-by-default gimp-2.10.14/etc/gimprc.in
--- gimp-2.10.14/etc/gimprc.in.cm-system-monitor-profile-by-default 2019-10-26 21:46:48.000000000 +0200
+++ gimp-2.10.14/etc/gimprc.in 2019-11-04 13:17:23.322750636 +0100
@@ -317,9 +317,9 @@
# Defines the color management behavior. This is a parameter list.
#
-# (color-management
+(color-management
# (mode display)
-# (display-profile-from-gdk no)
+ (display-profile-from-gdk no)
# (display-rendering-intent relative-colorimetric)
# (display-use-black-point-compensation yes)
# (display-optimize yes)
@@ -328,7 +328,8 @@
# (simulation-optimize yes)
# (simulation-gamut-check no)
# (out-of-gamut-color (color-rgb 1 0 1))
-# (display-module "CdisplayLcms"))
+# (display-module "CdisplayLcms")
+)
# Keep a permanent record of all opened and saved files in the Recent
# Documents list. Possible values are yes and no.

View File

@ -1,12 +0,0 @@
diff -up gimp-2.10.18/etc/gimprc.in.no-phone-home-default gimp-2.10.18/etc/gimprc.in
--- gimp-2.10.18/etc/gimprc.in.no-phone-home-default 2020-02-23 21:15:47.217777581 +0100
+++ gimp-2.10.18/etc/gimprc.in 2020-02-23 21:22:42.416162110 +0100
@@ -393,7 +393,7 @@
# Check for availability of GIMP updates through background internet queries.
# Possible values are yes and no.
#
-# (check-updates yes)
+(check-updates no)
# Timestamp of the last update check. (null)
#

View File

@ -1,12 +0,0 @@
diff -up gimp-2.10.24/etc/gimprc.in.external-help-browser gimp-2.10.24/etc/gimprc.in
--- gimp-2.10.24/etc/gimprc.in.external-help-browser 2021-04-03 00:02:39.312656132 +0200
+++ gimp-2.10.24/etc/gimprc.in 2021-04-03 00:03:27.360453285 +0200
@@ -836,7 +836,7 @@
# Sets the browser used by the help system. Possible values are gimp and
# web-browser.
#
-# (help-browser web-browser)
+(help-browser web-browser)
# When enabled, a search of actions will also return inactive actions.
# Possible values are yes and no.

View File

@ -1,98 +0,0 @@
Built out of the following commits from release 2.10.36:
- 7db71cd0b6e36c454aa0d2d3efeec7e636db4dbc
- e92f279c97282a2b20dca0d923db7465f2057703
- 9dda8139e4d07e3a273436eda993fef32555edbe
Applied onto worktree starting from top to bottom.
---
plug-ins/file-dds/ddsread.c | 39 +++++++++++++++++++++++++++++++++++++
1 file changed, 39 insertions(+)
diff --git a/plug-ins/file-dds/ddsread.c b/plug-ins/file-dds/ddsread.c
index 72102d0e1c..ba5b712edd 100644
--- a/plug-ins/file-dds/ddsread.c
+++ b/plug-ins/file-dds/ddsread.c
@@ -124,6 +124,7 @@ read_dds (GFile *file,
guint l = 0;
guchar *pixels;
FILE *fp;
+ gsize file_size;
dds_header_t hdr;
dds_header_dx10_t dx10hdr;
dds_load_info_t d;
@@ -157,6 +158,10 @@ read_dds (GFile *file,
return GIMP_PDB_EXECUTION_ERROR;
}
+ fseek (fp, 0L, SEEK_END);
+ file_size = ftell (fp);
+ fseek (fp, 0, SEEK_SET);
+
gimp_progress_init_printf ("Loading %s:", gimp_file_get_utf8_name (file));
/* read header */
@@ -317,6 +322,16 @@ read_dds (GFile *file,
precision = GIMP_PRECISION_U8_NON_LINEAR;
}
+ /* verify header information is accurate */
+ if (hdr.depth < 1 ||
+ (hdr.pitch_or_linsize > (file_size - sizeof (hdr))) ||
+ (((guint64) hdr.height * hdr.width * hdr.depth) > (file_size - sizeof (hdr))))
+ {
+ fclose (fp);
+ g_message ("Invalid or corrupted DDS header\n");
+ return GIMP_PDB_EXECUTION_ERROR;
+ }
+
image = gimp_image_new_with_precision (hdr.width, hdr.height, type, precision);
if (! image)
@@ -985,6 +1000,14 @@ load_layer (FILE *fp,
guint size = hdr->pitch_or_linsize >> (2 * level);
guint layerw;
gint format = DDS_COMPRESS_NONE;
+ gsize file_size;
+ gsize current_position;
+
+ current_position = ftell (fp);
+ fseek (fp, 0L, SEEK_END);
+ file_size = ftell (fp);
+ fseek (fp, 0, SEEK_SET);
+ fseek (fp, current_position, SEEK_SET);
if (width < 1) width = 1;
if (height < 1) height = 1;
@@ -1082,6 +1105,13 @@ load_layer (FILE *fp,
size *= 16;
}
+ if (size > (file_size - current_position) ||
+ size > hdr->pitch_or_linsize)
+ {
+ g_message ("Requested data exceeds size of file.\n");
+ return 0;
+ }
+
if ((hdr->flags & DDSD_LINEARSIZE) &&
!fread (buf, size, 1, fp))
{
@@ -1121,6 +1151,15 @@ load_layer (FILE *fp,
gimp_progress_update ((double) y / (double) hdr->height);
}
+ current_position = ftell (fp);
+ if ((hdr->flags & DDSD_PITCH) &&
+ ((width * d->bpp) > (file_size - current_position) ||
+ (width * d->bpp) > hdr->pitch_or_linsize))
+ {
+ g_message ("Requested data exceeds size of file.\n");
+ return 0;
+ }
+
if ((hdr->flags & DDSD_PITCH) &&
! fread (buf, width * d->bpp, 1, fp))
{
--
2.43.0

View File

@ -1,20 +0,0 @@
O-Commit: 865cc56894dcb6e1c664a55e4b4010ebf6919e10
---
plug-ins/file-psd/psd-util.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/plug-ins/file-psd/psd-util.c b/plug-ins/file-psd/psd-util.c
index 761865e7af..545bd32f7c 100644
--- a/plug-ins/file-psd/psd-util.c
+++ b/plug-ins/file-psd/psd-util.c
@@ -583,6 +583,7 @@ decode_packbits (const gchar *src,
{
IFDBG(2) g_debug ("Overrun in packbits replicate of %d chars", n - unpack_left);
error_code = 2;
+ break;
}
memset (dst, *src, n);
src++;
--
2.43.0

View File

@ -1,31 +0,0 @@
O-Commit: 9c9521e99dd24a73fe7701bf5bde6dbbd26c4862
---
plug-ins/common/file-psp.c | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/plug-ins/common/file-psp.c b/plug-ins/common/file-psp.c
index f891ca1856..6944ad4072 100644
--- a/plug-ins/common/file-psp.c
+++ b/plug-ins/common/file-psp.c
@@ -1278,8 +1278,17 @@ read_color_block (FILE *f,
}
color_palette_entries = GUINT32_FROM_LE (entry_count);
+ /* TODO: GIMP currently only supports a maximum of 256 colors
+ * in an indexed image. If this changes, we can change this check */
+ if (color_palette_entries > 256)
+ {
+ g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED,
+ _("Error: Unsupported palette size"));
+ return -1;
+ }
+
/* psp color palette entries are stored as RGBA so 4 bytes per entry
- where the fourth bytes is always zero */
+ * where the fourth bytes is always zero */
pal_size = color_palette_entries * 4;
color_palette = g_malloc (pal_size);
if (fread (color_palette, pal_size, 1, f) < 1)
--
2.43.0

View File

@ -1,21 +0,0 @@
O-Commit: d52d32cb82905e4ee58d249dcde9e8d47f2b915d
---
plug-ins/common/file-psp.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/plug-ins/common/file-psp.c b/plug-ins/common/file-psp.c
index 6944ad4072..d1156d4732 100644
--- a/plug-ins/common/file-psp.c
+++ b/plug-ins/common/file-psp.c
@@ -1657,7 +1657,7 @@ read_channel_data (FILE *f,
else
endq = q + line_width * height;
- buf = g_malloc (127);
+ buf = g_malloc (128);
while (q < endq)
{
fread (&runcount, 1, 1, f);
--
2.43.0

View File

@ -0,0 +1,26 @@
diff -urNp old/etc/gimprc.in new/etc/gimprc.in
--- old/etc/gimprc.in 2025-05-02 16:05:59.766235164 +0200
+++ new/etc/gimprc.in 2025-05-02 16:08:52.117193144 +0200
@@ -316,9 +316,9 @@
# Defines the color management behavior. This is a parameter list.
#
-# (color-management
+ (color-management
# (mode display)
-# (display-profile-from-gdk no)
+ (display-profile-from-gdk no)
# (display-rendering-intent relative-colorimetric)
# (display-use-black-point-compensation yes)
# (display-optimize yes)
@@ -326,7 +326,9 @@
# (simulation-use-black-point-compensation no)
# (simulation-optimize yes)
# (simulation-gamut-check no)
-# (out-of-gamut-color (color-rgb 1 0 1)))
+# (out-of-gamut-color (color-rgb 1 0 1))
+ (display-module "CdisplayLcms")
+)
# Keep a permanent record of all opened and saved files in the Recent
# Documents list. Possible values are yes and no.

View File

@ -0,0 +1,12 @@
diff -urNp old/etc/gimprc.in new/etc/gimprc.in
--- old/etc/gimprc.in 2025-05-02 16:10:40.807797273 +0200
+++ new/etc/gimprc.in 2025-05-02 16:12:22.380006468 +0200
@@ -824,7 +824,7 @@
# Sets the browser used by the help system. Possible values are gimp and
# web-browser.
#
-# (help-browser gimp)
+(help-browser web-browser)
# The maximum number of actions saved in history. This is an integer value.
#

View File

@ -0,0 +1,189 @@
diff -urNp a/plug-ins/common/file-dicom.c b/plug-ins/common/file-dicom.c
--- a/plug-ins/common/file-dicom.c 2025-11-20 10:40:07.878919653 +0100
+++ b/plug-ins/common/file-dicom.c 2025-11-20 10:47:48.219305960 +0100
@@ -344,6 +344,7 @@ load_image (GFile *file,
gint bits_stored = 0;
gint high_bit = 0;
guint8 *pix_buf = NULL;
+ guint64 pixbuf_size = 0;
gboolean is_signed = FALSE;
guint8 in_sequence = 0;
gboolean implicit_encoding = FALSE;
@@ -399,6 +400,7 @@ load_image (GFile *file,
guint16 ctx_us;
guint8 *value;
guint32 tag;
+ size_t actual_read;
if (fread (&group_word, 1, 2, dicom) == 0)
break;
@@ -503,15 +505,24 @@ load_image (GFile *file,
if (element_length >= (G_MAXUINT - 6))
{
- g_message ("'%s' seems to have an incorrect value field length.",
- gimp_file_get_utf8_name (file));
- gimp_quit ();
+ g_set_error (error, GIMP_PLUG_IN_ERROR, 0,
+ _("'%s' has an an incorrect value for field size. Possibly corrupt image."),
+ gimp_file_get_utf8_name (file));
+ g_free (dicominfo);
+ fclose (dicom);
+ return NULL;
}
/* Read contents. Allocate a bit more to make room for casts to int
below. */
value = g_new0 (guint8, element_length + 4);
- fread (value, 1, element_length, dicom);
+ actual_read = fread (value, 1, element_length, dicom);
+ if (actual_read < element_length)
+ {
+ g_warning ("Missing data: needed %u bytes, got %u. Possibly corrupt image.",
+ element_length, (guint32) actual_read);
+ element_length = actual_read;
+ }
/* ignore everything inside of a sequence */
if (in_sequence)
@@ -524,7 +535,7 @@ load_image (GFile *file,
if (big_endian && group_word != 0x0002)
ctx_us = GUINT16_SWAP_LE_BE (ctx_us);
- g_debug ("group: %04x, element: %04x, length: %d",
+ g_debug ("group: %04x, element: %04x, length: %u",
group_word, element_word, element_length);
g_debug ("Value: %s", (char*)value);
/* Recognize some critical tags */
@@ -658,6 +669,7 @@ load_image (GFile *file,
if (group_word == 0x7fe0 && element_word == 0x0010)
{
pix_buf = value;
+ pixbuf_size = element_length;
}
else
{
@@ -688,25 +700,50 @@ load_image (GFile *file,
}
}
+ g_debug ("Bpp: %d, wxh: %u x %u, spp: %d\n", bpp, width, height, samples_per_pixel);
+
if ((bpp != 8) && (bpp != 16))
{
- g_message ("'%s' has a bpp of %d which GIMP cannot handle.",
- gimp_file_get_utf8_name (file), bpp);
- gimp_quit ();
+ g_set_error (error, GIMP_PLUG_IN_ERROR, 0,
+ _("'%s' has a bpp of %d which GIMP cannot handle."),
+ gimp_file_get_utf8_name (file), bpp);
+ g_free (pix_buf);
+ g_free (dicominfo);
+ fclose (dicom);
+ return NULL;
}
if ((width > GIMP_MAX_IMAGE_SIZE) || (height > GIMP_MAX_IMAGE_SIZE))
{
- g_message ("'%s' has a larger image size (%d x %d) than GIMP can handle.",
- gimp_file_get_utf8_name (file), width, height);
- gimp_quit ();
+ g_set_error (error, GIMP_PLUG_IN_ERROR, 0,
+ _("'%s' has a larger image size (%d x %d) than GIMP can handle."),
+ gimp_file_get_utf8_name (file), width, height);
+ g_free (pix_buf);
+ g_free (dicominfo);
+ fclose (dicom);
+ return NULL;
}
if (samples_per_pixel > 3)
{
- g_message ("'%s' has samples per pixel of %d which GIMP cannot handle.",
- gimp_file_get_utf8_name (file), samples_per_pixel);
- gimp_quit ();
+ g_set_error (error, GIMP_PLUG_IN_ERROR, 0,
+ _("'%s' has samples per pixel of %d which GIMP cannot handle."),
+ gimp_file_get_utf8_name (file), samples_per_pixel);
+ g_free (pix_buf);
+ g_free (dicominfo);
+ fclose (dicom);
+ return NULL;
+ }
+
+ if ((guint64) width * height * (bpp >> 3) * samples_per_pixel > pixbuf_size)
+ {
+ g_set_error (error, GIMP_PLUG_IN_ERROR, 0,
+ _("'%s' has not enough pixel data. Possibly corrupt image."),
+ gimp_file_get_utf8_name (file));
+ g_free (pix_buf);
+ g_free (dicominfo);
+ fclose (dicom);
+ return NULL;
}
dicominfo->width = width;
diff -urNp a/plug-ins/common/file-wbmp.c b/plug-ins/common/file-wbmp.c
--- a/plug-ins/common/file-wbmp.c 2025-11-20 10:40:07.879708221 +0100
+++ b/plug-ins/common/file-wbmp.c 2025-11-20 10:50:11.843417667 +0100
@@ -256,6 +256,7 @@ read_image (FILE *fd,
GeglBuffer *buffer;
guchar *dest, *temp;
gint i, cur_progress, max_progress;
+ size_t n_read;
/* Make a new image in GIMP */
if ((width < 0) || (width > GIMP_MAX_IMAGE_SIZE))
@@ -280,14 +281,14 @@ read_image (FILE *fd,
gimp_image_insert_layer (image, layer, NULL, 0);
- dest = g_malloc0 (width * height);
+ dest = g_malloc0 ((gsize) width * height);
ypos = 0;
cur_progress = 0;
max_progress = height;
- while (ReadOK (fd, &v, 1))
+ while ((n_read = ReadOK (fd, &v, 1)) != 0)
{
for (i = 1; (i <= 8) && (xpos < width); i++, xpos++)
{
@@ -312,6 +313,9 @@ read_image (FILE *fd,
break;
}
+ if (n_read == 0)
+ g_warning (_("Read failure at position %u. Possibly corrupt image."), ypos * width + xpos);
+
buffer = gimp_drawable_get_buffer (GIMP_DRAWABLE (layer));
gegl_buffer_set (buffer, GEGL_RECTANGLE (0, 0, width, height), 0, NULL, dest,
diff -urNp a/plug-ins/common/file-xwd.c b/plug-ins/common/file-xwd.c
--- a/plug-ins/common/file-xwd.c 2025-11-20 10:40:07.879708221 +0100
+++ b/plug-ins/common/file-xwd.c 2025-11-20 10:41:46.852626816 +0100
@@ -1683,9 +1683,20 @@ load_xwd_f2_d16_b16 (GFile *fi
greenval = (green * 255) / maxgreen;
for (blue = 0; blue <= maxblue; blue++)
{
+ guint32 offset = ((red << redshift) + (green << greenshift) +
+ (blue << blueshift)) * 3;
+
+ if (offset+2 >= maxval)
+ {
+ g_set_error (error, GIMP_PLUG_IN_ERROR, 0,
+ _("Invalid colormap offset. Possibly corrupt image."));
+ g_free (data);
+ g_free (ColorMap);
+ g_object_unref (buffer);
+ return NULL;
+ }
blueval = (blue * 255) / maxblue;
- cm = ColorMap + ((red << redshift) + (green << greenshift)
- + (blue << blueshift)) * 3;
+ cm = ColorMap + offset;
*(cm++) = redval;
*(cm++) = greenval;
*cm = blueval;

View File

@ -0,0 +1,153 @@
diff -urNp a/app/core/gimpimage-colormap.c b/app/core/gimpimage-colormap.c
--- a/app/core/gimpimage-colormap.c 2025-05-20 09:08:24.351925471 +0200
+++ b/app/core/gimpimage-colormap.c 2025-05-20 09:20:42.372348093 +0200
@@ -328,9 +328,8 @@ gimp_image_colormap_is_index_used (GimpI
num_processors = GIMP_GEGL_CONFIG (image->gimp->config)->num_processors;
layers = gimp_image_get_layer_list (image);
- pool = g_thread_pool_new_full ((GFunc) gimp_image_colormap_thread_is_index_used,
+ pool = g_thread_pool_new ((GFunc) gimp_image_colormap_thread_is_index_used,
GINT_TO_POINTER (color_index),
- (GDestroyNotify) g_free,
num_processors, TRUE, NULL);
for (iter = layers; iter; iter = g_list_next (iter))
{
diff -urNp a/app/core/gimpitemlist.c b/app/core/gimpitemlist.c
--- a/app/core/gimpitemlist.c 2025-05-20 09:08:24.354925484 +0200
+++ b/app/core/gimpitemlist.c 2025-05-20 09:20:03.980745485 +0200
@@ -629,7 +629,7 @@ gimp_item_list_get_items_by_glob (GimpIt
spec = g_pattern_spec_new (pattern);
for (iter = items; iter; iter = iter->next)
{
- if (g_pattern_spec_match_string (spec, gimp_object_get_name (iter->data)))
+ if (g_pattern_match_string (spec, gimp_object_get_name (iter->data)))
match = g_list_prepend (match, iter->data);
}
g_pattern_spec_free (spec);
diff -urNp a/app/plug-in/gimpplugin.c b/app/plug-in/gimpplugin.c
--- a/app/plug-in/gimpplugin.c 2025-05-20 09:08:24.339925418 +0200
+++ b/app/plug-in/gimpplugin.c 2025-05-20 09:19:19.516679552 +0200
@@ -403,7 +403,7 @@ gimp_plug_in_close_waitpid (GPid
GError *error = NULL;
if (plug_in->manager->gimp->be_verbose &&
- ! g_spawn_check_wait_status (status, &error))
+ ! g_spawn_check_exit_status (status, &error))
{
g_printerr ("Process for plug-in '%s' terminated with error: %s\n",
gimp_object_get_name (plug_in),
diff -urNp a/app/sanity.c b/app/sanity.c
--- a/app/sanity.c 2025-05-20 09:08:24.395925663 +0200
+++ b/app/sanity.c 2025-05-20 09:18:48.132179032 +0200
@@ -171,7 +171,7 @@ static gchar *
sanity_check_glib (void)
{
#define GLIB_REQUIRED_MAJOR 2
-#define GLIB_REQUIRED_MINOR 70
+#define GLIB_REQUIRED_MINOR 68
#define GLIB_REQUIRED_MICRO 0
const gchar *mismatch = glib_check_version (GLIB_REQUIRED_MAJOR,
diff -urNp a/app/text/gimptext.c b/app/text/gimptext.c
--- a/app/text/gimptext.c 2025-05-20 09:08:24.397925671 +0200
+++ b/app/text/gimptext.c 2025-05-20 09:16:10.900785765 +0200
@@ -827,7 +827,8 @@ gimp_text_serialize_property (GimpConfig
for (guint i = 0; i < length; ++i)
{
- PangoAttrFontDesc *attr_font_desc = pango_attribute_as_font_desc ((PangoAttribute*)g_slist_nth_data (list, i));
+ PangoAttrFontDesc *attr_font_desc = (((PangoAttribute*)g_slist_nth_data (list, i))->klass->type == PANGO_ATTR_FONT_DESC
+ ? (PangoAttrFontDesc *)g_slist_nth_data (list, i) : NULL );
if (attr_font_desc != NULL)
{
diff -urNp a/app/text/gimptext-parasite.c b/app/text/gimptext-parasite.c
--- a/app/text/gimptext-parasite.c 2025-05-20 09:08:24.397925671 +0200
+++ b/app/text/gimptext-parasite.c 2025-05-20 09:15:33.606149497 +0200
@@ -131,7 +131,8 @@ gimp_text_from_parasite (const GimpParas
for (guint i = 0; i < length; ++i)
{
- PangoAttrFontDesc *attr_font_desc = pango_attribute_as_font_desc ((PangoAttribute*)g_slist_nth_data (list, i));
+ PangoAttrFontDesc *attr_font_desc = (((PangoAttribute*)g_slist_nth_data (list, i))->klass->type == PANGO_ATTR_FONT_DESC
+ ? (PangoAttrFontDesc *)g_slist_nth_data (list, i) : NULL );
if (attr_font_desc != NULL)
{
diff -urNp a/app/xcf/xcf-save.c b/app/xcf/xcf-save.c
--- a/app/xcf/xcf-save.c 2025-05-20 09:08:24.399171071 +0200
+++ b/app/xcf/xcf-save.c 2025-05-20 09:14:35.628966564 +0200
@@ -2389,9 +2389,8 @@ xcf_save_level (XcfInfo *info,
* i.e. there is a bug in our code.
*/
queue = g_async_queue_new_full ((GDestroyNotify) xcf_save_free_job_data);
- pool = g_thread_pool_new_full ((GFunc) xcf_save_tile_parallel,
+ pool = g_thread_pool_new ((GFunc) xcf_save_tile_parallel,
queue,
- (GDestroyNotify) xcf_save_free_job_data,
num_processors, TRUE, NULL);
i = 0;
diff -urNp a/libgimp/gimpvectorloadprocedure.c b/libgimp/gimpvectorloadprocedure.c
--- a/libgimp/gimpvectorloadprocedure.c 2025-05-20 09:08:24.489926072 +0200
+++ b/libgimp/gimpvectorloadprocedure.c 2025-05-20 09:13:46.148798654 +0200
@@ -370,7 +370,7 @@ gimp_vector_load_procedure_run (GimpProc
}
}
- g_prefix_error_literal (&error, _("Vector image loading plug-in failed: "));
+ //g_prefix_error_literal (&error, _("Vector image loading plug-in failed: "));
}
/* One or both dimensions are still zero at this point. */
diff -urNp a/libgimpbase/gimpchoice.c b/libgimpbase/gimpchoice.c
--- a/libgimpbase/gimpchoice.c 2025-05-20 09:08:24.491384100 +0200
+++ b/libgimpbase/gimpchoice.c 2025-05-20 09:13:13.230538618 +0200
@@ -454,7 +454,7 @@ gimp_param_choice_class_init (GParamSpec
klass->value_type = G_TYPE_STRING;
klass->finalize = gimp_param_choice_finalize;
klass->value_validate = gimp_param_choice_validate;
- klass->value_is_valid = gimp_param_choice_value_is_valid;
+ //klass->value_is_valid = gimp_param_choice_value_is_valid;
klass->values_cmp = gimp_param_choice_values_cmp;
}
diff -urNp a/meson.build b/meson.build
--- a/meson.build 2025-05-20 09:08:24.256925056 +0200
+++ b/meson.build 2025-05-20 09:12:38.933510408 +0200
@@ -432,7 +432,7 @@ gio = dependency('gio-2.0'
gio_specific_name = platform_windows ? 'gio-windows-2.0' : 'gio-unix-2.0'
gio_specific = dependency(gio_specific_name)
-glib_minver = '2.70.0'
+glib_minver = '2.68.0'
glib = dependency('glib-2.0', version: '>='+glib_minver)
gi = dependency('gobject-introspection-1.0')
@@ -443,7 +443,7 @@ gmodule = dependency('gmodule-
gtk3_minver = '3.24.0'
gtk3 = dependency('gtk+-3.0', version: '>='+gtk3_minver)
-harfbuzz_minver = '2.8.2'
+harfbuzz_minver = '2.7.4'
harfbuzz = dependency('harfbuzz', version: '>='+harfbuzz_minver)
json_glib_minver = '1.2.6'
json_glib = dependency('json-glib-1.0', version: '>='+json_glib_minver)
@@ -472,7 +472,7 @@ endif
conf.set_quoted('MYPAINT_BRUSHES_DIR', mypaint_brushes_dir)
-pango_minver = '1.50.0'
+pango_minver = '1.48.0'
if platform_osx
pango_macos_recommended_version = '1.55.0'
pango_macos_warning='''
@@ -1837,6 +1837,8 @@ if is_git_repository
endif
endif
+conf.set('G_DEFINE_FINAL_TYPE(TN, t_n, T_P)', 'G_DEFINE_TYPE(TN, t_n, T_P)')
+
configure_file(
output: 'config.h',
configuration: conf

View File

@ -1,60 +0,0 @@
From 4f99f1fcfd892ead19831b5adcd38a99d71214b6 Mon Sep 17 00:00:00 2001
From: Jacob Boerema <jgboerema@gmail.com>
Date: Fri, 29 Apr 2022 16:40:32 -0400
Subject: [PATCH] app: fix #8120 GIMP 2.10.30 crashed when allocate large
memory
GIMP could crash if the information regarding old path properties read
from XCF was incorrect. It did not check if xcf_old_path succeeded and
kept trying to load more paths even if the last one failed to load.
Instead we now stop loading paths as soon as that function fails.
In case we have a failure here we also try to skip to the next property
based on the size of the path property, in hopes that the only problem
was this property.
---
app/xcf/xcf-load.c | 14 +++++++++++---
1 file changed, 11 insertions(+), 3 deletions(-)
diff --git a/app/xcf/xcf-load.c b/app/xcf/xcf-load.c
index ac9c4ea248..67bc766390 100644
--- a/app/xcf/xcf-load.c
+++ b/app/xcf/xcf-load.c
@@ -1168,7 +1168,12 @@ xcf_load_image_props (XcfInfo *info,
break;
case PROP_PATHS:
- xcf_load_old_paths (info, image);
+ {
+ goffset base = info->cp;
+
+ if (! xcf_load_old_paths (info, image))
+ xcf_seek_pos (info, base + prop_size, NULL);
+ }
break;
case PROP_USER_UNIT:
@@ -3035,8 +3040,11 @@ xcf_load_old_paths (XcfInfo *info,
xcf_read_int32 (info, &last_selected_row, 1);
xcf_read_int32 (info, &num_paths, 1);
+ GIMP_LOG (XCF, "Number of old paths: %u", num_paths);
+
while (num_paths-- > 0)
- xcf_load_old_path (info, image);
+ if (! xcf_load_old_path (info, image))
+ return FALSE;
active_vectors =
GIMP_VECTORS (gimp_container_get_child_by_index (gimp_image_get_vectors (image),
@@ -3087,7 +3095,7 @@ xcf_load_old_path (XcfInfo *info,
}
else if (version != 1)
{
- g_printerr ("Unknown path type. Possibly corrupt XCF file");
+ g_printerr ("Unknown path type (version: %u). Possibly corrupt XCF file.\n", version);
g_free (name);
return FALSE;
--
GitLab

View File

@ -1,31 +0,0 @@
From 22af0bcfe67c1c86381f33975ca7fdbde6b36b39 Mon Sep 17 00:00:00 2001
From: Jacob Boerema <jgboerema@gmail.com>
Date: Sun, 5 Jun 2022 15:38:24 -0400
Subject: [PATCH] app: fix #8230 crash in gimp_layer_invalidate_boundary when
channel is NULL
gimp_channel_is_empty returns FALSE if channel is NULL. This causes
gimp_layer_invalidate_boundary to crash if the mask channel is NULL.
With a NULL channel gimp_channel_is_empty should return TRUE, just like
the similar gimp_image_is_empty does, because returning FALSE here
suggests we have a non empty channel.
---
app/core/gimpchannel.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/core/gimpchannel.c b/app/core/gimpchannel.c
index 7b6a9851ae..502821ba58 100644
--- a/app/core/gimpchannel.c
+++ b/app/core/gimpchannel.c
@@ -1827,7 +1827,7 @@ gimp_channel_boundary (GimpChannel *channel,
gboolean
gimp_channel_is_empty (GimpChannel *channel)
{
- g_return_val_if_fail (GIMP_IS_CHANNEL (channel), FALSE);
+ g_return_val_if_fail (GIMP_IS_CHANNEL (channel), TRUE);
return GIMP_CHANNEL_GET_CLASS (channel)->is_empty (channel);
}
--
GitLab

View File

@ -1,159 +0,0 @@
diff --git a/plug-ins/common/file-tga.c b/plug-ins/common/file-tga.c
index f6f24a13194..c0d7ad94c20 100644
--- a/plug-ins/common/file-tga.c
+++ b/plug-ins/common/file-tga.c
@@ -982,9 +982,9 @@ ReadImage (FILE *fp,
cmap_bytes = (info->colorMapSize + 7 ) / 8;
tga_cmap = g_new (guchar, info->colorMapLength * cmap_bytes);
- if (info->colorMapSize > 24)
+ if (info->colorMapSize > 24 || info->alphaBits > 0)
{
- /* indexed + full alpha => promoted to RGBA */
+ /* indexed + full alpha, or alpha exists => promoted to RGBA */
itype = GIMP_RGB;
dtype = GIMP_RGBA_IMAGE;
convert_cmap = g_new (guchar, info->colorMapLength * 4);
@@ -996,13 +996,6 @@ ReadImage (FILE *fp,
dtype = GIMP_RGB_IMAGE;
convert_cmap = g_new (guchar, info->colorMapLength * 3);
}
- else if (info->alphaBits > 0)
- {
- /* if alpha exists here, promote to RGB */
- itype = GIMP_RGB;
- dtype = GIMP_RGBA_IMAGE;
- convert_cmap = g_new (guchar, info->colorMapLength * 4);
- }
else
{
itype = GIMP_INDEXED;
---
diff --git a/plug-ins/common/file-tga.c b/plug-ins/common/file-tga.c
index c0d7ad94c20..433410ff471 100644
--- a/plug-ins/common/file-tga.c
+++ b/plug-ins/common/file-tga.c
@@ -539,7 +539,7 @@ load_image (GFile *file,
switch (info.imageType)
{
case TGA_TYPE_MAPPED:
- if (info.bpp != 8)
+ if (info.bpp != 8 || !info.colorMapLength)
{
g_message ("Unhandled sub-format in '%s' (type = %u, bpp = %u)",
gimp_file_get_utf8_name (file),
@@ -862,32 +862,31 @@ apply_colormap (guchar *dest,
guint width,
const guchar *cmap,
gboolean alpha,
- guint16 index)
+ guint16 colorMapIndex,
+ guint16 colorMapLength)
{
guint x;
- if (alpha)
- {
- for (x = 0; x < width; x++)
- {
- *(dest++) = cmap[(*src - index) * 4];
- *(dest++) = cmap[(*src - index) * 4 + 1];
- *(dest++) = cmap[(*src - index) * 4 + 2];
- *(dest++) = cmap[(*src - index) * 4 + 3];
-
- src++;
- }
- }
- else
+ for (x = 0; x < width; x++)
{
- for (x = 0; x < width; x++)
- {
- *(dest++) = cmap[(*src - index) * 3];
- *(dest++) = cmap[(*src - index) * 3 + 1];
- *(dest++) = cmap[(*src - index) * 3 + 2];
-
- src++;
- }
+ guchar entryIndex = src[x] - colorMapIndex;
+
+ if (src[x] < colorMapIndex || entryIndex >= colorMapLength) {
+ g_message ("Unsupported colormap entry: %u",
+ src[x]);
+ entryIndex = 0;
+ }
+
+ if (alpha) {
+ *(dest++) = cmap[entryIndex * 4];
+ *(dest++) = cmap[entryIndex * 4 + 1];
+ *(dest++) = cmap[entryIndex * 4 + 2];
+ *(dest++) = cmap[entryIndex * 4 + 3];
+ } else {
+ *(dest++) = cmap[entryIndex * 3];
+ *(dest++) = cmap[entryIndex * 3 + 1];
+ *(dest++) = cmap[entryIndex * 3 + 2];
+ }
}
}
@@ -943,7 +942,7 @@ read_line (FILE *fp,
gboolean has_alpha = (info->alphaBits > 0);
apply_colormap (row, buf, info->width, convert_cmap, has_alpha,
- info->colorMapIndex);
+ info->colorMapIndex, info->colorMapLength);
}
else if (info->imageType == TGA_TYPE_MAPPED)
{
---
diff --git a/plug-ins/common/file-tga.c b/plug-ins/common/file-tga.c
index 433410ff471..a171a264772 100644
--- a/plug-ins/common/file-tga.c
+++ b/plug-ins/common/file-tga.c
@@ -952,7 +952,7 @@ read_line (FILE *fp,
}
else
{
- memcpy (row, buf, info->width * bpp);
+ memcpy (row, buf, info->width * info->bytes);
}
}
---
diff --git a/plug-ins/common/file-tga.c b/plug-ins/common/file-tga.c
index a171a264772..abecde86857 100644
--- a/plug-ins/common/file-tga.c
+++ b/plug-ins/common/file-tga.c
@@ -866,14 +866,29 @@ apply_colormap (guchar *dest,
guint16 colorMapLength)
{
guint x;
+ gint errcnt = 0;
for (x = 0; x < width; x++)
{
guchar entryIndex = src[x] - colorMapIndex;
if (src[x] < colorMapIndex || entryIndex >= colorMapLength) {
- g_message ("Unsupported colormap entry: %u",
- src[x]);
+ /* On Windows the error console can run out of resources when
+ * producing a huge amount of messages. This can happen when using
+ * fuzzed test images. This causes unresponsiveness at first and
+ * finally crashes GIMP. Eventually this needs to be fixed at the
+ * source, but for now let's limit the error messages to 10
+ * per line (this function is called once per read_line). */
+ if (errcnt < 10)
+ {
+ g_message ("Unsupported colormap entry: %u",
+ src[x]);
+ }
+ else if (errcnt == 10)
+ {
+ g_message ("Too many colormap errors. Image may be corrupt.");
+ }
+ errcnt++;
entryIndex = 0;
}
---

View File

@ -1,93 +0,0 @@
diff -urNp a/app/xcf/xcf-load.c b/app/xcf/xcf-load.c
--- a/app/xcf/xcf-load.c 2025-06-14 13:08:43.443446885 +0200
+++ b/app/xcf/xcf-load.c 2025-06-14 13:22:09.771911460 +0200
@@ -102,7 +102,8 @@ static gboolean xcf_check_layer_p
gboolean *is_text_layer);
static gboolean xcf_load_channel_props (XcfInfo *info,
GimpImage *image,
- GimpChannel **channel);
+ GimpChannel **channel,
+ gboolean is_mask);
static gboolean xcf_load_prop (XcfInfo *info,
PropType *prop_type,
guint32 *prop_size);
@@ -1213,6 +1214,14 @@ xcf_load_layer_props (XcfInfo *info,
case PROP_ACTIVE_LAYER:
info->selected_layers = g_list_prepend (info->selected_layers, *layer);
+ {
+ if (g_list_index (info->selected_layers, *layer) < 0)
+ info->selected_layers = g_list_prepend (info->selected_layers, *layer);
+ else
+ gimp_message_literal (info->gimp, G_OBJECT (info->progress),
+ GIMP_MESSAGE_WARNING,
+ "Invalid duplicate selected layer detected");
+ }
break;
case PROP_FLOATING_SELECTION:
@@ -1663,7 +1672,8 @@ xcf_check_layer_props (XcfInfo *info,
static gboolean
xcf_load_channel_props (XcfInfo *info,
GimpImage *image,
- GimpChannel **channel)
+ GimpChannel **channel,
+ gboolean is_mask)
{
PropType prop_type;
guint32 prop_size;
@@ -1686,6 +1696,36 @@ xcf_load_channel_props (XcfInfo *in
{
GimpChannel *mask;
+ if (is_mask)
+ {
+ /* PROP_SELECTION is not valid for masks, and we have to avoid
+ * overwriting the channel.
+ */
+ continue;
+ }
+
+ if (*channel == gimp_image_get_mask (image))
+ {
+ /* PROP_SELECTION was already seen once for this
+ * channel. Let's silently ignore the second identical
+ * property to avoid a double free.
+ */
+ continue;
+ }
+ else if (gimp_image_get_mask (image) != NULL &&
+ ! gimp_channel_is_empty (gimp_image_get_mask (image)))
+ {
+ /* This would happen when PROP_SELECTION was already set
+ * on a previous channel. This is a minor case of data
+ * loss (we don't know which selection was the right one
+ * and we drop the non-first ones), and also means it's
+ * a broken XCF, though it's not a major bug either. So
+ * let's go with a stderr print.
+ */
+ g_printerr ("PROP_SELECTION property was set on 2 channels (skipping)\n");
+ continue;
+ }
+
/* We're going to delete *channel, Don't leave its pointer
* in @info. See bug #767873.
*/
@@ -2155,7 +2195,7 @@ xcf_load_channel (XcfInfo *info,
return NULL;
/* read in the channel properties */
- if (! xcf_load_channel_props (info, image, &channel))
+ if (! xcf_load_channel_props (info, image, &channel, FALSE))
goto error;
xcf_progress_update (info);
@@ -2228,7 +2268,7 @@ xcf_load_layer_mask (XcfInfo *info,
/* read in the layer_mask properties */
channel = GIMP_CHANNEL (layer_mask);
- if (! xcf_load_channel_props (info, image, &channel))
+ if (! xcf_load_channel_props (info, image, &channel, TRUE))
goto error;
xcf_progress_update (info);

View File

@ -1,18 +0,0 @@
diff --git a/plug-ins/file-ico/ico-load.c b/plug-ins/file-ico/ico-load.c
index 9a222998bc1..818cf23cd31 100644
--- a/plug-ins/file-ico/ico-load.c
+++ b/plug-ins/file-ico/ico-load.c
@@ -299,7 +299,11 @@ ico_read_png (FILE *fp,
png_read_info (png_ptr, info);
png_get_IHDR (png_ptr, info, &w, &h, &bit_depth, &color_type,
NULL, NULL, NULL);
- if (w*h*4 > maxsize)
+ /* Check for overflow */
+ if ((w * h * 4) < w ||
+ (w * h * 4) < h ||
+ (w * h * 4) < (w * h) ||
+ (w * h * 4) > maxsize)
{
png_destroy_read_struct (&png_ptr, &info, NULL);
return FALSE;
---

View File

@ -1,371 +0,0 @@
diff -urNp a/extensions/goat-exercises/goat-exercise-lua.lua b/extensions/goat-exercises/goat-exercise-lua.lua
--- a/extensions/goat-exercises/goat-exercise-lua.lua 2022-03-09 09:39:44.007314944 +0100
+++ b/extensions/goat-exercises/goat-exercise-lua.lua 1970-01-01 01:00:00.000000000 +0100
@@ -1,184 +0,0 @@
-#!/usr/bin/env luajit
-
--- GIMP - The GNU Image Manipulation Program
--- Copyright (C) 1995 Spencer Kimball and Peter Mattis
---
--- goat-exercise-lua.lua
--- Copyright (C) Jehan
---
--- This program is free software: you can redistribute it and/or modify
--- it under the terms of the GNU General Public License as published by
--- the Free Software Foundation; either version 3 of the License, or
--- (at your option) any later version.
---
--- This program is distributed in the hope that it will be useful,
--- but WITHOUT ANY WARRANTY; without even the implied warranty of
--- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
--- GNU General Public License for more details.
---
--- You should have received a copy of the GNU General Public License
--- along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-local lgi = require 'lgi'
-
-local GLib = lgi.GLib
-local GObject = lgi.GObject
-local Gio = lgi.Gio
-local Gegl = lgi.Gegl
-local Gimp = lgi.Gimp
-local GimpUi = lgi.GimpUi
-local Gtk = lgi.Gtk
-local Gdk = lgi.Gdk
-
-local Goat = lgi.package 'Goat'
-local Goat = lgi.Goat
-
-function run(procedure, run_mode, image, drawables, args, run_data)
- -- procedure:new_return_values() crashes LGI so we construct the
- -- GimpValueArray manually.
- local retval = Gimp.ValueArray(1)
-
- if table.getn(drawables) ~= 1 then
- local calling_err = GObject.Value(Gimp.PDBStatusType, Gimp.PDBStatusType.CALLING_ERROR)
- local msg = "Procedure '%s' only works with one drawable."
-
- msg = string.format(msg, procedure:get_name())
-
- retval:append(calling_err)
- retval:append(GObject.Value(GObject.Type.STRING, msg))
- return retval
- end
-
- local drawable = drawables[1]
-
- -- Not sure why run_mode has become a string instead of testing
- -- against Gimp.RunMode.INTERACTIVE.
- if run_mode == "INTERACTIVE" then
- GimpUi.init("goat-exercise-lua");
- local dialog = GimpUi.Dialog {
- title = "Exercise a goat (Lua)",
- role = "goat-exercise-Lua",
- use_header_bar = 1
- }
- dialog:add_button("_Cancel", Gtk.ResponseType.CANCEL);
- dialog:add_button("_Source", Gtk.ResponseType.APPLY);
- dialog:add_button("_OK", Gtk.ResponseType.OK);
-
- local geometry = Gdk.Geometry()
- geometry.min_aspect = 0.5;
- geometry.max_aspect = 1.0;
- dialog:set_geometry_hints (nil, geometry, Gdk.WindowHints.ASPECT);
-
- local box = Gtk.Box {
- orientation = Gtk.Orientation.VERTICAL,
- spacing = 2
- }
- dialog:get_content_area():add(box)
- box:show()
-
- local lang = "Lua"
- local head_text = "This plug-in is an exercise in '%s' to demo plug-in creation.\n" ..
- "Check out the last version of the source code online by clicking the \"Source\" button."
-
- local label = Gtk.Label { label = string.format(head_text, lang) }
- box:pack_start(label, false, false, 1)
- label:show()
-
- local contents = GLib.file_get_contents(arg[0])
- if (contents) then
- local scrolled = Gtk.ScrolledWindow()
- scrolled:set_vexpand (true)
- box:pack_start(scrolled, true, true, 1)
- scrolled:show()
-
- local view = Gtk.TextView()
- view:set_wrap_mode(Gtk.WrapMode.WORD)
- view:set_editable(false)
- local buffer = view:get_buffer()
- buffer:set_text(contents, -1)
- scrolled:add(view)
- view:show()
- end
-
- while (true) do
- local response = dialog:run()
- local url = 'https://gitlab.gnome.org/GNOME/gimp/blob/master/extensions/goat-exercises/goat-exercise-lua.lua'
-
- if response == Gtk.ResponseType.OK then
- dialog:destroy()
- break
- elseif (response == Gtk.ResponseType.APPLY) then
- Gio.app_info_launch_default_for_uri(url, nil);
- else -- CANCEL, CLOSE, DELETE_EVENT
- dialog:destroy()
- local cancel = GObject.Value(Gimp.PDBStatusType, Gimp.PDBStatusType.CANCEL)
- retval:append(cancel)
- return retval
- end
- end
- end
-
- local x, y, width, height = drawable:mask_intersect()
- if width ~= nill and height ~= nil and width > 0 and height > 0 then
- Gegl.init(nil)
-
- local buffer = drawable:get_buffer()
- local shadow_buffer = drawable:get_shadow_buffer()
-
- local graph = Gegl.Node()
- local input = graph:create_child("gegl:buffer-source")
- input:set_property("buffer", GObject.Value(Gegl.Buffer, buffer))
- local invert = graph:create_child("gegl:invert")
- local output = graph:create_child("gegl:write-buffer")
- output:set_property("buffer", GObject.Value(Gegl.Buffer, shadow_buffer))
- input:link(invert)
- invert:link(output)
- output:process()
-
- shadow_buffer:flush()
-
- drawable:merge_shadow(true)
- drawable:update(x, y, width, height)
- Gimp.displays_flush()
- end
-
- local success = GObject.Value(Gimp.PDBStatusType, Gimp.PDBStatusType.SUCCESS)
- retval:append(success)
- return retval
-end
-
-Goat:class('Exercise', Gimp.PlugIn)
-
-function Goat.Exercise:do_query_procedures()
- return { 'plug-in-goat-exercise-lua' }
-end
-
-function Goat.Exercise:do_create_procedure(name)
- local procedure = Gimp.ImageProcedure.new(self, name,
- Gimp.PDBProcType.PLUGIN,
- run, nil)
-
- procedure:set_image_types("*");
- procedure:set_sensitivity_mask(Gimp.ProcedureSensitivityMask.DRAWABLE);
-
- procedure:set_menu_label("Exercise a Lua goat");
- procedure:set_icon_name(GimpUi.ICON_GEGL);
- procedure:add_menu_path('<Image>/Filters/Development/Goat exercises/');
-
- procedure:set_documentation("Exercise a goat in the Lua language",
- "Takes a goat for a walk in Lua",
- name);
- procedure:set_attribution("Jehan", "Jehan", "2019");
-
- return procedure
-end
-
--- 'arg' is a Lua table. When automatically converted to an array, the
--- value 0 is deleted (because Lua arrays start at 1!), which breaks
--- Gimp.main() call. So let's create our own array starting at 1.
-argv = {}
-for k, v in pairs(arg) do
- argv[k+1] = v
-end
-
-Gimp.main(GObject.Type.name(Goat.Exercise), argv)
diff -urNp a/extensions/goat-exercises/Makefile.am b/extensions/goat-exercises/Makefile.am
--- a/extensions/goat-exercises/Makefile.am 2022-03-09 09:39:44.007314944 +0100
+++ b/extensions/goat-exercises/Makefile.am 2022-03-09 10:27:14.623108639 +0100
@@ -72,10 +72,10 @@ endif
# Lua (lua-jit + LGI) version.
-if BUILD_LUA
-goat_exercise_luadir = $(goat_exercise_c_libexecdir)
-goat_exercise_lua_SCRIPTS = goat-exercise-lua.lua
-endif
+#if BUILD_LUA
+#goat_exercise_luadir = $(goat_exercise_c_libexecdir)
+#goat_exercise_lua_SCRIPTS = goat-exercise-lua.lua
+#endif
# Python 3 (pygobject) version.
@@ -135,7 +135,6 @@ org.gimp.extension.goat-exercises.metain
EXTRA_DIST = \
goat-exercise-gjs.js \
- goat-exercise-lua.lua \
goat-exercise-py3.py \
$(appstream_in_files)
diff -urNp a/extensions/goat-exercises/Makefile.in b/extensions/goat-exercises/Makefile.in
--- a/extensions/goat-exercises/Makefile.in 2022-03-09 09:39:44.006314936 +0100
+++ b/extensions/goat-exercises/Makefile.in 2022-03-09 10:28:59.224986448 +0100
@@ -118,7 +118,6 @@ CONFIG_CLEAN_VPATH_FILES =
am__installdirs = "$(DESTDIR)$(goat_exercise_c_libexecdir)" \
"$(DESTDIR)$(goat_exercise_vala_libexecdir)" \
"$(DESTDIR)$(goat_exercise_gjsdir)" \
- "$(DESTDIR)$(goat_exercise_luadir)" \
"$(DESTDIR)$(goat_exercise_py3dir)" "$(DESTDIR)$(appdatadir)" \
"$(DESTDIR)$(goat_exercise_c_libexecdir)" \
"$(DESTDIR)$(goat_exercise_vala_libexecdir)"
@@ -183,7 +182,7 @@ am__uninstall_files_from_dir = { \
|| { echo " ( cd '$$dir' && rm -f" $$files ")"; \
$(am__cd) "$$dir" && rm -f $$files; }; \
}
-SCRIPTS = $(goat_exercise_gjs_SCRIPTS) $(goat_exercise_lua_SCRIPTS) \
+SCRIPTS = $(goat_exercise_gjs_SCRIPTS) \
$(goat_exercise_py3_SCRIPTS)
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
@@ -753,8 +752,8 @@ goat_exercise_c_LDADD = \
@BUILD_JAVASCRIPT_TRUE@goat_exercise_gjs_SCRIPTS = goat-exercise-gjs.js
# Lua (lua-jit + LGI) version.
-@BUILD_LUA_TRUE@goat_exercise_luadir = $(goat_exercise_c_libexecdir)
-@BUILD_LUA_TRUE@goat_exercise_lua_SCRIPTS = goat-exercise-lua.lua
+#@BUILD_LUA_TRUE@goat_exercise_luadir = $(goat_exercise_c_libexecdir)
+#@BUILD_LUA_TRUE@goat_exercise_lua_SCRIPTS = goat-exercise-lua.lua
# Python 3 (pygobject) version.
@BUILD_PYTHON_TRUE@goat_exercise_py3dir = $(goat_exercise_c_libexecdir)
@@ -795,7 +794,6 @@ appdatadir = $(goat_exercise_c_libexecdi
appdata_DATA = $(appstream_files)
EXTRA_DIST = \
goat-exercise-gjs.js \
- goat-exercise-lua.lua \
goat-exercise-py3.py \
$(appstream_in_files)
@@ -977,41 +975,41 @@ uninstall-goat_exercise_gjsSCRIPTS:
files=`for p in $$list; do echo "$$p"; done | \
sed -e 's,.*/,,;$(transform)'`; \
dir='$(DESTDIR)$(goat_exercise_gjsdir)'; $(am__uninstall_files_from_dir)
-install-goat_exercise_luaSCRIPTS: $(goat_exercise_lua_SCRIPTS)
- @$(NORMAL_INSTALL)
- @list='$(goat_exercise_lua_SCRIPTS)'; test -n "$(goat_exercise_luadir)" || list=; \
- if test -n "$$list"; then \
- echo " $(MKDIR_P) '$(DESTDIR)$(goat_exercise_luadir)'"; \
- $(MKDIR_P) "$(DESTDIR)$(goat_exercise_luadir)" || exit 1; \
- fi; \
- for p in $$list; do \
- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
- if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
- done | \
- sed -e 'p;s,.*/,,;n' \
- -e 'h;s|.*|.|' \
- -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
- $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
- { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
- if ($$2 == $$4) { files[d] = files[d] " " $$1; \
- if (++n[d] == $(am__install_max)) { \
- print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
- else { print "f", d "/" $$4, $$1 } } \
- END { for (d in files) print "f", d, files[d] }' | \
- while read type dir files; do \
- if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
- test -z "$$files" || { \
- echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(goat_exercise_luadir)$$dir'"; \
- $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(goat_exercise_luadir)$$dir" || exit $$?; \
- } \
- ; done
-
-uninstall-goat_exercise_luaSCRIPTS:
- @$(NORMAL_UNINSTALL)
- @list='$(goat_exercise_lua_SCRIPTS)'; test -n "$(goat_exercise_luadir)" || exit 0; \
- files=`for p in $$list; do echo "$$p"; done | \
- sed -e 's,.*/,,;$(transform)'`; \
- dir='$(DESTDIR)$(goat_exercise_luadir)'; $(am__uninstall_files_from_dir)
+#install-goat_exercise_luaSCRIPTS: $(goat_exercise_lua_SCRIPTS)
+# @$(NORMAL_INSTALL)
+# @list='$(goat_exercise_lua_SCRIPTS)'; test -n "$(goat_exercise_luadir)" || list=; \
+# if test -n "$$list"; then \
+# echo " $(MKDIR_P) '$(DESTDIR)$(goat_exercise_luadir)'"; \
+# $(MKDIR_P) "$(DESTDIR)$(goat_exercise_luadir)" || exit 1; \
+# fi; \
+# for p in $$list; do \
+# if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+# if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+# done | \
+# sed -e 'p;s,.*/,,;n' \
+# -e 'h;s|.*|.|' \
+# -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+# $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+# { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+# if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+# if (++n[d] == $(am__install_max)) { \
+# print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+# else { print "f", d "/" $$4, $$1 } } \
+# END { for (d in files) print "f", d, files[d] }' | \
+# while read type dir files; do \
+# if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+# test -z "$$files" || { \
+# echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(goat_exercise_luadir)$$dir'"; \
+# $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(goat_exercise_luadir)$$dir" || exit $$?; \
+# } \
+# ; done
+
+#uninstall-goat_exercise_luaSCRIPTS:
+# @$(NORMAL_UNINSTALL)
+# @list='$(goat_exercise_lua_SCRIPTS)'; test -n "$(goat_exercise_luadir)" || exit 0; \
+# files=`for p in $$list; do echo "$$p"; done | \
+# sed -e 's,.*/,,;$(transform)'`; \
+# dir='$(DESTDIR)$(goat_exercise_luadir)'; $(am__uninstall_files_from_dir)
install-goat_exercise_py3SCRIPTS: $(goat_exercise_py3_SCRIPTS)
@$(NORMAL_INSTALL)
@list='$(goat_exercise_py3_SCRIPTS)'; test -n "$(goat_exercise_py3dir)" || list=; \
@@ -1266,7 +1264,7 @@ check-am: all-am
check: check-am
all-am: Makefile $(PROGRAMS) $(SCRIPTS) $(DATA)
installdirs:
- for dir in "$(DESTDIR)$(goat_exercise_c_libexecdir)" "$(DESTDIR)$(goat_exercise_vala_libexecdir)" "$(DESTDIR)$(goat_exercise_gjsdir)" "$(DESTDIR)$(goat_exercise_luadir)" "$(DESTDIR)$(goat_exercise_py3dir)" "$(DESTDIR)$(appdatadir)" "$(DESTDIR)$(goat_exercise_c_libexecdir)" "$(DESTDIR)$(goat_exercise_vala_libexecdir)"; do \
+ for dir in "$(DESTDIR)$(goat_exercise_c_libexecdir)" "$(DESTDIR)$(goat_exercise_vala_libexecdir)" "$(DESTDIR)$(goat_exercise_gjsdir)" "$(DESTDIR)$(goat_exercise_py3dir)" "$(DESTDIR)$(appdatadir)" "$(DESTDIR)$(goat_exercise_c_libexecdir)" "$(DESTDIR)$(goat_exercise_vala_libexecdir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-am
@@ -1330,7 +1328,6 @@ info: info-am
info-am:
install-data-am: install-appdataDATA install-goat_exercise_gjsSCRIPTS \
- install-goat_exercise_luaSCRIPTS \
install-goat_exercise_py3SCRIPTS
install-dvi: install-dvi-am
@@ -1385,7 +1382,6 @@ uninstall-am: uninstall-appdataDATA \
uninstall-goat_exercise_c_libexecDATA \
uninstall-goat_exercise_c_libexecPROGRAMS \
uninstall-goat_exercise_gjsSCRIPTS \
- uninstall-goat_exercise_luaSCRIPTS \
uninstall-goat_exercise_py3SCRIPTS \
uninstall-goat_exercise_vala_libexecDATA \
uninstall-goat_exercise_vala_libexecPROGRAMS
@@ -1403,7 +1399,6 @@ uninstall-am: uninstall-appdataDATA \
install-goat_exercise_c_libexecDATA \
install-goat_exercise_c_libexecPROGRAMS \
install-goat_exercise_gjsSCRIPTS \
- install-goat_exercise_luaSCRIPTS \
install-goat_exercise_py3SCRIPTS \
install-goat_exercise_vala_libexecDATA \
install-goat_exercise_vala_libexecPROGRAMS install-html \
@@ -1416,7 +1411,6 @@ uninstall-am: uninstall-appdataDATA \
uninstall-appdataDATA uninstall-goat_exercise_c_libexecDATA \
uninstall-goat_exercise_c_libexecPROGRAMS \
uninstall-goat_exercise_gjsSCRIPTS \
- uninstall-goat_exercise_luaSCRIPTS \
uninstall-goat_exercise_py3SCRIPTS \
uninstall-goat_exercise_vala_libexecDATA \
uninstall-goat_exercise_vala_libexecPROGRAMS

File diff suppressed because it is too large Load Diff