Hello community, here is the log from the commit of package netpbm for openSUSE:Factory checked in at Thu May 26 10:25:01 CEST 2011.
-------- --- netpbm/netpbm.changes 2010-11-16 15:26:26.000000000 +0100 +++ /mounts/work_src_done/STABLE/netpbm/netpbm.changes 2011-05-24 16:06:55.000000000 +0200 @@ -1,0 +2,15 @@ +Tue May 24 14:04:05 UTC 2011 - pgaj...@novell.com + +- updated to 10.35.80: + * asciitopgm: fix bug: memory corruption on too-long lines. + * asciitopgm: fix bug: improper handling of blank lines. + * pngtopnm: fix bug: -verbose reports history chunk present when + it's really a palette. + * bmptopnm: Don't crash on invalid zero value of image height in + the BMP header of a compressed file. + * bmptopnm: don't crash on large invalid value of 'colorsused' in + the BMP header. + * ilbmtoppm: Don't crash on image that has a transparent color + index, but no color map. + +------------------------------------------------------------------- calling whatdependson for head-i586 Old: ---- netpbm-10.35.77-documentation.tar.bz2 netpbm-10.35.77-fixes.patch netpbm-10.35.77-libpng14.patch netpbm-10.35.77-make.patch netpbm-10.35.77-manpages.patch netpbm-10.35.77-missing-file-close.patch netpbm-10.35.77-pamscale.patch netpbm-10.35.77-pnmtopng-CAN-2978.patch netpbm-10.35.77-security.patch netpbm-10.35.77-security2.patch netpbm-10.35.77-tmpfile.patch netpbm-10.35.77.tar.bz2 New: ---- netpbm-10.35.80-documentation.tar.bz2 netpbm-10.35.80-nohpcdtoppm-nojbig.tar.bz2 netpbm-fixes.patch netpbm-libpng14.patch netpbm-make.patch netpbm-manpages.patch netpbm-missing-file-close.patch netpbm-pamscale.patch netpbm-pnmtopng-CAN-2978.patch netpbm-security.patch netpbm-security2.patch netpbm-tmpfile.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ netpbm.spec ++++++ --- /var/tmp/diff_new_pack.qaumni/_old 2011-05-26 10:24:17.000000000 +0200 +++ /var/tmp/diff_new_pack.qaumni/_new 2011-05-26 10:24:17.000000000 +0200 @@ -1,7 +1,7 @@ # -# spec file for package netpbm (Version 10.35.77) +# spec file for package netpbm # -# Copyright (c) 2010 SUSE LINUX Products GmbH, Nuernberg, Germany. +# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -30,35 +30,35 @@ Obsoletes: netpbm-64bit %endif # -Version: 10.35.77 +Version: 10.35.80 Release: 1 Summary: A Powerful Graphics Conversion Package -Source: netpbm-%{version}.tar.bz2 +Source: netpbm-%{version}-nohpcdtoppm-nojbig.tar.bz2 Source1: netpbm-%{version}-documentation.tar.bz2 Source2: baselibs.conf Source3: prepare-src-tarball # SUSE specific -Patch0: %{name}-%{version}-make.patch +Patch0: %{name}-make.patch # partially upstreamed in development version -Patch1: %{name}-%{version}-manpages.patch +Patch1: %{name}-manpages.patch # refused by upstream -Patch2: %{name}-%{version}-security.patch +Patch2: %{name}-security.patch # refused by upstream -Patch3: %{name}-%{version}-security2.patch +Patch3: %{name}-security2.patch # refused by upstream -Patch4: %{name}-%{version}-pnmtopng-CAN-2978.patch +Patch4: %{name}-pnmtopng-CAN-2978.patch # don't know what it does so far -Patch5: %{name}-%{version}-tmpfile.patch +Patch5: %{name}-tmpfile.patch # upstreamed in development version -Patch6: %{name}-%{version}-fixes.patch +Patch6: %{name}-fixes.patch # upstreamed in development version (another way) -Patch7: %{name}-%{version}-pamscale.patch +Patch7: %{name}-pamscale.patch # upstreamed in development version -Patch8: %{name}-%{version}-missing-file-close.patch +Patch8: %{name}-missing-file-close.patch # no build date Patch9: netpbm-no-build-date.patch # new versions build against libpng14 -Patch10: %{name}-%{version}-libpng14.patch +Patch10: %{name}-libpng14.patch Url: http://netpbm.sourceforge.net BuildRoot: %{_tmppath}/%{name}-%{version}-build ++++++ netpbm-10.35.77-documentation.tar.bz2 -> netpbm-10.35.80-documentation.tar.bz2 ++++++ ++++ 6805 lines of diff (skipped) ++++++ netpbm-fixes.patch ++++++ Index: buildtools/Makefile =================================================================== --- buildtools/Makefile.orig +++ buildtools/Makefile @@ -34,10 +34,10 @@ libopt.o: libopt.c -o $@ $< typegen.o endiangen.o:%.o:%.c - $(CC_FOR_BUILD) -c $(CFLAGS_FOR_BUILD) -o $@ $< + $(CC_FOR_BUILD) $(CFLAGS) -c $(CFLAGS_FOR_BUILD) -o $@ $< $(PROGS):%:%.o - $(LD_FOR_BUILD) -o $@ $< + $(LD_FOR_BUILD) $(LDFLAGS) -o $@ $< distclean clean: cleanlocal .PHONY: cleanlocal Index: converter/other/fiasco/codec/dfiasco.c =================================================================== --- converter/other/fiasco/codec/dfiasco.c.orig +++ converter/other/fiasco/codec/dfiasco.c @@ -15,6 +15,7 @@ */ #include <string.h> +#include <stdlib.h> #include "config.h" Index: converter/other/fiasco/input/basis.c =================================================================== --- converter/other/fiasco/input/basis.c.orig +++ converter/other/fiasco/input/basis.c @@ -14,6 +14,7 @@ * $State: Exp $ */ +#include <string.h> #include "config.h" #include "types.h" Index: converter/other/fitstopnm.c =================================================================== --- converter/other/fitstopnm.c.orig +++ converter/other/fitstopnm.c @@ -444,7 +444,7 @@ read_val (fp, bitpix, vp) c[i] = ich; } swapbytes(c, 4); - *vp = *( (float *) c); + memcpy(vp, c, 4); break; case -64: @@ -455,7 +455,7 @@ read_val (fp, bitpix, vp) c[i] = ich; } swapbytes(c, 8); - *vp = *( (double *) c); + memcpy(vp, c, 8); break; default: Index: converter/other/jpegtopnm.c =================================================================== --- converter/other/jpegtopnm.c.orig +++ converter/other/jpegtopnm.c @@ -511,6 +511,7 @@ set_color_spaces(const J_COLOR_SPACE jpe pm_error("Input JPEG image has 'unknown' color space " "(JCS_UNKNOWN).\n" "We cannot interpret this image."); + *output_type_p = PPM_TYPE; /* not reached */ break; case JCS_GRAYSCALE: *output_type_p = PGM_TYPE; @@ -538,6 +539,7 @@ set_color_spaces(const J_COLOR_SPACE jpe default: pm_error("Internal error: unknown color space code %d passed " "to set_color_spaces().", jpeg_color_space); + *output_type_p = PPM_TYPE; /* not reached */ } pm_message("WRITING %s FILE", *output_type_p == PPM_TYPE ? "PPM" : "PGM"); Index: converter/other/pamtopfm.c =================================================================== --- converter/other/pamtopfm.c.orig +++ converter/other/pamtopfm.c @@ -149,12 +149,12 @@ floatToPfmSample(float const input Type converter -----------------------------------------------------------------------------*/ if (machineEndianness == pfmEndianness) { - *(float *)outputP->bytes = input; + memcpy(outputP->bytes, &input, sizeof(float)); } else { unsigned char reversed[sizeof(pfmSample)]; unsigned int i, j; - *(float *)reversed = input; + memcpy(reversed, &input, sizeof(float)); for (i = 0, j = sizeof(pfmSample)-1; i < sizeof(pfmSample); @@ -239,6 +239,7 @@ makePfmHeader(const struct pam * const p enum endian const endian) { struct pfmHeader pfmHeader; + memset(&pfmHeader, 0, sizeof(pfmHeader)); pfmHeader.width = pamP->width; pfmHeader.height = pamP->height; Index: converter/other/pamtosvg/curve.c =================================================================== --- converter/other/pamtosvg/curve.c.orig +++ converter/other/pamtosvg/curve.c @@ -222,9 +222,7 @@ curve_list_type new_curve_list (void) { curve_list_type curve_list; - - curve_list.length = 0; - curve_list.data = NULL; + memset(&curve_list, 0, sizeof(curve_list)); return curve_list; } Index: converter/other/pamtosvg/pxl-outline.c =================================================================== --- converter/other/pamtosvg/pxl-outline.c.orig +++ converter/other/pamtosvg/pxl-outline.c @@ -262,6 +262,9 @@ find_one_centerline(bitmap_type const outline.open = false; outline.color = getBitmapColor(bitmap, original_row, original_col); + search_dir = original_dir; /* initial value */ + row = original_row; /* initial value */ + col = original_col; /* initial values */ /* Add the starting pixel to the output list, changing from bitmap to Cartesian coordinates and specifying the left edge so that the coordinates won't be adjusted. @@ -272,9 +275,6 @@ find_one_centerline(bitmap_type const LOG2(" (%d,%d)", pos.col, pos.row); append_outline_pixel(&outline, pos); } - search_dir = original_dir; /* initial value */ - row = original_row; /* initial value */ - col = original_col; /* initial values */ for ( ; ; ) { unsigned int const prev_row = row; @@ -527,6 +527,7 @@ new_pixel_outline (void) { pixel_outline_type pixel_outline; + memset(&pixel_outline, 0, sizeof(pixel_outline)); O_LENGTH (pixel_outline) = 0; pixel_outline.data = NULL; pixel_outline.open = false; Index: converter/other/pamtosvg/spline.c =================================================================== --- converter/other/pamtosvg/spline.c.orig +++ converter/other/pamtosvg/spline.c @@ -80,6 +80,7 @@ spline_list_type empty_spline_list (void) { spline_list_type answer; + memset(&answer, 0, sizeof(answer)); SPLINE_LIST_DATA (answer) = NULL; SPLINE_LIST_LENGTH (answer) = 0; return answer; @@ -153,6 +154,7 @@ spline_list_array_type new_spline_list_array (void) { spline_list_array_type answer; + memset(&answer, 0, sizeof(answer)); SPLINE_LIST_ARRAY_DATA (answer) = NULL; SPLINE_LIST_ARRAY_LENGTH (answer) = 0; Index: converter/other/pamtouil.c =================================================================== --- converter/other/pamtouil.c.orig +++ converter/other/pamtouil.c @@ -376,11 +376,15 @@ freeCmap(cixel_map cmap[], unsigned int int i; for (i = 0; i < ncolors; ++i) { - cixel_map const cmapEntry = cmap[i]; - if (cmapEntry.uilname) + cixel_map cmapEntry = cmap[i]; + if (cmapEntry.uilname) { freeString(cmapEntry.uilname); - if (cmapEntry.rgbname) + cmapEntry.uilname = NULL; + } + if (cmapEntry.rgbname) { freeString(cmapEntry.rgbname); + cmapEntry.rgbname = NULL; + } } } Index: converter/other/pgmtopbm.c =================================================================== --- converter/other/pgmtopbm.c.orig +++ converter/other/pgmtopbm.c @@ -549,6 +549,8 @@ createDither8Converter(unsigned int cons converter.cols = cols; converter.convertRow = &dither8ConvertRow; converter.destroy = NULL; + converter.stateP = NULL; + converter.maxval = 0; /* Scale dither matrix. */ for (row = 0; row < 16; ++row) { @@ -622,6 +624,7 @@ createClusterConverter(unsigned int cons converter.cols = cols; converter.convertRow = &clusterConvertRow; converter.destroy = &clusterDestroy; + converter.maxval = 0; MALLOCVAR_NOFAIL(stateP); Index: converter/other/pnmtopng.c =================================================================== --- converter/other/pnmtopng.c.orig +++ converter/other/pnmtopng.c @@ -513,6 +513,7 @@ xelToPngColor_16(xel const input, retval.green = PPM_GETG(scaled); retval.blue = PPM_GETB(scaled); retval.gray = PNM_GET1(scaled); + retval.index = 0; return retval; } Index: converter/other/rletopnm.c =================================================================== --- converter/other/rletopnm.c.orig +++ converter/other/rletopnm.c @@ -101,7 +101,7 @@ parseCommandLine(int argc, char ** argv, optStruct3 opt; unsigned int option_def_index; - unsigned int alphaoutSpec; + unsigned int alphaoutSpec = 0; MALLOCARRAY(option_def, 100); Index: converter/ppm/ximtoppm.c =================================================================== --- converter/ppm/ximtoppm.c.orig +++ converter/ppm/ximtoppm.c @@ -44,7 +44,7 @@ parseCommandLine(int argc, char ** argv, unsigned int option_def_index; - unsigned int alphaoutSpec; + unsigned int alphaoutSpec = 0; option_def_index = 0; /* incremented by OPTENT3 */ OPTENT3(0, "alphaout", OPT_STRING, Index: lib/pm.h =================================================================== --- lib/pm.h.orig +++ lib/pm.h @@ -21,6 +21,7 @@ #include <errno.h> #include <setjmp.h> #include <sys/stat.h> +#include <string.h> #ifdef VMS #include <perror.h> Index: lib/util/wordaccess_64_le.h =================================================================== --- lib/util/wordaccess_64_le.h.orig +++ lib/util/wordaccess_64_le.h @@ -49,4 +49,5 @@ wordintClz(wordint const x){ return (__builtin_clzll((long long int)x << (s - 8) * 8)); else pm_error("Long long int is less than 64 bits on this machine"); + return 0; /* unreached */ } Index: converter/other/fiasco/lib/image.c =================================================================== --- converter/other/fiasco/lib/image.c.orig +++ converter/other/fiasco/lib/image.c @@ -239,7 +239,7 @@ alloc_image (unsigned width, unsigned he image->format = format; image->reference_count = 1; - strcpy (image->id, "IFIASCO"); + strncpy (image->id, "IFIASCO", 7); for (band = first_band (color); band <= last_band (color); band++) if (format == FORMAT_4_2_0 && band != Y) ++++++ netpbm-libpng14.patch ++++++ Index: netpbm-10.35.80/converter/other/pngtopnm.c =================================================================== --- netpbm-10.35.80.orig/converter/other/pngtopnm.c +++ netpbm-10.35.80/converter/other/pngtopnm.c @@ -44,12 +44,6 @@ #include "nstring.h" #include "shhopt.h" -#if PNG_LIBPNG_VER >= 10400 -#error Your PNG library (<png.h>) is incompatible with this Netpbm source code. -#error You need either an older PNG library (older than 1.4) -#error newer Netpbm source code (at least 10.48) -#endif - typedef struct _jmpbuf_wrapper { jmp_buf jmpbuf; } jmpbuf_wrapper; @@ -482,7 +476,7 @@ isTransparentColor(pngcolor const colo bool retval; if (info_ptr->valid & PNG_INFO_tRNS) { - const png_color_16 * const transColorP = &info_ptr->trans_values; + const png_color_16 * const transColorP = &info_ptr->trans_color; /* There seems to be a problem here: you can't compare real @@ -575,8 +569,8 @@ paletteHasPartialTransparency(png_info * for (i = 0, foundGray = FALSE; i < info_ptr->num_trans && !foundGray; ++i) { - if (info_ptr->trans[i] != 0 && - info_ptr->trans[i] != maxval) { + if (info_ptr->trans_alpha[i] != 0 && + info_ptr->trans_alpha[i] != maxval) { foundGray = TRUE; } } @@ -647,7 +641,7 @@ setupSignificantBits(png_struct * unsigned int i; trans_mix = TRUE; for (i = 0; i < info_ptr->num_trans; ++i) - if (info_ptr->trans[i] != 0 && info_ptr->trans[i] != 255) { + if (info_ptr->trans_alpha[i] != 0 && info_ptr->trans_alpha[i] != 255) { trans_mix = FALSE; break; } @@ -885,7 +879,7 @@ writePnm(FILE * const ofP, setXel(&xelrow[col], fgColor, bgColor, alpha_handling, ((info_ptr->valid & PNG_INFO_tRNS) && (fgColor.r == - gamma_correct(info_ptr->trans_values.gray, + gamma_correct(info_ptr->trans_color.gray, totalgamma))) ? 0 : maxval); } @@ -914,7 +908,7 @@ writePnm(FILE * const ofP, setXel(&xelrow[col], fgColor, bgColor, alpha_handling, (info_ptr->valid & PNG_INFO_tRNS) && index < info_ptr->num_trans ? - info_ptr->trans[index] : maxval); + info_ptr->trans_alpha[index] : maxval); } break; Index: netpbm-10.35.80/converter/other/pnmtopng.c =================================================================== --- netpbm-10.35.80.orig/converter/other/pnmtopng.c +++ netpbm-10.35.80/converter/other/pnmtopng.c @@ -69,13 +69,6 @@ #include "nstring.h" #include "version.h" -#if PNG_LIBPNG_VER >= 10400 -#error Your PNG library (<png.h>) is incompatible with this Netpbm source code. -#error You need either an older PNG library (older than 1.4) -#error newer Netpbm source code (at least 10.47.04) -#endif - - struct zlibCompression { /* These are parameters that describe a form of zlib compression. Values have the same meaning as the similarly named arguments to @@ -2612,7 +2605,7 @@ convertpnm(struct cmdlineInfo const cmdl info_ptr->num_palette = palette_size; if (trans_size > 0) { info_ptr->valid |= PNG_INFO_tRNS; - info_ptr->trans = trans; + info_ptr->trans_alpha = trans; info_ptr->num_trans = trans_size; /* omit opaque values */ } /* creating hIST chunk */ @@ -2649,7 +2642,7 @@ convertpnm(struct cmdlineInfo const cmdl info_ptr->color_type == PNG_COLOR_TYPE_RGB) { if (transparent > 0) { info_ptr->valid |= PNG_INFO_tRNS; - info_ptr->trans_values = + info_ptr->trans_color = xelToPngColor_16(transcolor, maxval, png_maxval); } } else { @@ -2661,10 +2654,10 @@ convertpnm(struct cmdlineInfo const cmdl if (info_ptr->valid && PNG_INFO_tRNS) pm_message("Transparent color {gray, red, green, blue} = " "{%d, %d, %d, %d}", - info_ptr->trans_values.gray, - info_ptr->trans_values.red, - info_ptr->trans_values.green, - info_ptr->trans_values.blue); + info_ptr->trans_color.gray, + info_ptr->trans_color.red, + info_ptr->trans_color.green, + info_ptr->trans_color.blue); else pm_message("No transparent color"); } ++++++ netpbm-make.patch ++++++ --- Makefile.config.in +++ Makefile.config.in @@ -108,7 +108,7 @@ #OSF1: #INSTALL = $(SRCDIR)/buildtools/installosf #Red Hat Linux: -#INSTALL = install +INSTALL = install # STRIPFLAG is the option you pass to the above install program to make it # strip unnecessary information out of binaries. @@ -283,7 +283,7 @@ CFLAGS_SHLIB = # Gcc: #CFLAGS_SHLIB = -fpic -#CFLAGS_SHLIB = -fPIC +CFLAGS_SHLIB = -fPIC # Sun compiler: #CFLAGS_SHLIB = -Kpic #CFLAGS_SHLIB = -KPIC @@ -350,7 +350,7 @@ # The TIFF library. See above. If you want to build the tiff # converters, you must have the tiff library already installed. -TIFFLIB = NONE +TIFFLIB = libtiff.so TIFFHDR_DIR = #TIFFLIB = libtiff.so @@ -382,7 +382,7 @@ # JPEG stuff statically linked in, in which case you won't need # JPEGLIB in order to build the Tiff converters. -JPEGLIB = NONE +JPEGLIB = libjpeg.so JPEGHDR_DIR = #JPEGLIB = libjpeg.so #JPEGHDR_DIR = /usr/include/jpeg @@ -432,7 +432,7 @@ # # If you have 'libpng-config' (see above), these are irrelevant. -ZLIB = NONE +ZLIB = libz.so ZHDR_DIR = #ZLIB = libz.so ++++++ netpbm-manpages.patch ++++++ --- buildtools/makeman +++ buildtools/makeman @@ -1,4 +1,4 @@ -#!/bin/env python +#!/usr/bin/python # # makeman -- compile netpbm's stereotyped HTML to troff markup # @@ -95,6 +95,8 @@ indoc = re.sub("(?i)\n *</PRE>", "\n.fi", indoc) indoc = re.sub("(?i)\n *<BLOCKQUOTE>", "\n.nf", indoc) indoc = re.sub("(?i)\n *</BLOCKQUOTE>", "\n.fi", indoc) + indoc = re.sub("(?i)\n *<code>", "\n.nf", indoc) + indoc = re.sub("(?i)\n *</code>", "\n.fi", indoc) # Highlight processing indoc = re.sub("(?i)<B>", r"\\fB", indoc) indoc = re.sub("(?i)</B>", r"\\fP", indoc) @@ -114,7 +116,10 @@ indoc = re.sub("(?i)</SUP>", r"\\d", indoc) # Paragraph handling indoc = re.sub("(?i)\n*<P>\n*", r"\n.PP\n", indoc) + indoc = re.sub("(?i)<br */>", r"\n.PP\n", indoc) indoc = re.sub("(?i)</P>", "", indoc) + indoc = re.sub("(?i)<!--[^>]*-->", "", indoc) + indoc = re.sub("(?i)<meta[^>]*>", "", indoc) lines = indoc.split("\n") listdepth = 0 for i in range(len(lines)): @@ -131,13 +136,14 @@ indoc = re.sub('(?i)<A[ \n]+HREF="mailto:[^>]+">([^<]+)</A>', r'\\fI\1\\fP', indoc) # Format manual crossreferences def xrefmatch(match): - xrefto = match.group(1) - xrefsection = sectmap.get(xrefto, 1) + xrefto = match.group(2) + xrefurl = match.group(1) + xrefsection = sectmap.get(xrefurl, 1) if xrefsection == 0: return "\n.I " + xrefto else: - return "\n.BR %s (%d)" % (xrefto, xrefsection) - indoc = re.sub(r'(?i)\n* *(?:\\fB)?<A[ \n]+HREF="[^>]+.html">([^<]+)</A>(?:\\fP)?', + return "\n.BR %s (%d)\n" % (xrefto, xrefsection) + indoc = re.sub(r'(?i)\n* *(?:\\fB)?<A[ \n]+HREF="?([^>]+.html)"?>([^<]+)</A>(?:\\fP)?', xrefmatch, indoc) # Format URLs def urlmatch(match): @@ -151,7 +157,7 @@ indoc = indoc.replace("×", r"\(mu") indoc = indoc.replace("®", r"\*R") # Turn anchors into .UN tags - indoc = re.sub('(?i)<A NAME *= *"#?([a-zA-Z][a-zA-Z0-9.-]+)">(?: )*</A>\s*', ".UN \\1\n", indoc) + indoc = re.sub('(?i)<A NAME *= *"#?([a-zA-Z_][a-zA-Z_0-9.-]+)">(?: )*</A>\s*', ".UN \\1\n", indoc) # Strip off the index trailer trailer = re.compile('<HR */*>.*', re.DOTALL | re.IGNORECASE) indoc = re.sub(trailer, "", indoc) @@ -159,17 +165,17 @@ indoc = indoc.replace("</BODY>", "").replace("</HTML>", "") indoc = indoc.replace("</body>", "").replace("</html>", "") # Recognize sections with IDs - indoc = re.sub('(?i)<H2><A (?:ID|NAME)="([a-zA-Z]+)">([^><]*)</A></H2>', + indoc = re.sub('(?i)<H2><A (?:ID|NAME)="([a-zA-Z_0-9]+)">([^><]*)</A></H2>', ".UN \\1\n.SH \\2", indoc) - indoc = re.sub('(?i)<H3><A (?:ID|NAME)="([a-zA-Z]+)">([^><]*)</A></H3>', + indoc = re.sub('(?i)<H3><A (?:ID|NAME)="([a-zA-Z_0-9]+)">([^><]*)</A></H3>', ".UN \\1\n.SS \\2", indoc) - indoc = re.sub('(?i)<H4><A (?:ID|NAME)="([a-zA-Z]+)">([^><]*)</A></H4>', + indoc = re.sub('(?i)<H4><A (?:ID|NAME)="([a-zA-Z_0-9]+)">([^><]*)</A></H4>', ".UN \\1\n.B \\2", indoc) - indoc = re.sub('(?i)<H2 (?:ID|NAME)="([a-zA-Z]+)">([^><]*)</H2>', + indoc = re.sub('(?i)<H2 (?:ID|NAME)="([a-zA-Z_0-9]+)">([^><]*)</H2>', ".UN \\1\n.SH \\2", indoc) - indoc = re.sub('(?i)<H3 (?:ID|NAME)="([a-zA-Z]+)">([^><]*)</H3>', + indoc = re.sub('(?i)<H3 (?:ID|NAME)="([a-zA-Z_0-9]+)">([^><]*)</H3>', ".UN \\1\n.SS \\2", indoc) - indoc = re.sub('(?i)<H4 (?:ID|NAME)="([a-zA-Z]+)">([^><]*)</H4>', + indoc = re.sub('(?i)<H4 (?:ID|NAME)="([a-zA-Z_0-9]+)">([^><]*)</H4>', ".UN \\1\n.B \\2", indoc) # Sections without IDs indoc = re.sub('(?i)<H2>([^><]*)</H2>', ".SH \\1", indoc) ++++++ netpbm-missing-file-close.patch ++++++ --- lib/libpm.c +++ lib/libpm.c @@ -533,6 +533,8 @@ else pm_message("This program is part of the Netpbm package. Find " "documentation for it at %s/%s\n", docurl, progname); + + fclose(netpbmConfigFile); } ++++++ netpbm-pamscale.patch ++++++ --- editor/pamscale.c +++ editor/pamscale.c @@ -595,6 +595,8 @@ const char *filterOpt, *window; unsigned int filterSpec, windowSpec; + memset(cmdlineP, 0, sizeof(struct cmdlineInfo)); + MALLOCARRAY_NOFAIL(option_def, 100); option_def_index = 0; /* incremented by OPTENT3 */ ++++++ netpbm-pnmtopng-CAN-2978.patch ++++++ --- converter/other/pnmtopng.c +++ converter/other/pnmtopng.c @@ -521,7 +521,7 @@ unsigned int * const bestMatchP) { unsigned int paletteIndex; - unsigned int bestIndex; + unsigned int bestIndex = 0; unsigned int bestMatch; assert(paletteSize > 0); @@ -2342,7 +2342,7 @@ /* The color part of the color/alpha palette passed to the PNG compressor */ - unsigned int palette_size; + unsigned int palette_size = MAXCOLORS; gray trans_pnm[MAXCOLORS]; png_byte trans[MAXCOLORS]; ++++++ netpbm-security.patch ++++++ ++++ 1847 lines (skipped) ++++++ netpbm-security2.patch ++++++ --- netpbm-10.35.64/converter/other/anytopnm +++ netpbm-10.35.64/converter/other/anytopnm @@ -506,11 +506,7 @@ inputFile="-" fi -tempdir="${TMPDIR-/tmp}/anytopnm.$$" -mkdir $tempdir || { echo "Could not create temporary file. Exiting."; exit 1;} -chmod 700 $tempdir - -trap 'rm -rf $tempdir' 0 +tempdir=$(mktemp -d -t anytopnm.XXXXXXXXXX) || exit 1 # Take out all spaces # Find the filename extension for last-ditch efforts later @@ -536,9 +532,17 @@ echo "$progname: unknown file type. " \ "'file' says mime type is '$mimeType', " 1>&2 echo "type description is '$typeDescription'" 1>&2 + if [ -d "$tempdir" ] ; then + rm -rf "$tempdir" + fi + exit 1 fi convertIt $file $filetype +if [ -d "$tempdir" ] ; then + rm -rf "$tempdir" +fi + exit 0 --- netpbm-10.35.64/editor/pamstretch-gen +++ netpbm-10.35.64/editor/pamstretch-gen @@ -31,10 +31,7 @@ exit 1 fi -tempdir="${TMPDIR-/tmp}/pamstretch-gen.$$" -mkdir $tempdir || { echo "Could not create temporary file. Exiting."; exit 1;} -chmod 700 $tempdir -tempfile=$tempdir/pnmig +tempfile=$(mktemp /tmp/pnmig.XXXXXXXXXX) || exit 1 trap 'rm -rf $tempdir' 0 1 3 15 --- netpbm-10.35.64/editor/pnmmargin +++ netpbm-10.35.64/editor/pnmmargin @@ -11,16 +11,11 @@ # documentation. This software is provided "as is" without express or # implied warranty. -tempdir="${TMPDIR-/tmp}/pnmmargin.$$" -mkdir $tempdir || { echo "Could not create temporary file. Exiting."; exit 1;} -chmod 700 $tempdir - -trap 'rm -rf $tempdir' 0 1 3 15 - -tmp1=$tempdir/pnmm1 -tmp2=$tempdir/pnmm2 -tmp3=$tempdir/pnmm3 -tmp4=$tempdir/pnmm4 +tmpdir=$(mktemp -d -t ppmmargin.XXXXXXX) || exit 1 +tmp1="$tmpdir/tmp1" +tmp2="$tmpdir/tmp2" +tmp3="$tmpdir/tmp3" +tmp4="$tmpdir/tmp4" color="-gofigure" @@ -39,6 +34,9 @@ shift if [ ! ${1-""} ] ; then echo "usage: $0 [-white|-black|-color <colorspec>] <size> [pnmfile]" 1>&2 + if [ -d "$tmpdir" ]; then + rm -rf "$tmpdir" + fi exit 1 fi color="$1" @@ -46,6 +44,9 @@ ;; -* ) echo "usage: $0 [-white|-black|-color <colorspec>] <size> [pnmfile]" 1>&2 + if [ -d "$tmpdir" ]; then + rm -rf "$tmpdir" + fi exit 1 ;; * ) @@ -56,6 +57,9 @@ if [ ! ${1-""} ] ; then echo "usage: $0 [-white|-black|-color <colorspec>] <size> [pnmfile]" 1>&2 + if [ -d "$tmpdir" ]; then + rm -rf "$tmpdir" + fi exit 1 fi size="$1" @@ -63,6 +67,9 @@ if [ ${2-""} ] ; then echo "usage: $0 [-white|-black|-color <colorspec>] <size> [pnmfile]" 1>&2 + if [ -d "$tmpdir" ]; then + rm -rf "$tmpdir" + fi exit 1 fi @@ -86,3 +93,7 @@ # Cat things together. pnmcat -lr $tmp2 $tmp1 $tmp2 > $tmp4 pnmcat -tb $tmp3 $tmp4 $tmp3 + +if [ -d "$tmpdir" ]; then + rm -rf "$tmpdir" +fi --- netpbm-10.35.64/editor/ppmfade +++ netpbm-10.35.64/editor/ppmfade @@ -14,6 +14,7 @@ # #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- use strict; +use File::Temp "tempdir"; my $SPREAD = 1; my $SHIFT = 2; @@ -118,20 +119,26 @@ print("Frames are " . $width . "W x " . $height . "H\n"); +# +# We create a tmp-directory right here +# +my $tmpdir = tempdir("ppmfade.XXXXXX", CLEANUP => 1); + + if ($first_file eq "undefined") { print "Fading from black to "; - system("ppmmake \\#000 $width $height >junk1$$.ppm"); + system("ppmmake \\#000 $width $height >$tmpdir/junk1$$.ppm"); } else { print "Fading from $first_file to "; - system("cp", $first_file, "junk1$$.ppm"); + system("cp", $first_file, "$tmpdir/junk1$$.ppm"); } if ($last_file eq "undefined") { print "black.\n"; - system("ppmmake \\#000 $width $height >junk2$$.ppm"); + system("ppmmake \\#000 $width $height >$tmpdir/junk2$$.ppm"); } else { print "$last_file\n"; - system("cp", $last_file, "junk2$$.ppm"); + system("cp", $last_file, "$tmpdir/junk2$$.ppm"); } # @@ -139,14 +146,14 @@ # # Here's what our temporary files are: -# junk1$$.ppm: The original (fade-from) image -# junk2$$.ppm: The target (fade-from) image -# junk3$$.ppm: The frame of the fade for the current iteration of the -# the for loop. -# junk1a$$.ppm: If the fade involves a ppmmix sequence from one intermediate -# image to another, this is the first frame of that -# sequence. -# junk2a$$.ppm: This is the last frame of the above-mentioned ppmmix sequence +# $tmpdir/junk1$$.ppm: The original (fade-from) image +# $tmpdir/junk2$$.ppm: The target (fade-from) image +# $tmpdir/junk3$$.ppm: The frame of the fade for the current iteration of the +# the for loop. +# $tmpdir/junk1a$$.ppm: If the fade involves a ppmmix sequence from one intermediate +# image to another, this is the first frame of that +# sequence. +# $tmpdir/junk2a$$.ppm: This is the last frame of the above-mentioned ppmmix sequence my $i; # Frame number for ($i = 1; $i <= $nframes; $i++) { @@ -154,148 +161,148 @@ if ($mode eq $SPREAD) { if ($i <= 10) { my $n = $spline20[$i] * 100; - system("ppmspread $n junk1$$.ppm >junk3$$.ppm"); + system("ppmspread $n $tmpdir/junk1$$.ppm >$tmpdir/junk3$$.ppm"); } elsif ($i <= 20) { my $n; $n = $spline20[$i] * 100; - system("ppmspread $n junk1$$.ppm >junk1a$$.ppm"); + system("ppmspread $n $tmpdir/junk1$$.ppm >$tmpdir/junk1a$$.ppm"); $n = (1-$spline20[$i-10]) * 100; - system("ppmspread $n junk2$$.ppm >junk2a$$.ppm"); + system("ppmspread $n $tmpdir/junk2$$.ppm >$tmpdir/junk2a$$.ppm"); $n = $spline10[$i-10]; - system("ppmmix $n junk1a$$.ppm junk2a$$.ppm >junk3$$.ppm"); + system("ppmmix $n $tmpdir/junk1a$$.ppm $tmpdir/junk2a$$.ppm >$tmpdir/junk3$$.ppm"); } else { my $n = (1-$spline20[$i-10])*100; - system("ppmspread $n junk2$$.ppm >junk3$$.ppm"); + system("ppmspread $n $tmpdir/junk2$$.ppm >$tmpdir/junk3$$.ppm"); } } elsif ($mode eq $SHIFT) { if ($i <= 10) { my $n = $spline20[$i] * 100; - system("ppmshift $n junk1$$.ppm >junk3$$.ppm"); + system("ppmshift $n $tmpdir/junk1$$.ppm >$tmpdir/junk3$$.ppm"); } elsif ($i <= 20) { my $n; $n = $spline20[$i] * 100; - system("ppmshift $n junk1$$.ppm >junk1a$$.ppm"); + system("ppmshift $n $tmpdir/junk1$$.ppm >$tmpdir/junk1a$$.ppm"); $n = (1-$spline20[$i-10])*100; - system("ppmshift $n junk2$$.ppm >junk2a$$.ppm"); + system("ppmshift $n $tmpdir/junk2$$.ppm >$tmpdir/junk2a$$.ppm"); $n = $spline10[$i-10]; - system("ppmmix $n junk1a$$.ppm junk2a$$.ppm >junk3$$.ppm"); + system("ppmmix $n $tmpdir/junk1a$$.ppm $tmpdir/junk2a$$.ppm >$tmpdir/junk3$$.ppm"); } else { my $n = (1-$spline20[$i-10]) * 100; - system("ppmshift $n junk2$$.ppm >junk3$$.ppm"); + system("ppmshift $n $tmpdir/junk2$$.ppm >$tmpdir/junk3$$.ppm"); } } elsif ($mode eq $RELIEF) { if ($i == 1) { - system("ppmrelief junk1$$.ppm >junk1r$$.ppm"); + system("ppmrelief $tmpdir/junk1$$.ppm >$tmpdir/junk1r$$.ppm"); } if ($i <= 10) { my $n = $spline10[$i]; - system("ppmmix $n junk1$$.ppm junk1r$$.ppm >junk3$$.ppm"); + system("ppmmix $n $tmpdir/junk1$$.ppm $tmpdir/junk1r$$.ppm >$tmpdir/junk3$$.ppm"); } elsif ($i <= 20) { my $n = $spline10[$i-10]; - system("ppmmix $n junk1r$$.ppm junk2r$$.ppm >junk3$$.ppm"); + system("ppmmix $n $tmpdir/junk1r$$.ppm $tmpdir/junk2r$$.ppm >$tmpdir/junk3$$.ppm"); } else { my $n = $spline10[$i-20]; - system("ppmmix $n junk2r$$.ppm junk2$$.ppm >junk3$$.ppm"); + system("ppmmix $n $tmpdir/junk2r$$.ppm $tmpdir/junk2$$.ppm >$tmpdir/junk3$$.ppm"); } if ($i == 10) { - system("ppmrelief junk2$$.ppm >junk2r$$.ppm"); + system("ppmrelief $tmpdir/junk2$$.ppm >$tmpdir/junk2r$$.ppm"); } } elsif ($mode eq $OIL) { if ($i == 1) { - system("ppmtopgm junk1$$.ppm | pgmoil >junko$$.ppm"); - system("rgb3toppm junko$$.ppm junko$$.ppm junko$$.ppm " . - ">junk1o$$.ppm"); + system("ppmtopgm $tmpdir/junk1$$.ppm | pgmoil >$tmpdir/junko$$.ppm"); + system("rgb3toppm $tmpdir/junko$$.ppm $tmpdir/junko$$.ppm $tmpdir/junko$$.ppm " . + ">$tmpdir/junk1o$$.ppm"); } if ($i <= 10) { my $n = $spline10[$i]; - system("ppmmix $n junk1$$.ppm junk1o$$.ppm >junk3$$.ppm"); + system("ppmmix $n $tmpdir/junk1$$.ppm $tmpdir/junk1o$$.ppm >$tmpdir/junk3$$.ppm"); } elsif ($i <= 20) { my $n = $spline10[$i-10]; - system("ppmmix $n junk1o$$.ppm junk2o$$.ppm >junk3$$.ppm"); + system("ppmmix $n $tmpdir/junk1o$$.ppm $tmpdir/junk2o$$.ppm >$tmpdir/junk3$$.ppm"); } else { my $n = $spline10[$i-20]; - system("ppmmix $n junk2o$$.ppm junk2$$.ppm >junk3$$.ppm"); + system("ppmmix $n $tmpdir/junk2o$$.ppm $tmpdir/junk2$$.ppm >$tmpdir/junk3$$.ppm"); } if ($i == 10) { - system("ppmtopgm junk2$$.ppm | pgmoil >junko$$.ppm"); - system("rgb3toppm junko$$.ppm junko$$.ppm junko$$.ppm " . - ">junk2o$$.ppm"); + system("ppmtopgm $tmpdir/junk2$$.ppm | pgmoil >$tmpdir/junko$$.ppm"); + system("rgb3toppm $tmpdir/junko$$.ppm $tmpdir/junko$$.ppm $tmpdir/junko$$.ppm " . + ">$tmpdir/junk2o$$.ppm"); } } elsif ($mode eq $EDGE) { if ($i == 1) { - system("ppmtopgm junk1$$.ppm | pgmedge >junko$$.ppm"); - system("rgb3toppm junko$$.ppm junko$$.ppm junko$$.ppm " . - ">junk1o$$.ppm"); + system("ppmtopgm $tmpdir/junk1$$.ppm | pgmedge >$tmpdir/junko$$.ppm"); + system("rgb3toppm $tmpdir/junko$$.ppm $tmpdir/junko$$.ppm $tmpdir/junko$$.ppm " . + ">$tmpdir/junk1o$$.ppm"); } if ($i <= 10) { my $n = $spline10[$i]; - system("ppmmix $n junk1$$.ppm junk1o$$.ppm >junk3$$.ppm"); + system("ppmmix $n $tmpdir/junk1$$.ppm $tmpdir/junk1o$$.ppm >$tmpdir/junk3$$.ppm"); } elsif ($i <= 20) { my $n = $spline10[$i-10]; - system("ppmmix $n junk1o$$.ppm junk2o$$.ppm >junk3$$.ppm"); + system("ppmmix $n $tmpdir/junk1o$$.ppm $tmpdir/junk2o$$.ppm >$tmpdir/junk3$$.ppm"); } else { my $n = $spline10[$i-20]; - system("ppmmix $n junk2o$$.ppm junk2$$.ppm >junk3$$.ppm"); + system("ppmmix $n $tmpdir/junk2o$$.ppm $tmpdir/junk2$$.ppm >$tmpdir/junk3$$.ppm"); } if ($i == 10) { - system("ppmtopgm junk2$$.ppm | pgmedge >junko$$.ppm"); - system("rgb3toppm junko$$.ppm junko$$.ppm junko$$.ppm " . - ">junk2o$$.ppm"); + system("ppmtopgm $tmpdir/junk2$$.ppm | pgmedge >$tmpdir/junko$$.ppm"); + system("rgb3toppm $tmpdir/junko$$.ppm $tmpdir/junko$$.ppm $tmpdir/junko$$.ppm " . + ">$tmpdir/junk2o$$.ppm"); } } elsif ($mode eq $BENTLEY) { if ($i == 1) { - system("ppmtopgm junk1$$.ppm | pgmbentley >junko$$.ppm"); - system("rgb3toppm junko$$.ppm junko$$.ppm junko$$.ppm " . - ">junk1o$$.ppm"); + system("ppmtopgm $tmpdir/junk1$$.ppm | pgmbentley >$tmpdir/junko$$.ppm"); + system("rgb3toppm $tmpdir/junko$$.ppm $tmpdir/junko$$.ppm $tmpdir/junko$$.ppm " . + ">$tmpdir/junk1o$$.ppm"); } if ($i <= 10) { my $n = $spline10[$i]; - system("ppmmix $n junk1$$.ppm junk1o$$.ppm >junk3$$.ppm"); + system("ppmmix $n $tmpdir/junk1$$.ppm $tmpdir/junk1o$$.ppm >$tmpdir/junk3$$.ppm"); } elsif ($i <= 20) { my $n = $spline10[$i-10]; - system("ppmmix $n junk1o$$.ppm junk2o$$.ppm >junk3$$.ppm"); + system("ppmmix $n $tmpdir/junk1o$$.ppm $tmpdir/junk2o$$.ppm >$tmpdir/junk3$$.ppm"); } else { my $n = $spline10[$i-20]; - system("ppmmix $n junk2o$$.ppm junk2$$.ppm >junk3$$.ppm"); + system("ppmmix $n $tmpdir/junk2o$$.ppm $tmpdir/junk2$$.ppm >$tmpdir/junk3$$.ppm"); } if ($i == 10) { - system("ppmtopgm junk2$$.ppm | pgmbentley >junko$$.ppm"); - system("rgb3toppm junko$$.ppm junko$$.ppm junko$$.ppm " . - ">junk2o$$.ppm"); + system("ppmtopgm $tmpdir/junk2$$.ppm | pgmbentley >$tmpdir/junko$$.ppm"); + system("rgb3toppm $tmpdir/junko$$.ppm $tmpdir/junko$$.ppm $tmpdir/junko$$.ppm " . + ">$tmpdir/junk2o$$.ppm"); } } elsif ($mode eq $BLOCK) { if ($i <= 10) { my $n = 1 - 1.9*$spline20[$i]; - system("pamscale $n junk1$$.ppm | " . - "pamscale -width $width -height $height >junk3$$.ppm"); + system("pamscale $n $tmpdir/junk1$$.ppm | " . + "pamscale -width $width -height $height >$tmpdir/junk3$$.ppm"); } elsif ($i <= 20) { my $n = $spline10[$i-10]; - system("ppmmix $n junk1a$$.ppm junk2a$$.ppm >junk3$$.ppm"); + system("ppmmix $n $tmpdir/junk1a$$.ppm $tmpdir/junk2a$$.ppm >$tmpdir/junk3$$.ppm"); } else { my $n = 1 - 1.9*$spline20[31-$i]; - system("pamscale $n junk2$$.ppm | " . - "pamscale -width $width -height $height >junk3$$.ppm"); + system("pamscale $n $tmpdir/junk2$$.ppm | " . + "pamscale -width $width -height $height >$tmpdir/junk3$$.ppm"); } if ($i == 10) { - system("cp", "junk3$$.ppm", "junk1a$$.ppm"); - system("pamscale $n junk2$$.ppm | " . - "pamscale -width $width -height $height >junk2a$$.ppm"); + system("cp", "$tmpdir/junk3$$.ppm", "$tmpdir/junk1a$$.ppm"); + system("pamscale $n $tmpdir/junk2$$.ppm | " . + "pamscale -width $width -height $height >$tmpdir/junk2a$$.ppm"); } } elsif ($mode eq $MIX) { my $fade_factor = sqrt(1/($nframes-$i+1)); - system("ppmmix $fade_factor junk1$$.ppm junk2$$.ppm >junk3$$.ppm"); + system("ppmmix $fade_factor $tmpdir/junk1$$.ppm $tmpdir/junk2$$.ppm >$tmpdir/junk3$$.ppm"); } else { print("Internal error: impossible mode value '$mode'\n"); } my $outfile = sprintf("%s.%04d.ppm", $base_name, $i); - system("cp", "junk3$$.ppm", $outfile); + system("cp", "$tmpdir/junk3$$.ppm", $outfile); } # # Clean up shop. # -system("rm junk*$$.ppm"); +system("rm $tmpdir/junk*$$.ppm"); exit(0); --- netpbm-10.35.64/editor/ppmquantall +++ netpbm-10.35.64/editor/ppmquantall @@ -70,13 +70,8 @@ heights=(${heights[*]} `grep -v '^#' $i | sed '1d; s/.* //; 2q'`) done -tempdir="${TMPDIR-/tmp}/ppmquantall.$$" -mkdir $tempdir || { echo "Could not create temporary file. Exiting."; exit 1;} -chmod 700 $tempdir - -trap 'rm -rf $tempdir' 0 1 3 15 - -all=$tempdir/pqa.all.$$ +all=$(mktemp -t pqa.all.XXXXXXXXXX) || exit 1 +rm -f $all pnmcat -topbottom -jleft -white ${files[@]} | pnmquant $newcolors > $all if [ $? != 0 ]; then --- netpbm-10.35.64/editor/ppmshadow +++ netpbm-10.35.64/editor/ppmshadow @@ -72,9 +72,10 @@ my $tmpdir = $ENV{TMPDIR} || "/tmp"; -my $ourtmp = "$tmpdir/ppmshadow$$"; -mkdir($ourtmp, 0777) or - die("Unable to create directory for temporary files '$ourtmp"); +my $ourtmp; chomp($ourtmp = `mktemp -d -t PPMshadow.XXXXXX`); +if ($? >> 8) { + die "Can't create directory for temporary files"; +} # Process command line options ++++++ netpbm-tmpfile.patch ++++++ --- editor/pnmindex.csh +++ editor/pnmindex.csh @@ -88,7 +88,7 @@ goto usage endif -set tmpfile=/tmp/pi.tmp.$$ +set tmpfile=.pi.tmp.$$ rm -f $tmpfile set maxformat=PBM --- editor/ppmquantall.csh +++ editor/ppmquantall.csh @@ -34,8 +34,8 @@ set heights=( $heights `sed '1d; s/.* //; 2q' $i` ) end -set all=/tmp/pqa.all.$$ -rm -f $all +set all=.pqa.all.$$ + pnmcat -topbottom -jleft -white $files | ppmquant -quiet $newcolors > $all if ( $status != 0 ) exit $status --- generator/ppmrainbow +++ generator/ppmrainbow @@ -47,7 +47,13 @@ push @colorlist, $ARGV[0]; } -my $tmpprefix = $tmpdir . "/$myname.$$."; +my $mytmpdir; +chomp($mytmpdir = `mktemp -d $tmpdir/ppmrainbow.XXXXXX`); +if ($? >> 8) { + die "Can't create tmpdir"; +} + +my $tmpprefix = $mytmpdir . "/file."; my $widthRemaining; my $n; @@ -79,4 +85,5 @@ END { unlink @outlist if @outlist; + rmdir $mytmpdir if -d $mytmpdir; } ++++++ prepare-src-tarball ++++++ --- /var/tmp/diff_new_pack.qaumni/_old 2011-05-26 10:24:17.000000000 +0200 +++ /var/tmp/diff_new_pack.qaumni/_new 2011-05-26 10:24:17.000000000 +0200 @@ -7,7 +7,7 @@ rm -rf REMOVE mkdir REMOVE cd REMOVE -svn checkout http://netpbm.svn.sourceforge.net/svnroot/netpbm/stable netpbm +svn checkout http://netpbm.svn.sourceforge.net/svnroot/netpbm/super_stable netpbm VER=`echo \`cut -f2 -d= netpbm*/Makefile.version \`|sed -e "s| |.|g"` mv netpbm* netpbm-$VER ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Remember to have fun... -- To unsubscribe, e-mail: opensuse-commit+unsubscr...@opensuse.org For additional commands, e-mail: opensuse-commit+h...@opensuse.org